program
Project2;
{$APPTYPE CONSOLE}
uses
SysUtils,Windows;
Var
q,k:
integer
;
SS:
Array
[
1..
k]
of
String
;
Text,Text_1,Text_2,Text_3,S:
String
;
Textmatr:
Array
[
1..
q,
1..
k]
of
Char
;
i,j,kolsimvolov,code:
integer
;
key1:
array
[
1..
q]
of
Byte
;
key2:
array
[
1..
k]
of
Byte
;
p,m:
Boolean
;
Begin
SetConsoleCP(
1251
);
SetConsoleOutputCP(
1251
);
write
(
'Введите количество строк в матрице: '
);
readln (q);
write
(
'Введите количество столбцов вматрице: '
);
readln (k);
repeat
Write
(
'Введи текст для кодировки: '
);
Readln(Text);
kolsimvolov:=Length(text);
m:=
True
;
if
kolsimvolov>q*k
then
m:=
False
;
if
not
(m)
then
writeln
(
'количество символов не должно превышать '
, q*k);
until
m;
If
kolsimvolov< q*k
then
repeat
text:=text+
' '
;
Inc(kolsimvolov);
until
kolsimvolov=q*k;
Repeat
Write
(
'Введите ключ1 '
, q,
' цифр(ы) без пробелов): '
);
Readln(S);
for
i:=
1
to
q
do
Val
(S[i],key1[i],Code);
p:=
true
;
for
i:=
1
to
5
do
for
j:=i+
1
to
6
do
if
(key1[i]=key1[j])
then
p:=
false
;
If
Not
(p)
then
writeln
(
'Все цифры должны быть различными!'
);
Until
p;
Repeat
Write
(
'Введите ключ2 '
, k,
' цифр(ы) без пробелов): '
);
Readln(S);
for
i:=
1
to
k
do
Val
(S[i],key2[i],Code);
p:=
true
;
for
i:=
1
to
k-
1
do
for
j:=i+
1
to
k
do
if
(key2[i]=key2[j])
then
p:=
false
;
If
Not
(p)
then
writeln
(
'Все цифры должны быть различными!'
);
Until
p;
Writeln
;
For
i:=
1
to
q
do
For
j:=
1
to
k
do
Textmatr[key1[i],j]:=Text[(i-
1
)*k+j];
Writeln
(
' k1\k2 1 2 3 4'
);
For
i:=
1
to
q
do
begin
Write
(
' '
,i,
' '
);
For
j:=
1
to
k
do
write
(
' '
,textmatr[i,j],
' '
);
Writeln
;
end
;
Text_1:=
''
;
For
j:=
1
to
k
do
for
i:=
1
to
q
do
begin
S:=textmatr[i,key2[j]];
Text_1:=Text_1+S;
end
;
Writeln
(
'Закодированный текст: '
,text_1);
Text_2:=
''
;
For
j:=
1
to
k
do
SS[key2[j]]:=Copy(Text_1,(j-
1
)*q+
1
,q);
For
j:=
1
to
4
do
Text_2:=Text_2+SS[j];
Text_3:=
''
;
For
i:=
1
to
q
do
For
j:=
1
to
k
do
begin
S:=Copy(Text_2,(j-
1
)*q+key1[i],
1
);
Text_3:=Text_3+S;
end
;
Writeln
(
'Раскодированный текст: '
,Text_3);
writeln
(
'Нажмите "Enter" для завершения.'
);
Readln
End
.