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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2019, 12:01   #1
__ka
 
Регистрация: 07.11.2019
Сообщений: 4
По умолчанию Прокомментировать программу

Пытаюсь разобраться в программе, не очень понимаю, что она делает (именно пошагово), и можно ли её переделать на русский алфавит?

Код:
begin
  var a := Range(10, 99).ToArray.Shuffle;
  var Encrypt := new Dictionary<string, Queue<integer>>;
  var Decrypt := new Dictionary<integer, string>;
  for var i := 0 to 25 do
  begin
    var ch := Chr(i + 97);
    var q := new Queue<integer>;
    q.Enqueue(a[3 * i]);
    q.Enqueue(a[3 * i + 1]);
    q.Enqueue(a[3 * i + 2]);
    Encrypt.Add(ch, q);
    Decrypt.Add(a[3 * i], ch);
    Decrypt.Add(a[3 * i + 1], ch);
    Decrypt.Add(a[3 * i + 2], ch);
  end;
  
  Encrypt.Println;
  Println;
  Decrypt.Println;
  Println;
  
  var s := ReadString('Enter the string:');
  var Res := '';
  
  foreach var ch in s do
  begin
    var p := Encrypt[ch].Peek;
    Res += p;
    Encrypt[ch].Dequeue;
    Encrypt[ch].Enqueue(p);
  end;
  Print('Encrypted:');
  Res.Println;
  
  Print('Decrypted:');
  for var i := 0 to Res.Length div 2 - 1 do
    Decrypt[res.Substring(2 * i, 2).ToInteger].Print('')
end.

Последний раз редактировалось BDA; 11.11.2019 в 15:52.
__ka вне форума Ответить с цитированием
Старый 10.11.2019, 12:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от __ka Посмотреть сообщение
что она делает (именно пошагово)
Ну так закиньте в переводчик, если простый англю слова вызывают проблемы.

Цитата:
Сообщение от __ka Посмотреть сообщение
и можно ли её переделать на русский алфавит?
Переделывайте. На англ. тут мало что завязано.
p51x вне форума Ответить с цитированием
Старый 11.11.2019, 14:41   #3
__ka
 
Регистрация: 07.11.2019
Сообщений: 4
По умолчанию

Доделал программу, но выдаёт ошибки при русском алфавите. Помогите исправить, пожалуйста

Код:
begin
  var language: integer;
  writeln ('Выберите язык: 1-русский, 2-английский');
  readln(language);
  if language=1 then  
                begin
                var a := Range(10, 99).ToArray.Shuffle;
                var Encrypt := new Dictionary<string, Queue<integer>>;
                var Decrypt := new Dictionary<integer, string>; //автоопределение типа в случае обобщенных типов
                for var i := 0 to 33 do
                     begin
                     var ch := ChrAnsi(i + 224);
                     var q := new Queue<integer>;
                     q.Enqueue(a[3*i]);
                     q.Enqueue(a[3*i + 1]);
                     q.Enqueue(a[3*i + 2]);
                     Encrypt.Add(ch, q);
                     Decrypt.Add(a[3*i], ch);
                     Decrypt.Add(a[3*i + 1], ch);
                     Decrypt.Add(a[3*i + 2], ch);
                     end;
  
              Encrypt.Println;
              Println;
              Decrypt.Println;
              Println;
  
              var s := ReadString('Введите текст:');
              var Res := '';
  
               foreach var ch in s do
                      begin
                      var p := Encrypt[ch].Peek;
                      Res += p;
                      Encrypt[ch].Dequeue;
                      Encrypt[ch].Enqueue(p);
                      end;
             Print('Зашифрованный текст:');
             Res.Println;
  
             Print('Дешифрованный текст:');
             for var i := 0 to Res.Length div 2 - 1 do
             Decrypt[res.Substring(2 * i, 2).ToInteger].Print('');
             end
else
  begin
  var a := Range(10, 99).ToArray.Shuffle;
  var Encrypt := new Dictionary<string, Queue<integer>>;
  var Decrypt := new Dictionary<integer, string>; //автоопределение типа в случае обобщенных типов
  for var i := 0 to 25 do
  begin
    var ch := ChrAnsi(i + 97);
    var q := new Queue<integer>;
    q.Enqueue(a[3 * i]);
    q.Enqueue(a[3 * i + 1]);
    q.Enqueue(a[3 * i + 2]);
    Encrypt.Add(ch, q);
    Decrypt.Add(a[3 * i], ch);
    Decrypt.Add(a[3 * i + 1], ch);
    Decrypt.Add(a[3 * i + 2], ch);
  end;
  
  Encrypt.Println;
  Println;
  Decrypt.Println;
  Println;
  
  var s := ReadString('Введите текст:');
  var Res := '';
  
  foreach var ch in s do
  begin
    var p := Encrypt[ch].Peek;
    Res += p;
    Encrypt[ch].Dequeue;
    Encrypt[ch].Enqueue(p);
  end;
  Print('Зашифрованный текст:');
  Res.Println;
  
  Print('Дешифрованный текст:');
  for var i := 0 to Res.Length div 2 - 1 do
    Decrypt[res.Substring(2 * i, 2).ToInteger].Print('');
end; 
end.
__ka вне форума Ответить с цитированием
Старый 11.11.2019, 15:49   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

1) 90 чисел (от 10 до 99) не хватит по три числа на каждую букву русского алфавита.
2)
Код:
i := 0 to 33
Это 34 значения, а букв всего 33. При этом в кодировке Windows-1251 только 32 буквы идут подряд, начиная с кода 224, а "ё" лежит отдельно.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прокомментировать код в С++ Builder Катерина Битюкова C++ Builder 0 13.12.2015 20:28
C++Проверить код и прокомментировать Kseni564 Помощь студентам 0 11.05.2014 16:02
нужно прокомментировать код Господин Никто Помощь студентам 6 09.06.2013 14:08
Прокомментировать код программы lolbox C# (си шарп) 0 24.03.2013 10:11
Нужно прокомментировать небольшую программу trum Помощь студентам 0 07.06.2012 19:29