Другие языки программирования и технологии
Олимпиадная задача
На вход программе подается текст, состоящий не более чем из 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.
Лови реализацию:
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.
Чтение/запись в файлы реализуешь сам.
Удачи!
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.
Чтение/запись в файлы реализуешь сам.
Удачи!
раз дан алгоритм шифровки, то для расшифровки выполни всё в обратном порядке.
да это же примитив. проходишь первый раз по строке и находишь n. потом проходишь второй раз по строке и заменяешь буквы.
Похожие вопросы
- Олимпиадные задачи по BASIC 4.5 ПОМОГИТЕ !!!
- Олимпиадная задача
- Помогите найти ошибку в решении олимпиадной задаче...
- олимпиадная задача по информатике. Помогите решить пожалуйста
- Олимпиадная задача по Информатике!
- Олимпиадная задача по паскалю
- Олимпиадная задача по программированию в Pascal (Free, ABC.net) 10 класс! Помогите решить?)
- Как на языке С++ сделать вывод 5 задач через switch-case?
- я хочу стать программистом, но пока только 0, с какого языка лучше начать,( математика олимпиадный уровень 9 класса)
- Как вы решаете задачи?