≡ информатика
сайты - меню - вход - новости




Задания
Версия для печати и копирования в MS Word
Задание 27 № 3642

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

Zb Ra Са Dab Ra,

то результат расшифровки должен быть следующим:

Bd Тс Ее Fed Тс.

Пояснение.

Программа читает входные данные, сразу подсчитывая минимальную длину встречающихся слов. За второй проход исходных данных производится замена букв латинского алфавита и печать расшифрованного сообщения.

 

Пример правильной и эффективной программы на языке Паскаль:

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 begin

if k < min then min:=k;

f:=false end

else {f=false}

if с in [ 'a'. . ' z ' , 'A'.. ' Z']

then begin f:=true; k:=l end

until c='. ';

for i:=l to length(s) do

begin

cnew:=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 = 0

WHILE NOT (MID$(s, i, 1) = ".")

c$ = MID$(s, i, 1)

IF f = 1 THEN

IF (c$ >= "A") AND (c$ <= "Z") OR

(c$ >= "a") AND (c$ <= "z") THEN

k = k + 1

ELSE IF k < min THEN min = k

f = 0

ENDIF

ELSF.

IF (с $ >= "A") AND (c$ <= "Z") OR

(cS >= "a") AND (с $ <= "z") THEN

f = 1 : к = i

ENDIF

ENDIF i = i + 1

WEND

IF к < min THEN min = k

FOR j = 1 TO i

cnew$ = CHR$(ASC(MID$(s, j, 1)) + min) IF (MID$(s, j, 1) >= "a") AND (MID$(s, j, 1)

<= "z") THEN

IF cnew$ > "z" THEN

PRINT (CHRS(ASC(cnew$) - 26));

ELSE PRINT cnew$;

ENDIF

ELSE

IF (MID$ (s, j, 1) >= "A") AND (MID$(s, j, 1)

<= "Z") THEN

IF cnew$ > "Z" THEN

PRINT (CHRS(ASC(cnew$) - 26));

ELSE PRINT cnew$;

ENDIF

ELSE

PRINT MID$(s, j, 1);

ENDIF

ENDIF

NEXT j

END