Другие языки программирования и технологии

Олимпиадная задача

На вход программе подается текст, состоящий не более чем из 200 символов. Текст был зашифрован следующим образом. Сначала определили количество букв в самом коротком слове, обозначив полученное число n (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами). Затем заменили каждую английскую букву в тексте на следующую за ней n-й по счету в алфавите (алфавит считается циклическим, за буквой Z следует буква А), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные — прописными. Напишите программу, которая будет выводить расшифрованный текст. Программа должна считать выходые данные из файла input.txt и вывести результат в файл output.txt Формат входного файла. Входной файл содержит одну строку с текстом. Длина строки не превышает 200 символов. Формат выходного файла. Выведите в выходной файл ответ расшифрованный текст. Пример input.txt output.txt Jgnnq yqtnf! Vjku oguucig ku xgta ugetgv. Hello world! This message is very secret.
А:
Андрей :)
86
Лови реализацию:

program DecryptString;

function FindShortestWord(InputString:string):byte;
var i,ShortestWordLength, TempLength:byte;
begin
ShortestWordLength:=200;
TempLength:=0;
for i:=1 to length(InputString)-1 do
begin
if (InputString[ i ] in [ 'A'..'z' ]) then
begin
inc(TempLength);
if not(InputString[ i+1 ] in [ 'A'..'z' ]) then
begin
if (TempLength <= ShortestWordLength) and (TempLength>0)
then ShortestWordLength := TempLength;
TempLength:=0;
end;
end;
end;
FindShortestWord := ShortestWordLength;
end;

function DecryptString(InputString:string; offset:byte):string;
var i,CodeOfLetter:byte;
tempStr:string;

begin
tempStr:=InputString;
for i:=1 to length(tempStr) do
begin
CodeOfLetter := Ord(tempStr[ i ]);
if (CodeOfLetter in [ 65..90 ]) then

if (CodeOfLetter - offset) < 65
then tempStr[ i ] := Chr(CodeOfLetter - offset - 64 + 90)
else tempStr[ i ] := Chr(CodeOfLetter - offset);

if (CodeOfLetter in [ 97..122 ]) then

if (CodeOfLetter - offset) < 97
then tempStr[ i ] := Chr(CodeOfLetter - offset - 96 + 122)
else tempStr[ i ] := Chr(CodeOfLetter - offset);

end;
DecryptString := tempStr;
end;

var s:string;

begin

s:='Jgnnq yqtnf! Vjku oguucig ku xgta ugetgv.';
writeln(DecryptString(s,FindShortestWord(s)));
readln;

end.

Чтение/запись в файлы реализуешь сам.

Удачи!
Александр Кирдяшкин
Александр Кирдяшкин
7 235
Лучший ответ
раз дан алгоритм шифровки, то для расшифровки выполни всё в обратном порядке.
да это же примитив. проходишь первый раз по строке и находишь n. потом проходишь второй раз по строке и заменяешь буквы.
MS
Muzaffar Sharipov
4 934