![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Здравствуйте! В этом году начал изучать C#. Работаю в среде Visual Studio 2005. Возник вопрос по поводу написания программы:
Имеется некоторое предложение (слова разделяются символами подчеркивания - '_'). Используя треугольник Паскаля, зашифруйте исходное предложение по следующему правилу: · из предложения выделяется очередное слово; · из треугольника Паскаля выбирается строка с номером, равным числу букв в слове; · k-я буква исходного слова заменяется на букву, отстоящую от исходной на число букв, указанное в k-м столбце выбранной строки треугольника Паскаля (отсчет производится по кругу, т.е после 'я' идет 'а'); Пример: _с т о л_ <- слово 1 3 3 1 <- строка в треугольнике паскаля Закодированное слово будет 'с'+1, 'т'+3, 'о'+3, 'л'+1, то есть "тхсм" =)) |
|||
|
||||
| nerezus |
|
|||
![]() Вселенский отказник ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3330 Регистрация: 15.6.2005 Репутация: 1 Всего: 43 |
|
|||
|
||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Не могу написать код для расчета функции треугольника Паскаля и последующее подсиавление формулы в строку, заменяющую символы.
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Вот примерный листинг необходимой тебе программы:
Программку можно немного улучшить, но в общем она выполняет поставленную задачу. |
|||
|
||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Idsa, ты действительно шустрый!))) Большое спс за прогу - выручил!
Скажи пожалуйста, если я в программе должен задавать строку с клавиатуры, то в начале кода я должен писать:
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Странно... Приведи побольше кода. Ошибка не в этой строке.
Это сообщение отредактировал(а) Idsa - 15.2.2007, 21:59 |
|||
|
||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Компилятор выводит: я_программист Начальная строка: я_программист Конечная строка: @_IIIIIIIIIII Хотя нужно вывести вместо буквы я - а, а слово "программист" в соответствии с 11 строкой в треугольнике Паскаля (11 букв)... Это сообщение отредактировал(а) Legolas - 15.2.2007, 22:11 |
|||
|
||||
| Idsa |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Фишка в следующем: (MSDN)
Получается, что .NET не поддерживает расширенную (8-битную) ASCII - кодировку. Было бы интересно узнать, почему это они один битик зажали? Может, решили таким образом подтолкнуть всех к переходу на Юникод? В твоей ситуации оптимальным будет использовать UTF-8:
Однако имей в виду, что таблицы кодов и соответствующих символов в расширенной ASCII и в UTF8 не совпадают! P. S. А что значит "code page 65001"? |
||||
|
|||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
у меня возникла идея, в смысле я знаю как можно получить код ASCII каждого введенного символа, но не знаю как это связать с треугольником Паскаля...
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Для того чтобы изменить кодировку, найди в коде строку Encoding.ASCII.GetBytes и замени ASCII, например, на UTF8.
Это сообщение отредактировал(а) Idsa - 15.2.2007, 22:52 |
|||
|
||||
| Legolas |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 229 Регистрация: 14.2.2007 Репутация: 2 Всего: 5 |
Пеоменял,но компилятор пишет "?_?????????" в качестве шифровки строки...(
|
|||
|
||||
| Idsa |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Да, действительно все не так просто:
Получается, что делать смещение тупым добавлением значения смещения мы не можем: буква может храниться вплоть до четырех ячеек нашего массива byte[]. У меня есть одна идея правильной реализации засчет GetByteCount... но это уже не сегодня. Если никто не предложит ничего более умного, завтра напишу код. А сейчас - спать |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Не нужно мудрить с byte[], GetBytes, кодировками и так далее. Строка состоит из char-ов, каждый из которых уже в юникоде, и обратиться к char-у строки можно по обычному индексу.
-------------------- ![]() |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Да проблема-то не в этом! Legolas, доделал я тебе прогу. Разбирайся:
Добавлено @ 13:31 Input: а_бв Output: б_вг Добавлено @ 13:35 В процессе написания программы я окончательно запутался в Unicod'е... Чтобы не флудить здесь, наверное, создам отдельную тему. Это сообщение отредактировал(а) Idsa - 16.2.2007, 13:33 |
|||
|
||||
| Gelis |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 145 Регистрация: 26.10.2006 Где: Брест Репутация: 2 Всего: 4 |
Нужно использовать не Encoding.ASCII а кодировку Encoding.GetEncoding(866) Первая просто ничего не знаят об руском языке и нужно явно указать 866-кодовую страницу, которая используется для русского языка в консольных приложениях |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |