Шифрование сообщения методом Цезаря

program ex03_06;

{ шифрование сообщения методом Цезаря }

const

sym = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ '+

'абвгдеёжзийклмнопрстуфхцчшщъыьэюя'+

'01234567890.';

var

s0,s1: string;

key:integer;

procedure Encrypt(s: string;k: integer;var es:string);

var

l,ll,i,p: integer;

c:char;

begin

l:=length(s); ll:=length(sym);

es:=s;

for i:=1 to l do begin

c:=s[i];

p:=pos(c,sym); p:=p+k;

if p>ll then p:=p-ll;

es[i]:=sym[p];

end;

end;

procedure Decrypt(s:string;k:integer;var ds:string);

var

l,ll,i,p:integer;

c: char;

begin

L:=length(s); ll:=length(sym);

k:=1;

ds:=s;

for i:=1 to l do begin

c:=s[i];

p:=pos(c,sym)-k; if p<=0 then p:=p+ll;

ds[i]:=sym[p];

end;

end;

begin

write('Введите сообщение: '); readln(s0);

write('введите ключ: '); readln(key);

if key>0 then Encrypt(s0,key,s1)

else Decrypt(s0,-key,s1);

writeln(s1);

readln;

end.

Результат работы программы:

Введите сообщение: Вся Галлия делится на три части

введите ключ: 4

Ёх3гЖдппм3гзипмцх3гсдгцфмгыдхцм

Работа с массивами

Заполнение массива случайными числами

random(М);// целоечисло из интервала 0<=x<M

random; // число real из интервала 0<=x<1

Число из интервала (a,b): random(b-a+1)+a;

В приведенном ниже примере производится заполнение массива случайными числами. Заполнение оформлено в виде процедуры FillV. Кроме того, в этом же примере показаны пример передачи массива в подпрограмму по значению (процедура DispV) и по ссылке (процедура FillV).

program ex04_01;

{ пример заполнения массива случайными числами }

type

vect = array[1..100] of real;

var

a: vect;

n: integer; // фактический размер массива

procedure FillV(k, R: integer;var v:vect);

{ процедура заполнения случайными числами }

{ k - число элементов, r - диапазон чисел }

var

i: integer;

begin

for i:=1 to k do v[i]:=random(r);

end;

procedure DispV(k: integer;v:vect);

var i: integer;

begin

for i:=1 to k do begin

write('[',i:2,']=',v[i]:7:4,' ');

if i mod 5 =0 then writeln;

end;

end;

begin

randomize;

write('введите фактический размер массива: ');

readln(n);

FillV(n,10,a);

DispV(n,a);

readln;

end.

Определение максимального элемента массива и его индекса

Программа определяет значение и индекс (номер) максимального элемента массива и выдаёт сообщение на экран.

program ex04_02;

{ Определение максимального элемента и его индекса }

const N=10;

var

m: array[1..N] of real; { объявление массива }

i: integer; { параметр цикла for }

max: real; { значение максимального элемента }

maxi: integer; { его индекс }

begin

{ ввод массива }

for i:=1 to N do begin

write('введите m[',i:2,']= ');

readln(m[i]);

end;

maxi:=1; max:=m[1]; { вначале max равен первому эл-ту }

for i:=2 to N do

if m[i]>max then begin

maxi:=i; max:=m[i];

end;

writeln('Максимальный элемент равен: ',max:12:5);

writeln('его индекс: ',maxi);

readln;

end.

Сортировка массивов

Сортировка массивов методом обменов (пузырька)

Для наглядности и возможности самостоятельно ознакомиться с этим методом сортировки в программе предусмотрен вывод массива после каждого прохода.

Идея метода состоит в сравнении двух соседних элементов, в результате чего меньшее число (более легкий "пузырек") перемещается на одну позицию влево.

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

При использовании этого алгоритма весь массив просматривается несколько раз подряд.

При каждом таком просмотре сравниваются последовательно только соседние элементы массива. Если при сравнении окажется, что предыдущий элемент больше следующего, они меняются местами описанным выше способом. Так в результате одного последовательного просмотра элементы, значение которых больше, "всплывают" образно говоря на поверхность, т.е. ближе к концу массива. Если провести такой последовательный просмотр массива несколько раз, то "тяжёлые" элементы окончательно "всплывут" и массив окажется отсортированным.

Ниже приведен пример программы. Для наглядности после каждого обмена на экран выводится текущее состояние массива. Красным цветом выделена собственно сортировка .

Program ex04_03;

{ ex25_01 сортировка массива методом пузырька }

{ с выводом после каждого прохода, проходы - с конца }

const

N = 10; { размер массива }

Var

i, j, buf, k: integer; { счетчики и буфер обмена }

a: array[1..10] of integer;

begin

{ ввод массива }

for i:=1 to N do begin

write('a[',i,']= '); readln(a[i]);

end;

{ контрольный вывод массива }

writeln('исходный массив:');

for i:=1 to N do write(a[i]:5); writeln;

{ сортировка, проходы - с конца массива }

writeln('сортировка:');

for i:=1 to N do begin

for j:=N-1 downto i do

if a[j]>a[j+1] then begin

buf:=a[j]; a[j]:=a[j+1]; a[j+1]:=buf;

end;

{ вывод массива – для демонстрации }

for k:=1 to N do write(a[k]:5);

writeln;

end;

{ итоговый вывод массива }

writeln('отсортированный массив:');

for i:=1 to N do write(a[i]:5); writeln;

readln;

end.

Результат работы программы:

исходный массив:

7 5 1 2 9 6 4 1 3 8

сортировка:

1 7 5 1 2 9 6 4 3 8

1 1 7 5 2 3 9 6 4 8

1 1 2 7 5 3 4 9 6 8

1 1 2 3 7 5 4 6 9 8

1 1 2 3 4 7 5 6 8 9

1 1 2 3 4 5 7 6 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

1 1 2 3 4 5 6 7 8 9

отсортированный массив:

1 1 2 3 4 5 6 7 8 9

Наши рекомендации