Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 20

Шифрование информации методом постолбцевой транспозиции

08.03.2016, 07:25. Показов 2102. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать программу на языке Pascal для шифровки информации методом постолбцевой транспозиции.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.03.2016, 07:25
Ответы с готовыми решениями:

Шифрование и дешифрование информации
Ребят, помогите плз срочно с задачами, буду очень благодарен... 1) Напишите программы шифрования и дешифрования текста циклическим...

Шифрование методом RSA
Есть такой вот алфавит: А -61 Б -62 В -63 Г -64 Д -65 Е -66 Є -67 Ж -68 З -69

Шифрование методом Вижинера
есть программа, шифрующая файл методом Виженера исходный файл: Пример example 12345 а при шифрование получается вот такой файл: ...

5
Модератор
10434 / 5721 / 3405
Регистрация: 17.08.2012
Сообщений: 17,407
09.03.2016, 01:15
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
const len = 10;
 
type TKey = record
              symb: char;
              num: integer
            end;
 
var s, p, q: string;
    key: array [1..len] of TKey;
    t: TKey;
    k, b, i, j: integer;
    c: char;
 
begin
  {ввод кодового слова}
  repeat
    write('Кодовое слово (2..', len, ' букв): ');
    readln(s)
  until length(s) in [2..len];
  {помещаем символы кодового слова и их номера в массив}
  k := length(s);
  for i := 1 to k do
    begin
      key[i].symb := s[i];
      key[i].num := i
    end;
  {сортируем символы кодового слова в лексикографическом порядке,}
  {заодно переставляем номера}
  for i := 0 to k - 1 do
    for j := i to k do
      if key[i].symb > key[j].symb
        then begin
          t := key[i];
          key[i] := key[j];
          key[j] := t
        end;
  {--- печать транспозиции, можно удалить}
  write('Транспозиция столбцов: ');
  for i := 1 to k  do write(key[i].num:3);
  writeln;
  {---}
  {вводим сообщение}
  writeln('Введите сообщение:');
  readln(s);
  {если длина сообщения не кратна длине ключа, удлиняем сообщение}
  c := 'a';
  while length(s) mod k > 0 do
    begin
      s := s + c;
      c := succ(c)
    end;
  {** кодирование **}
  {формируем строку, в которую будем размещать кодированное сообщение}
  p := s;
  {считаем, что сообщение записано посторочно в таблицу шириной в ключ,}
  {переписываем столбцы в строку в порядке транспозиции}
  for i := 1 to k do
    begin
      b := length(s) div k * (i - 1);
      for j := 1 to length(s) div k do  p[b + j] := s[(j - 1) * k + key[i].num]
    end;
  writeln('Кодированное сообщение:');
  writeln(p);
  {** декодирование **}
  {на самом деле, нужно опять ввести кодовое слово и сформировать транспозицию,}
  {но - программа одна, а это уже сделано}
  {}
  {формируем строку, в которую будем размещать декодированное сообщение}
  q := p;
  {переписываем всё обратно}
  for i := 1 to k do
    begin
      b := length(p) div k * (i - 1);
      for j := 1 to length(p) div k do  q[(j - 1) * k + key[i].num] := p[b + j]
    end;
  writeln('Декодированное сообщение:');
  writeln(q);
  readln
end.
2
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 20
09.03.2016, 05:23  [ТС]
Cyborg Drone, огромное вам спасибо за этот код. Скажите а вот можно как то разделить декодирование отдельно чтобы пользователь ввел свой пароль и текст а прога расшифровала и еще хочу узнать есть ли какая-нибудь возможность адаптировать код программы на формовое приложение.
0
Модератор
10434 / 5721 / 3405
Регистрация: 17.08.2012
Сообщений: 17,407
09.03.2016, 11:06
По первому вопросу. Вы и в самом деле не можете разделить программу на две? То есть, в одну программу скопировать всё, кроме декодирования, а в другую программу - всё, кроме кодирования? И зачем Вам тогда эта программа? Для сдачи - не подойдёт, коль скоро Вы в ней не разобрались, для шифрования - тоже не пойдёт, поскольку данный метод шифрования не криптостойкий.

