- •Введение
- •Лабораторная работа №1. Создание простого приложения
- •1 ) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию щелчка по командным кнопкам (программирование событий):
- •3) Компиляция и выполнение приложения
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №2. Циклические программы. Многострочное поле memo
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию щелчка по командным кнопкам (программирование событий)
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №3. Работа с одномерными массивами
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 4. Работа с двумерными массивами
- •Контрольные вопросы
- •Лабораторная работа № 5. Процедуры и функции в delphi
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 6. Рекурсивные процедуры и функции
- •Контрольные вопросы
- •Лабораторная работа №7. Разработка приложения с несколькими модулями
- •2) Последовательность действий по программированию событий
- •Лабораторная работа №8. Работа со строками
- •1) Последовательность действий по созданию интерфейса пользователя
- •2) Последовательность действий по программированию событий
- •3) Откомпилируйте приложение и проверьте его работу задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №9. Создание текстового редактора
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 10. Методы простой сортировки
- •Задание для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 11. Поиск данных в массиве
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №12. Работа с файлами
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа №13. Работа с типизированными файлами (файлы записей)
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 14. Динамические структуры данных . Стек и очередь
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Лабораторная работа № 15. Практическое применение стека и очереди
- •Лабораторная работа №16. Линейные списки
- •Лабораторная работа №17. Работа с бинарными деревьями поиска
- •Задание для самостоятельной работы
- •Лабораторная работа №18. Основы объектно-ориентированного программирования
- •Задание для самостоятельной работы
- •Лабораторная работа №19. Графика в delphi. Компоненты shape и chart
- •Контрольные вопросы
- •Лабораторная работа №20. Графика в delphi. Рисование по пикселам и пером
- •Контрольные вопросы
- •Лабораторная работа № 21. Вычисление суммы ряда
- •Литература
- •Содержание
- •214013 Г. Смоленск, Энергетический проезд, 1
Контрольные вопросы
Особенности работы с двумерными массивами в Delphi
Автоматическое заполнение двумерного массива
Заполнение двумерного массива вручную
Свойства и методы компонента StringGrid
Работы с компонентом RadioGroup.
Лабораторная работа № 5. Процедуры и функции в delphi
ЦЕЛЬ ЗАНЯТИЯ: Освоить работу с процедурами и функциями в среде Delphi.
ПОДГОТОВКА К РАБОТЕ:
Изучить особенности организации процедур и функций;
Изучить методы описания процедур и функций и способы передачи параметров.
Задание. Создать приложение, выполняющее шифрование/дешифрирование строки текста методом гаммирования с использованием процедур.
Под гаммированием понимают процесс наложения по определенному закону гаммы шифра на открытые данные. Гамма шифра - это псевдослучайная последовательность, выработанная по заданному алгоритму для шифрования открытых данных и дешифрирования зашифрованных данных.
Процесс шифрования заключается в генерации гаммы шифра и наложении полученной гаммы на исходный открытый текст обратимым образом, например с использованием операции сложения по модулю 2.
Приложение, выполняющее шифрование/дешифрирование приведено на рисунке 5.1. Список компонентов приложения приведен в таблице 5.1.
В данном примере каждый символ исходного текста складывается по модулю 2 с очередным символом гаммы шифра (функция XOR).
Гамма шифра вводится пользователем с клавиатуры.
Операция дешифрования выполняется аналогично операции шифрования.
Таблица 5.1. Список компонентов приложения
Компонент |
Описание |
Label1 |
Метка «Гамма шифра» |
Label2 |
Метка «Исходный текст» |
Label3 |
Метка «Шифртекст» |
Edit1 |
Окно ввода гаммы шифра |
Edit2 |
Окно ввода исходного текста при шифровании и вывода расшифрованного текста при дешифрировании |
Edit3 |
Окно вывода зашифрованного текста |
Button1 |
Кнопка «Шифровать» |
Button2 |
Кнопка «Дешифровать» |
Button3 |
Кнопка «Очистить исходный текст» |
Последовательность действий
Так как в данном случае операции шифрования и дешифрования выполняются аналогично, можно использовать одну процедуру и для шифрования и для дешифрования.
Процедура шифрования/ дешифрования имеет вид:
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
Var i,j:Integer;
begin
s_Rez:=''; i:=1;
While i<=Length(s_Source) do
begin
For j:=1 to Length(s_gamma) do
s_rez:=s_rez+chr(ord(s_source[i+j-1]) xor ord(s_gamma[j]));
i:=i+Length(s_gamma);
end;
end;
где s_source- исходная строка. При шифровании – это исходный текст, при дешифрировании – это шифртекст;
s_gamma - гамма шифра;
s_rez – результирующая строка. При шифровании – это шифртекст, при дешифрировании – исходный текст.
Процедура работает следующим образом:
В цикле For последовательно каждый символ гамма шифра складывается по модулю 2 с символами исходного текста.
Если длина текста больше, чем длина гаммы шифра (сравнение выполняется оператором While), то пункт 1 повторяется.
Рассмотрим следующие варианты подключения процедуры proc_encr;
Процедура proc_encr является членом класса TForm1;
Процедура proc_encr не является членом класса TForm1, а описана в блоке implementation;
Процедура proc_encr описана в дополнительном модуле Unit2;
Процедура proc_encr является членом класса TForm2, то есть описана в другом модуле. (например, Unit2).
Вариант 1. Процедура proc_encr является членом класса TForm1
Для реализации данного варианта выполните следующие действия:
Объявите процедуру proc_encr как процедуру-член класса TForm1:
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
………………………….
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
private
{ Private declarations }
public
{ Public declarations }
end;
В блоке implementation выполните описание процедуры proc_encr:
implementation
{$R *.DFM}
procedure TForm1.proc_encr(s_source,s_gamma:String;Var s_rez:String);
Var i,j:Integer;
{тело процедуры, описание приведено выше}
end;
Для события OnClick кнопки Button1 напишите программный код:
procedure TForm1.Button1Click(Sender: TObject);
Var s1,s2,s3:String;
begin
s1:=Edit2.text; {Запомнить исходную строку}
s2:=Edit1.text; {Запомнить строку гаммы шифра}
proc_encr (s1,s2,s3);
Edit3.Text:=s3; {Вывод результата шифрования}
end;
Для события OnClick кнопки Button2 напишите программный код:
procedure TForm1.Button2Click(Sender: TObject);
Var s1,s2,s3:String;
begin
s1:=Edit3.text; {Запомнить зашифрованную строку}
s2:=Edit1.text; {Запомнить строку гаммы шифра}
proc_encr (s1,s2,s3);
Edit2.Text:=s3; {Вывод результата дешифрирования}
end;
Для события OnClick кнопки Button3 напишите программный код:
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit2.Text:='';
end;
Откомпилируйте приложение и проверьте его работу.
Вариант 2. Процедура proc_encr не является членом класса TForm1, а описана в блоке implementation
Для реализации данного варианта выполните следующие действия:
В блоке implementation выполните описание процедуры proc_encr:
implementation
{$R *.DFM}
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
Var i,j:Integer;
begin
{тело процедуры}
end;
Программный код для событий OnClick кнопок Button1, Button2 и Button3 аналогичен программному коду варианта 1.
Откомпилируйте приложение и проверьте его работу.
Вариант 3. Процедура proc_encr описана в дополнительном модуле Unit2
Для реализации данного варианта выполните следующие действия:
Создайте новый модуль Unit2 (File | New | Unit). Назовите его Unit2.
В блоке interface модуля Unit2 объявите процедуру proc_encr, чтобы ее можно было использовать в других модулях:
В блоке implementation модуля Unit2 опишите процедуру proc_encr.
Модуль Unit2 имеет вид:
unit Unit2;
interface
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
implementation
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
Var i,j:Integer;
begin
{тело процедуры}
end.
В модуле Unit1 выполните подключение модуля Unit2:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;
Программный код для событий OnClick кнопок Button1, Button2 и Button3 модуля Unit1 аналогичен программному коду вариантов 1 и 2.
Откомпилируйте приложение и проверьте его работу.
Вариант 4. Процедура proc_encr является членом класса TForm2
Для реализации данного варианта выполните следующие действия:
Создайте новую форму (File | New | Form). Назовите ее Form2. Данной форме соответствует модуль Unit2. Форма Form2 изображена на рисунке 5.2.
В модуле Unit2 объявите процедуру proc_encr как член класса TForm2.
В блоке implementation модуля Unit2 опишите процедуру proc_encr.
Модуль Unit2 имеет вид:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs;
type
TForm2 = class(TForm)
procedure proc_encr(s_source,s_gamma:String;Var s_rez:String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
procedureTForm2.proc_encr(s_source,s_gamma:String;Var s_rez:String);
Var i,j:Integer;
begin
{тело процедуры}
end;
{$R *.dfm}
end.
В модуле Unit1 выполните подключение модуля Unit2:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2;
Для события OnClick кнопки Button1 (модуль Unit1) напишите следующий программный код:
procedure TForm1.Button1Click(Sender: TObject);
Var s1,s2,s3:String;
begin
s1:=Edit2.text; s2:=Edit1.text;
Form2.proc_encr (s1,s2,s3); Edit3.Text:=s3;
end;
Для события OnClick кнопки Button2 (модуль Unit1) напишите следующий программный код:
procedure TForm1.Button2Click(Sender: TObject);
Var s1,s2,s3:String;
begin
s1:=Edit3.text; s2:=Edit1.text;
Form2.proc_encr (s1,s2,s3); Edit2.Text:=s3;
end;
Программный код события OnClick кнопки Button3 (модуль Unit1) соответствует программному коду в вариантах 1,2 и 3.
Откомпилируйте приложение и проверьте его работу.