Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2021, 17:02   #1
Pavel143
Новичок
Джуниор
 
Регистрация: 20.11.2020
Сообщений: 3
По умолчанию Дешифратор

Помогите, пожалуйста, довести до дешифратора...
Код:
Program Encryption;

{$APPTYPE CONSOLE}

Type
  MyArrayType = array of array of Char;
  DirectionType = (dRight, dDown, dLeft, dUp);

Var
  Matrix: MyArrayType;
  LenMyS, I, J: Integer;
  MyString: String;
  SizeArray: Integer;
  InputText, OutputText: TextFile;

Procedure Spiral(var M: MyArrayType; SpirWrite: Boolean; var S: String);
Var
  CurStep, Step, PosX, PosY: Integer;
  Direction: DirectionType; //от 1 до 4 - 1 вправо, 2 вниз, 3 влево, 4 вверх
  I: integer;
Begin
  Randomize;
  I:=1;
  PosX:=round(SizeArray/2)+1;
  PosY:=round(SizeArray/2)+1;
  CurStep:=1;
  Step:=1; //через сколько шагов повернуть
  Direction:=dRight; //направление спирали на первом шаге
  if Not SpirWrite {значит чтение из массива} then S := '';
  while (PosX>0) and (PosX<=SizeArray) and (PosY>0) and (PosY<=SizeArray) do
  Begin
    if SpirWrite then
      M[PosX, PosY]:=S[I]
    else
      S:=S+M[PosX, PosY];
    //движение матрицы по спирали
    case Direction of
      dRight: Begin
                PosY:=PosY+1;
                if CurStep=Step then
                Begin
                  CurStep:=1;
                  Direction:=dDown
                End
                else
                  CurStep:=CurStep+1
              End;
       dDown: Begin
                PosX:=PosX+1;
                if CurStep=Step then
                Begin
                  CurStep:=1;
                  Direction:=dLeft;
                  Step:=Step+1
                End
                else
                  CurStep:=CurStep+1
              End;
       dLeft: Begin
                PosY:=PosY-1;
                if CurStep=Step then
                Begin
                  CurStep:=1;
                  Direction:=dUp
                End
                else
                  CurStep:=CurStep+1
              End;
         dUp: Begin
                PosX:=PosX-1;
                if CurStep=Step then
                Begin
                  CurStep:=1;
                  Direction:=dRight;
                  Step:=Step+1;
                End
                else
                  CurStep:=CurStep+1
              End
    End;
    Inc(I)
  End
End;

Procedure CheckAndFixString(var S: String; NeedLength: Integer);
Begin
  if (NeedLength>=1) or (NeedLength<=255) then
  Begin
    if Length(S)>NeedLength then
      S:=Copy(S,1,NeedLength)
    else
      while length(S)<NeedLength do
        S:=S + ' '
  End
End;

Begin
  AssignFile(InputText, 'D:\Работы по ОАиП\2 семестр\InputString.txt');
  Reset(InputText);
  Readln(InputText, MyString);
  LenMyS:=length(MyString);
  if Trunc(sqrt(LenMyS)) mod 2 = 0 then
    SizeArray:=Trunc(sqrt(LenMyS))+1
  else
    SizeArray:=Trunc(sqrt(LenMyS))+2;
  writeln('The required size of the matrix = ',SizeArray,'x',SizeArray);
  Setlength(Matrix, SizeArray+1, SizeArray+1);
  WriteLn('The length of the string = ',LenMyS);
  CheckAndFixString(MyString, sqr(SizeArray));
  LenMyS:=length(MyString);
  WriteLn('Required the length of the string = ',LenMyS);
  Spiral(Matrix, True, MyString);
  Assign(OutputText, 'D:\Работы по ОАиП\2 семестр\SpirOut.txt');
  Rewrite(OutputText);
  for I:=1 to SizeArray do
  Begin
    for J:=1 to SizeArray do
      Write(OutputText, Matrix[i,j]);
    WriteLn(OutputText)
  End;
  Close(OutputText);
  writeln('Press Enter to exit...');
  readln
End.
Pavel143 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифратор/Дешифратор Programmer-Analyst C# (си шарп) 2 08.03.2016 19:33
статья - ДЕШИФРАТОР Pblog Обсуждение статей 0 09.11.2015 04:00
Дешифратор tarakan1983 Общие вопросы Delphi 2 25.04.2015 23:47
Спроектировать дешифратор Landrian Фриланс 0 15.05.2014 15:52
Дешифратор BuTeK48 Помощь студентам 2 10.11.2011 11:00