По второму вопросу. Такая возможность есть. Ввод-вывод перенаправить в элементы формы, отдельные части программы разместить в процедурах, назначенных на соответствующие события формы. Пока ничем не помогу, поскольку Вы не указали, для какого именно диалекта паскаля Вам требуется оконное приложение.
0
0 / 0 / 0
Регистрация: 08.03.2016
Сообщений: 20
09.03.2016, 12:30  [ТС]
Cyborg Drone, Ответ по первому вопросу. Да действительно вы правы возможно это мой косяк что я не могу разделить программу на 2 части так как еще до конца не разобрался как она работает. Да я студент и эта программа мне нужна для того завершить курс обучения но я очень слаб в программировании потому что изучал другой язык и мои способности к программированию в общем малы по сравнению со способностями к другим предметам поэтому я и обратился за помощью. Программу все же разделить очень хотелось бы а что касается адаптации ее на формы то это лишь для удобств чтобы не делать 2 разных приложения а сделать все на 1 форме на 2 разных кнопках.
0
Модератор
10434 / 5721 / 3405
Регистрация: 17.08.2012
Сообщений: 17,407
09.03.2016, 17:08
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Для первой программы выкиньте строки 64..77, для второй - 52..63. Даже не зная паскаля, нетрудно догадаться.

Оконное приложение писать вовсе необязательно. Можно сделать в программе меню.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
const len = 10;
 
type TKey = record
              symb: char;
              num: integer
            end;
 
var s, p, ch: string;
    key: array [1..len] of TKey;
    t: TKey;
    k, b, i, j: integer;
    c: char;
 
begin
  repeat {зацикливаем программу, выход из программы - по выбору}
    {меню, ввод действия}
    writeln('+--------------------------------------------+');
    writeln('| 1 - кодирование                            |');
    writeln('| 2 - декодирование                          |');
    writeln('| Любое другое значение - выход из программы |');
    writeln('+--------------------------------------------+');
    write('Ваш выбор? ');
    readln(ch);
    if (ch = '1') or (ch = '2')
      then begin
        {### общие действия для любого выбора ###}
        {ввод кодового слова}
        repeat
          write('Кодовое слово (2..', len, ' букв): ');
          readln(s)
        until length(s) in [2..len];
        {помещаем символы кодового слова и их номера в массив}
        k := length(s);
        for i := 1 to k do
          begin
            key[i].symb := s[i];
            key[i].num := i
          end;
        {сортируем символы кодового слова в лексикографическом порядке,}
        {заодно переставляем номера}
        for i := 0 to k - 1 do
          for j := i to k do
            if key[i].symb > key[j].symb
              then begin
                t := key[i];
                key[i] := key[j];
                key[j] := t
              end;
        {--- печать транспозиции, можно удалить}
        write('Транспозиция столбцов: ');
        for i := 1 to k  do write(key[i].num:3);
        writeln;
        {---}
        {вводим сообщение}
        writeln('Введите сообщение:');
        readln(s);
        {если длина сообщения не кратна длине ключа, удлиняем сообщение}
        c := 'a';
        while length(s) mod k > 0 do
          begin
            s := s + c;
            c := succ(c)
          end;
        {формируем строку, в которую будем размещать выходное сообщение}
        p := s;
        {###}
        {@@@ действия по выбору @@@}
        case ch[1] of
          '1':
            begin
              {** кодирование **}
              {считаем, что сообщение записано посторочно в таблицу шириной в ключ,}
              {переписываем столбцы в строку в порядке транспозиции}
              for i := 1 to k do
                begin
                  b := length(s) div k * (i - 1);
                  for j := 1 to length(s) div k do  p[b + j] := s[(j - 1) * k + key[i].num]
                end;
              writeln('Кодированное сообщение:');
              writeln(p)
            end;
          '2':
            begin
              {** декодирование **}
              {переписываем всё обратно}
              for i := 1 to k do
                begin
                  b := length(s) div k * (i - 1);
                  for j := 1 to length(s) div k do  p[(j - 1) * k + key[i].num] := s[b + j]
                end;
              writeln('Декодированное сообщение:');
              writeln(p)
            end
          end
        {@@@}
      end
  until not ((ch = '1') or (ch = '2'))
end.
Не самый оптимальный вариант меню, надо - подрихтуйте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2016, 17:08
Помогаю со студенческими работами здесь

Шифрование методом Виженера
Добрый день, у меня есть код шиврования методом Виженера, мне нужно дописать дешифрование, прошу пожалуйста помощи у вас форумчане, буду...

Шифрование методом перестановки
Осуществить кодирование методом перестановки русскоязычного текста, соблюдая при этом следующие правила: 1) в качестве блока использовать...

Шифрование методом гаммирования
Всем добрый вечер. Задали написать программу шифрования методом гаммирования(задание в прикрепленном файле). Никак не могу сделать. До...

Шифрование текстовой информации методом "Гронсфельд"
Доброго времени суток друзья!! Извиняюсь за нескромный вопрос, может возможно у кого нибудь завалялась программ шифрования текста методом...

Шифрование с помощью матрицы и вектора (шифрование методом аналитических преобразований)
Программисты Здравствуйте! Не могу сделать этот метод,не понимаю и все тут), хорошо бы если объясняли еще....(сам сайт готов, надо только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru