Напишите программу, которая будет быстро и правильно производить конвертацию пароля - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

4.

Ох уж эти ученые...

Имя входного файла input.txt Имя выходного файла output.txt Максимальное время работы на одном тесте 2 секунды Ограничение по памяти 64 МБ
"...Британские ученые выяснили, что чаще всего взламывают пароли, содержащие группы одинаковых подряд идущих символов, пробелы и звездочки, и гораздо реже пароли, содержащие многоточия..." Услышав эту новость, Вася крепко задумался: почти все его пароли попадают в группу риска!!! Для того чтобы исправить ситуацию, он решил конвертировать все свои пароли по следующему правилу: от группы одинаковых символов оставить один, два и более пробелов заменить на знак подчёркивания, а две и более звездочки — на многоточие. Напишите программу, которая будет быстро и правильно производить конвертацию пароля.

Формат входных данных:

Задан пароль — непустая строка длиной до 100 000 символов, которая может состоять из строчных букв латинского алфавита, пробелов и символов '*'. Формат выходных данных: Выведите пароль, полученный после конвертации.
Пример input.txt output.txt abcd abcd aaabbc** abc...
Буду очень благодарен

Решение задачи: «Напишите программу, которая будет быстро и правильно производить конвертацию пароля»

textual
Листинг программы
Function ConvertPass(S : String) : String;
Var
  k  : Integer;
  ss : String;
Begin
  If Length(S)>1 then
    If S[1]=S[2] then
    Begin
      k:=3;
      While (k<=Length(S)) and (S[k]=S[1]) do Inc(k);
      Case S[1] of
        ' ' : ss:='_';
        '*' : ss:='...';
        else ss:=S[1]
      end;
      ConvertPass:=ss+ConvertPass(Copy(S,k,Length(S)));
    end
      else ConvertPass:=S[1]+ConvertPass(Copy(S,2,Length(S)-1))
  else ConvertPass:=S;
end;
 
Begin
  Writeln(ConvertPass('aaabbc**    c****bbba11111')); { abc..._c...ba1 }
end.

Объяснение кода листинга программы

  1. В функции ConvertPass объявлены две переменные: k и ss. Переменная k инициализируется значением 3, а переменная ss инициализируется пустой строкой.
  2. Если длина входной строки S больше 1, то выполняется проверка: если первый и второй символы строки S равны, то переменная k устанавливается равной 3, и затем выполняется цикл While, который продолжается до тех пор, пока k меньше или равно длине строки S и символы S[k] равны символу S[1].
  3. В зависимости от символа S[1], в переменную ss записывается соответствующий символ: ' ' - подчеркивание '_', '' - многоточие '...'. Если символ не равен ' ' или '', то он просто добавляется в переменную ss.
  4. После выполнения цикла, функция ConvertPass вызывает саму себя, передавая в качестве аргумента подстроку S, начиная с позиции k и заканчивая концом строки S.
  5. Если после выполнения всех проверок и циклов переменная k осталась равной 3, то в функцию ConvertPass передается подстрока S, начиная с позиции k и заканчивая концом строки S. В противном случае, в функцию передается подстрока S, начиная с позиции 2 и заканчивая концом строки S.
  6. В теле функции Begin-End находится основной блок кода программы. В этом блоке выполняется вывод на экран результата работы функции ConvertPass, который вычисляется как конкатенация символа ss и результата вызова функции ConvertPass для подстроки S, начиная с позиции k.
  7. В конце программы выполняется вывод на экран строки 'abc..._c...ba1'.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.231 из 5
Похожие ответы