Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите исправить. Delphi (http://www.tehnari.ru/f41/t249389/)

Smile188 17.10.2016 19:24

Помогите исправить. Delphi
 
Помогите немножко исправить
Смысл таков, что нужно самим вводить кол-во столбцов и строк в матрице

Задача:
открытый текст записывается в матрицу по определенному ключу k1,
определяющему порядок записи открытого текста в строки матрицы при
шифровании. Шифртекст образуется при считывании из этой матрицы по
ключу k2, определяющему, в каком порядке записывается информация из
столбцов матрицы. Для реализации такого варианта перестановки можно не использовать непосредственно матрицу, а осуществлять перерасчет коэф- фициентов.

Код:

program Project2;

{$APPTYPE CONSOLE}

uses
Windows,
SysUtils;
    Const
    q=100;
    h=100;
var
Text,Text_1,Text_2,text_3,S:String;
Textmatr:Array[1..q,1..h] of Char;
i,j,k,kolsimvolov,code:integer;
key1:array[1..q] of Byte;
key2:array[1..h] of Byte;
p,t,m:Boolean;
  r,b:integer;
Begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

repeat

    write ('введите кол-во строк в матрице : ');
  readln (r);
  write ('введите кол-во столбцов в матрице : ');
  readln (b);

Write('Введи текст для кодировки: ');
Readln(Text);
kolsimvolov:=Length(text);
m:=True;
if kolsimvolov>r*b then
m:=False;
if not(m) then
writeln('количество символов не должно превышать ',r*b);
until m;
If (kolsimvolov div (r*b))<> 1 then //если кол-во символов текста не кратно кол-ву символов в блоке дополняем его пробелами
repeat
begin
text:=text+' ';
Inc(kolsimvolov);  end;
until kolsimvolov=r*b;

Repeat
 Write('Ведите ключ 1 ', q,' без пробелов): ');
  Readln(S);
    for i:=1 to q do
    Val(S[i],key1[i],Code);
    p:=true;


p:=true;
for i:=1 to q-1 do
    for j:=i+1 to q do
if (key1[i]=key1[i+1]) then
p:=false;
If Not(p) then
writeln('Все символы должны быть различными!');
Until p;
Repeat
Write('введите ключ 2 ', h, ' цифры без пробелов): ');
    Readln(S);
    for i:=1 to h do
Val(S[i],key2[i],Code);
    p:=true;
    for i:=1 to h-1 do
    for j:=i+1 to h do
      if (key2[i]=key2[j]) then t:=false;
    If Not(t) then writeln('Все цифры должны быть различными!');
  Until  t;
  Writeln;


//----------------------------------------------------—
  For i:=1 to q do
  For j:=1 to h do
  Textmatr[key1[i],j]:=Text[(i-1)*h+j];

Writeln(' k1\k2 ');
For i:=1 to q do
  begin
    Write('    ',i,'    ');
    For j:=1 to h 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 h do
begin
S:=Copy(Text_1,(key2[j]-1)*q+1,q);
Text_2:=Text_2+S;
end;
Text_3:='';
For i:=1 to q do
For j:=1 to h do
begin
S:=Copy(Text_2,(j-1)*q+key1[i],1);
Text_3:=Text_3+S;
end;
Writeln('Раскодированный текст:',' ',Text_3);
//-----------------------------------------------------—
Writeln;
Readln;
End.



Часовой пояс GMT +4, время: 00:18.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.