Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 23:10   #1
Gerberka
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 14
По умолчанию файлы

22) На вход программе подается строка (длиной не более 200 символов), в которой нужно зашифровать все английские слова (словом называется непрерывная последовательность английских букв, слова друга от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Строка заканчивается символом #, других символов # в строке нет. Каждое слово зашифровано с помощью циклического сдвига на длину этого слова. Например, если длина слова равна K, каждая буква в слове заменяется на букву, стоящую в английском алфавите на K букв дальше (алфавит считается циклическим, то есть, за буквой Z стоит буква A). Строчные буквы при этом остаются строчными, а прописные – прописными. Символы, не являющиеся английскими буквами, не изменяются.
Требуется написать программу, которая будет выводить на экран текст зашифрованного сообщения. Например, если исходный текст был таким:
Day, mice. "Year" is a mistake#
то результат шифровки должен быть следующий:
Gdb, qmgi. "Ciev" ku b tpzahrl#
нужно сделать эту задачу через файлы, вот обычная программа

var s: string;
inside: boolean;
i, j, k, len: integer;
begin
readln(s); { читаем строку }
inside := False;
{ цикл по всем символам строки }
for i:=1 to length(s) do begin
{ если латинская буква }
if s[i] in ['a'..'z','A'..'Z'] then
if inside then
len := len+1 { не первая буква слова }
else begin { первая буква слова }
len := 1;
inside := True;
end
else { если не латинская буква }
if inside then begin { закончилось слово }
inside := False;
{ шифруем len символов «назад» }
for j:=1 to len do begin
k := Ord(s[i-j]) + len; { сдвиг кода }
{ цикличность при выходе за границы }
if s[i-j] in ['a'..'z'] then
if k > Ord('z') then k := k - 26;
if s[i-j] in ['A'..'Z'] then
if k > Ord('Z') then k := k - 26;
s[i-j] := Chr(k); { новый символ }
end;
end;
end;
{ вывод результата }
writeln(s);
end.
Gerberka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файлы данных.Типизированные файлы. вылка Помощь студентам 6 17.05.2010 15:42
Файлы dragun4ik Помощь студентам 1 01.02.2010 21:56
Файлы Logan Паскаль, Turbo Pascal, PascalABC.NET 6 01.04.2008 10:15
Файлы xxxPascalxxx Помощь студентам 4 11.03.2008 00:35
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53