2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Шифровка
Сообщение02.12.2008, 09:41 
Аватара пользователя


23/06/08
57
Новоорск
Для того, чтобы никто не мог прочитать записку для соседки по парте, Вася пупкин шифрует текст следующим образом:
1. Убирает все пробелы и знаки препинания.
2 заменяет все подряд идущие одинаковые буквыы на одну такую букву.
3. Многократно вставляет в произвольное место текста две одинаковые буквы.
Требуется написать программу, восстанавливающую текст, каким он был после второго шага. Для этого удалите из текста все пары одинаковых символов, добавленныхна третьем шаге.
Формат входных данных:
В единственной строке входного файла записана шифровка Васи, состоящая из строчных латинских букв. Длина шифровки не превосходит 250 символов.
Формат выходных данных:
Единственная строка содержит востановленный текст.
Например
wwidaadoveffyouuu
iloveyou
Помогите решить! Я вообще не знаю паскаль, а учитель задал...

 Профиль  
                  
 
 
Сообщение02.12.2008, 10:32 


31/08/08
88
Харків
Основная программа
Прочесть строку S (ReadLn)
Получить расшифрованную строку
Распечатать результат(Writeln)

Функция дешифровки. Принимает константное строковое выражение как входной параметр и возвращает строку
function FunName(const S: String): String
описать локальные переменные (var), понадобится I: Integer; для цикла и для некоторых компиляторов строка результата
начало функции (begin)
инициализировать результат пустой строкой
инициализировать счетчик единицей (первый символ строки)
организовать цикл от 1 го до предпоследнего символа (while I<Length(S))
если (if) текущий символ S[I] равен его следующему символу, то увеличить счетчик на два (пропуск двух одинаковых символов)
иначе (else) присоединить (операция +) текущий символ S[I] к строке результата

увеличить счетчик на 1
конец цикла

Теперь надо проверить не оставили ли мы последний символ (т.к. цикл только до предпоследнего)
Если I равен длине исходной строки, то присоединить еще последний символ.
конец функции
--

В разных вариантах Паскаля возможны ньюансы в результатом функции. Если это классический Паскаль, то под результат надо описать локальную переменную и перед выходом из функции присвоить ее значение имени функции. Если это Делфи, например, то лучше использовать специальную локальную переменную Result

 Профиль  
                  
 
 
Сообщение02.12.2008, 13:43 
Заслуженный участник


31/12/05
1480
Maxim Vlasov писал(а):
если (if) текущий символ S[I] равен его следующему символу, то увеличить счетчик на два (пропуск двух одинаковых символов)
Для процитированного daad не сработает. Две a удалит, две d - нет.

 Профиль  
                  
 
 
Сообщение02.12.2008, 14:17 


31/08/08
88
Харків
Думал, что в приведенном примере опечатка

Согласен, если метод шифровки допускает такую вставку, то алгоритм надо переделывать. Например, один внешний цикл (или рекурсивный вызов), который заканчивается, если на текущей итерации не было найдено ни одной пары.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group