Файл: Основы программирования на языке Pascal (Характеристика языка программирования Pascal).pdf
Добавлен: 31.03.2023
Просмотров: 156
Скачиваний: 2
Например, нужно написать генератор паролей на 10 символов (английских букв и цифр).
Для этого разработаем следующий программный код, который будет включать функции:
– randomize();
– random().
Рисунок 4 – Результат выполнения программы
Программный код генератора паролей на 10 символов примет следующий вид
var s:string;
i,k:byte;
begin
randomize;
s:='';
for i:=1 to 10 do
begin
repeat
k:=48+random(75);
until k in [48..57,97..122];
s:=s+chr(k);
end;
write(s);
end.
Результат выполнения приведенной программы представлен на следующем рис. 5.
Рисунок 5 – Результат выполнения программы
Рассмотрим следующий пример, демонстрирующий реализации генератора случайных чисел для решения конкретной аналитической задачи средствами языка программирования Pascal.
Суть реализуемого шифра заключается в следующем: алфавит случайным образом записывают в 2 строки, и шифрование текста происходит заменой буквы на соседнюю ей по вертикали.
Пример исходной таблицы значений:
а б в г д е ё ж з и й к л м н о п
р с т у ф х ц ч ш щ ъ ы ь э ю я -
В результате выполнения программы должны получить следующее сообщение
Сообщение: степень выполнения работы
Шифр: вх-хюл тк-яьюхющо арсявк
Для реализации поставленной задачи, воспользуемся средствами языка программирования Pascal и разработаем следующий программный код
var
a, c, cOut: string;
i,j,L: integer;
begin
a := 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя-';
write('Enter string:');
readln(c);
L:=length(a) div 2;
setlength(cOut,length(c));
for i := 1 to length(c) do
begin
for j := 1 to length(a) do
begin
if c[i]=a[j] then
if j>L then cOut[i]:=a[j-L]
else cOut[i]:=a[j+L];
end;
end;
writeln('Result:', cOut);
end.
В результате выполнения программы будет получен следующий результат, представленный на рис. 6.
Рисунок 6 – Результат выполнения программы
Следующий пример позволяет увидеть генератор случайных чисел в действии при шифровании файла алфавитом. Задан массив, элементами которого являются буквы англоязычного алфавита. Получить новый массив, в котором буквы перестановлены случайным образом, и используя его зашифровать текстовый файл. Буквы англоязычного алфавита рассматриваем как массив.
Обозначим этот массив как A(52). Каждый элемент массива – A(I). Где I – это номер символа в массиве, I изменяется от 1 до 52.
A(I)=''a,b,c,d,e..."
Перемешаем исходный алфавит и можно получить следующий например
B(I)=''d,f,g,h,o..."
Используем исходный массив B(52) в виде специального ключа для шифрования.
Текст для осуществления шифрования возьмем произвольно, например, «студент». Определяем номер первой буквы текста в исходном алфавите: a=A(1).
В зашифрованный файл первой буквой записываем букву с тем же номером из перемешанного алфавита, а то есть B(1)=A(1)=d.
То есть, например, в этом случае последовательность abd шифруется как dfh. Исходный код программы шифрования файла алфавитом примет следующий вид
const alh1: array[0..51] of char =
('a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's',
't', 'u', 'v', 'w', 'x', 'y', 'z',
'A', 'B', 'C', 'D',
'E', 'F', 'G', 'H', 'I', 'J', 'K',
'L', 'M', 'N', 'O', 'P', 'Q', 'R',
'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
var i, mk, j, dlina, nk: integer;
f11: string;
f1,f2: text;
alh2: array[0..51] of char;
newtext: string;
buf: char;
begin
Randomize;
for i:=0 to 51 do alh2[i] := alh1[i];
writeln(alh1);
i:=0;
while i < 52 do
begin
mk := random(51);
buf := alh2[i];
alh2[i] := alh2[mk];
alh2[mk] := buf;
i := i + 1;
end;
writeln(alh2);
assign(f1, 'c:\file1.txt');
reset(f1);
readln(f1, f11);
close(f1);
writeln(f11);
dlina := length(f11);
newtext := '';
j := 1;
while j <= dlina
do begin
nk := 0;
while nk <= 51
do begin
if f11[j] = alh1[nk]
then begin newtext := newtext + alh2[nk];
end;
nk := nk + 1;
end;
j := j + 1;
end;
assign(f2, 'c:\file2.txt');
rewrite(f2);
writeln(f2,newtext);
close(f2);
writeln(newtext);
readln;
end.
Результат выполнения представленной программы представлен в Приложении.
Приведем еще один интересный пример шифрования данных по средствам использования шифра Цезаря.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря – один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря – это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее.
Шифр назван в честь римского полководца Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.
Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и всё ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет почти никакого применения на практике.
Так, алгоритм шифрования примет следующий вид
var
lalp: integer;
const
alp = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' +
'АБВГДЕЁЖЗИЙКЛМНПОРСТУФХЦЧШЩЪЫЬЭЮЯ' + 'abcdefghijklmnopqrstuvwxyz' +
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + '0123456789';
function Caesar_cipher(str: string; way: integer; key: integer): string;
var
s: string;
i, t, p: integer;
begin
if way > 0 then
key := -key;
key := key mod lalp;
if key = 0 then
begin
writeln('Error: wrong key (key not equals zero and not divisible by ',
lalp, ')');
Caesar_cipher := str;
exit;
end;
s := str;
p:= random(1);
for i := 1 to length(str) do
begin
t := pos(str[i], alp);
if t <> 0 then
s[i] := alp[(t - 1 + key + lalp) mod lalp + 1];
end;
Caesar_cipher := s;
end;
begin
randomize;
lalp := length(alp);
writeln(Caesar_cipher('Программировать просто', 0, 12));
readln;
end.
Результат выполнения разработанной программы представлен на рис. 7.
Рисунок 7 – Результат выполнения программы
Таким образом, можно сделать следующие выводы о том, что генератор случайных чисел является уникальным инструментом для создания большого количества программ и основы для организации вычислений. Возможности языка программирования Pascal для создания программ с генерацией случайных чисел может быть выполнено без особых усилий. А использование возможностей PascalABC.NET позволяет эффективней разрабатывать и отлаживать программы.
Заключение
В процессе выполнения данной работы были получены следующие результаты. Установлено, что язык программирования Pascal является достаточно интересным и многофункциональным языком программирования, который используется для обучения программированию в школе и для решения различных прикладных задач. Заложенные основы языка программирования послужили толчком к разработке PascalABC.NET, Delphi и др.
PascalABC.NET представляет собой язык программирования Pascal нового поколения, который включает в себя классический Pascal, большую часть функциональных возможностей языка программирования Delphi, а также ряд собственных специализированных расширений.
Анализируя возможности языка программирования Pascal и в частности PascalABC.NET был сделан вывод о том, что средств в нем для разработки прикладных программ достаточно. И в качестве примера был реализован генератор случайных чисел при помощи внутренних функций random() и randomize().
Список использованной литературы
- Архитектура и проектирование программных систем : монография / С.В. Назаров. – 2-е изд., перераб. и доп. – М. : ИНФРА-М, 2018. – 374 с.
- Архитектура ЭВМ и вычислительные системы : учебник / В.В. Степина. – М.: КУРС: ИНФРА-М, 2018. – 384 с.
- Баранова Е.К. Информационная безопасность и защита информации : учебное пособие / Е. К. Баранова, А. В. Бабаш. - 3-е изд., перераб. и доп. – М. : РИОР ; М. : ИНФРА-М, 2017. – 322 с.
- Борзунов С.В. Практикум по параллельному программированию: учеб. пособие / С.В. Борзунов, С.Д. Кургалин, А.В. Флегель. – СПб.: БХВ, 2017. – 236 с.
- Информатика : учебник / И.И. Сергеева, А.А. Музалевская, Н.В. Тарасова. – 2-е изд., перераб. и доп. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 384 с.
- Информатика и ИКТ : учеб. пособие / Н.Г. Плотникова. – М. : РИОР : ИНФРА-М, 2018. – 124 с.
- Информационные технологии в профессиональной деятельности : учеб. пособие / Е.Л. Федотова. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 367 с.
- Программирование в алгоритмах / Окулов С.М., – 6-е изд., (эл.) - М.:Лаборатория знаний, 2017. – 386 с.
- Программирование на языке высокого уровня. Программирование на языке Object Pascal : учеб. пособие / Т.И. Немцова, С.Ю. Голова, И.В. Абрамова ; под ред. Л.Г. Гагариной. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 496 с.
- Федорова Г.Н. Разработка, внедрение и адаптация программного обеспечения отраслевой направленности: учеб. пособие для студ. учреждений сред. проф. образования / Г.Н. Федорова. –: М.: КУРС : ИНФРА – М, 2017. – 334 с.