Присоединиться

11 класс·высокий уровень

На вход программе подается текст заклинания, состоящего не более чем из

Условие

На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано юным волшебником следующим образом. Сначала волшебник определил количество букв в самом коротком слове, обозначив полученное число К (словом называется непрерывная последовательность латинских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую латинскую букву в заклинании на букву, стоящую в алфавите на К букв ранее (алфавит считается циклическим, то есть перед буквой А стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные — прописными. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран текст расшифрованного заклинания. Например, если зашифрованный текст был таким:Zb Ra Са Dab Ra,то результат расшифровки должен быть следующим:Bd Тс Ее Fed Тс.

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. Программа читает входные данные, сразу подсчитывая минимальную длину встречающихся слов. За второй проход исходных данных производится замена букв латинского алфавита и печать расшифрованного сообщения. Пример правильной и эффективной программы на языке Паскаль:var f:boolean; i, k, min: integer; c,cnew:char; s : string;begin s : = " ;min:=250; k:=0; f:=false; repeat read(c); s:=s+c;if f then {слово началось} if с in ['a' . . 'z', 'A' . . ' Z ' ]then k:=k+l else beginif k < min then min:=k;f:=false endelse {f=false} if с in [ 'a'. . ' z ' , 'A'.. ' Z']then begin f:=true; k:=l end until c='. ';for i:=l to length(s) do begincnew:=chr(ord(s[i])+min); case s[i] of'a'..'z':if cnew>'z' then write(chr(ord(cnew)-26)) else write(cnew);'A'..'Z':if cnew>'Z' then write(chr(ord(cnew)-26)) else write(cnew); else write(s[i]) end; end; readln end. Пример правильной программы на языке Бейсик:DIM i, j, min, к, f, a (26) AS INTEGER DIM s AS STRING INPUT s i = 1 k = 0 min = 250 f = 0WHILE NOT (MID(s, i,

Осталось ещё 6 шагов

  1. = ".")c = MID(s, i…

  2. IF f = 1 THENIF (c >= "A") AND (c <= "Z") OR…

  3. >= "a") AND (MID(s, j…

  4. <= "z") THEN IF cnew > "z" THEN PRINT…

  5. >= "A") AND (MID(s, j…

  6. <= "Z") THEN IF cnew > "Z" THEN PRINT…

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»