Песни о Паскале - [43]

Шрифт
Интервал

>      Decrypt:= Char(x);

>end;


>{––––– Шифрование строки –––––}

>procedure EncryptStr(var arg: string);

>var k: integer;

>begin

>      for k:=1 to Length(arg) do

>      arg[k]:= Encrypt(arg[k]);

>end;

>{––––– Расшифровка строки –––––}

>procedure DecryptStr(var arg: string);

>var k: integer;

>begin

>      for k:=1 to Length(arg) do

>      arg[k]:= Decrypt(arg[k]);

>end;

>      {––––– Главная программа –––––}

>var S: string;

>      Oper: integer;

>begin

>      repeat

>      Write('Введите строку: '); Readln(S);

>      Writeln('Укажите операцию: 1– шифровать,’+

>      ’ 2– расшифровать,’+

>      ’ Прочие – выход');

>      Readln(Oper);

>      case Oper of

>      1: EncryptStr(S);

>      2: DecryptStr(S);

>      else Break;

>      end;

>      Writeln(S); { печатаем результат }

>      until false;

>end.


Программа нуждается лишь в кратких пояснениях. Глобальная константа CKey содержит ключ шифра. Если со временем захотите сменить его, достаточно будет изменить константу и заново откомпилировать программу. Далее следуют описания двух функций: Encrypt и Decrypt – для шифрования и расшифровки символа. Процедуры EncryptStr и DecryptStr шифруют и расшифровывают строки, передаваемые им по ссылке VAR. И, наконец, в главной программе организован цикл для ввода шифруемой строки и кода выполняемой операции (Oper).

Откиньтесь в кресле и полюбуйтесь простотой блоков, составляющих эту программу! А во что бы мы превратили её, свалив в кучу эти простые алгоритмы? В заключение приведу протокол шифрования: пользователь ввел слово «pascal» и зашифровал его, получив слово «rcuecn». Затем ввел строку «rcuecn» и расшифровал её, получив назад данное мною слово.


>Введите строку: pascal

>Операции: 1 – шифровать, 2 – расшифровать, прочие – выход

>Введите операцию: 1

>rcuecn

>Введите строку: rcuecn

>Операции: 1 – шифровать, 2 – расшифровать, прочие – выход

>Введите операцию: 2

>pascal

>Операции: 1 – шифровать, 2 – расшифровать, прочие – выход

>Введите операцию: 3


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

Итоги

• В памяти компьютера символы представлены своими кодами – числами.

• Общее количество символов составляет 256, из них первые 32 – это управляющие, а остальные – видимые символы.

• Для преобразования числового кода в символ применяют функцию Char. Для обратного превращения – символа в число – пользуются функцией Ord..

• Паскаль «знает» о том, что символы кодируются числами, поэтому в счетчике цикла FOR допустимы символьные переменные, а в метках оператора CASE – символьные константы.

А слабо?

А) Измените программу шифрования с тем, чтобы ключ задавать с клавиатуры и передавать в процедуры и функции через параметр. Заголовки процедур и функций сделайте такими:


>function Encrypt(arg: char; key: integer): char;

>procedure EncryptStr(var arg: string; key: integer);


Хотя здесь проще держать ключ в глобальной переменной, но крупные программы этот приём запутывает, – там лучше передавать данные через параметры.

Б) Предположим, вы пятикратно зашифровали строку. Можно ли расшифровать её? И как это сделать?

В) Для введенной пользователем строки напечатать позиции всех входящих в неё символов (кроме пробелов) в алфавитном порядке. Для символов, которые встречаются несколько раз, напечатать их позиции в одной строке. Например, для слова «PASCAL»:


>A – 2 5

>C – 4

>L – 6

>p – 1

>S – 3


Г) Для введенной пользователем строки напечатать позиции всех встречающихся в ней символов, кроме пробелов, в порядке их следования в строке. Например, для слова «PASCAL»:


>P – 1

>A – 2 5

>S – 3

>C – 4

>L – 6


Д) Строки текстовых файлов порой содержат управляющие символы, например символ горизонтальной табуляции (код 9). Шифрование этих символов нашей программой нарушит структуру файла. Исправьте функции Encrypt и Decrypt так, чтобы они не изменяли символы, коды которых меньше 32.

Глава 25

Текстовые файлы



Мы мастерим программу шифрования текста. Шифрование отдельной строки освоено нами в предыдущей главе. Теперь научимся читать строки из одного файла и записывать их в другой.

Файлы хорошие и разные

Файлы – это хранилища данных, там может быть все что угодно: музыка, фильмы, книги. Ясно, что эта информация как-то закодирована, то есть, представлена в виде чисел – байтов. Файл любого типа – это набор байтов, хранящийся на диске (говорим пока о дисковых файлах). Каждому типу файлов нужен свой подход: к файлу нужна программа, «понимающая» его содержимое. Вам угодно слушать музыку? – к вашим услугам медиа-проигрыватель. Или надо печатать текст? – тогда запустите редактор текста. Но не наоборот! А все потому, что каждый тип файлов обладает структурой, понятной лишь соответствующей программе. Таким образом, файл и программа для работы с ним составляют логическое единство, – одно без другого лишено смысла.

Стало быть, структура или формат файла – его важнейшая характеристика. Все файловые форматы можно разделить на две категории:

• текстовые файлы;

• все прочие файлы, – их называют двоичными или бинарными.

О формате файла можно судить по его расширению. К текстовым относятся файлы с расширениями TXT – текст, BAT – пакетный файл, LOG – файл протокола и многие другие. Файлы наших программ с расширением PAS – тоже текстовые. А вот документы в формате Word (с расширением DOC) обладают сложной структурой, правильнее отнести их к бинарным. Так же, как и книги PDF–формата. В отличие от DOC и PDF, текстовые файлы открываются простыми редакторами текста – вроде «Блокнота» или редактора нашей IDE, который тоже работает с текстовыми файлами.


Рекомендуем почитать
Путешествие за счастьем

В далекой сказочной стране живут оборотни и люди, маги и демоны, орки и драконы. И сказки в ней случаются разные - добрые, веселые и даже страшные. А там где есть сказки, там обязательно есть счастье, а там где счастье, там должны быть феи.


Эинсмут: Героев не существует

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


Покрывало тьмы

Юмористическое фэнтези. История красавицы и чудовища на новый лад.


Демон и охотник

Знала ли юная Марианна, что кошмарные сны - это часть воспоминаний далекого прошлого. Прошлого, которое предстоит разгадать нашей героине. Ведь неизвестно как, девушка попала совсем другой мир, где сплошь и рядом те, кто не желает ей добра. И, как в сказках, к ней приходит на помощь.... Нет, не прекрасный принц на белом коне, а парень с маской на лице и выразительными изумрудными глазами. Что же ждет нашу героиню в этом мире? Сможет она узнать свое прошлое и принять его или же попытается от него убежать, ведь по пятам идет охотник....


Хранители: Город Сновидений

Шестнадцатилетняя девочка Энни, через книгу, попадает в город Сновидений, в котором происходит невероятная магия Луны. Там она узнает, что относится к необыкновенному роду людей – хранителям, которые защищают и помогают людям. Чтобы вернуться домой ей нужно найти лунный цветок расцветающий раз в сто лет, и который может исполнить любое, но одно желание.


Другая Земля Наследие Дружан

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