Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 27

Реализуйте кодирование и декодирование строки по правилу цезаревской подстановки

28.03.2015, 20:59. Показов 2952. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1. Реализуйте кодирование и декодирование строки по правилу цезаревской подстановки. С клавиатуры вводится строка, а программа кодирует ее согласно правилам цезаревской подстановки, и записывает результат во вторую строку. Затем в третью строку записывается результат декодирования второй строки. Кодированная и декодированная строки выводятся на экран. Обратите внимание, что символы, которые не являются латинскими строчными буквами, должны записываться в закодированную и декодированную строки без изменений.



БЕЗ byte и char!!!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2015, 20:59
Ответы с готовыми решениями:

Кодирование и декодирование строк по правилу цезаревской подстановки
Реализуйте кодирование и декодирование строк по правилу цезаревской подстановки. С клавиатуры вводится строка, которая должна состоять из...

Задача по теме:Кодирование и декодирование информации
Я в информатике ни бум-бум... а очень нужна программа, точнее две программы: 1) Программа, которая кодирует и декодирует буквы...

Кодирование/декодирование сообщения, используя аргументы командной строки
5 Написать программу, которая кодирует или декодирует сообщение, указывается в командной строке.( Аргументы командной строки)

6
Модератор
10440 / 5729 / 3405
Регистрация: 17.08.2012
Сообщений: 17,438
28.03.2015, 22:42
Вот, на скорую руку:
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
var s1, s2, s3: string;
    i, j: integer;
begin
  writeln('Enter string:');
  readln(s1);
  s2 := s1;
  for i := 1 to length(s2) do
    if s2[i] in ['a'..'z', 'A'..'Z']
      then
        for j := 1 to 3 do
          begin
            s2[i] := succ(s2[i]);
            if s2[i] = succ('z') then s2[i] := 'a';
            if s2[i] = succ('Z') then s2[i] := 'A'
          end;
  writeln('Caesar coded:');
  writeln(s2);
  s3 := s2;
  for i := 1 to length(s3) do
    if s3[i] in ['a'..'z', 'A'..'Z']
      then
        for j := 1 to 3 do
          begin
            s3[i] := pred(s3[i]);
            if s3[i] = pred('a') then s3[i] := 'z';
            if s3[i] = pred('A') then s3[i] := 'Z'
          end;
  writeln('Decoded:');
  writeln(s3);
  readln
end.
0
 Аватар для APALoff
1648 / 1077 / 1081
Регистрация: 03.07.2013
Сообщений: 4,507
28.03.2015, 22:48
Шифрование
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 27
31.03.2015, 12:29  [ТС]
Этого мы не проходили:
Pascal
1
2
3
4
5
6
7
 s2[i] := succ(s2[i]);
            if s2[i] = succ('z') then s2[i] := 'a';
            if s2[i] = succ('Z') then s2[i] := 'A'
if s3[i] in ['a'..'z', 'A'..'Z']
  s3[i] := pred(s3[i]);
            if s3[i] = pred('a') then s3[i] := 'z';
            if s3[i] = pred('A') then s3[i] := 'Z'
0
Модератор
10440 / 5729 / 3405
Регистрация: 17.08.2012
Сообщений: 17,438
31.03.2015, 13:44
succ - следующий элемент перечисляемого типа. succ('B') = 'C', succ(11) = 12. pred - аналогично, предыдущий элемент. Странно, что Вы их, возможно, не знаете, эти две команды даются при изучении перечисляемых типов. Или Вам множества ещё не давали? Это ['a'..'z', 'A'..'Z'], что ли, не проходили? Ну, можно заменить на
Pascal
20
    if (s3[i] >= 'a') and (s3[i] <= 'z') or (s3[i] >= 'A') and (s3[i] <= 'Z')
Напишите здесь, черезо что конкретно нужно решить задачу, и какой именно вариант шифра Цезаря Вам требуется. Например, нужно, чтобы 'a' -> 'd', или, допустим, 'a' -> 'c', для какого именно алфавита или алфавитов требуется написать программу, ну, не знаю, может быть, преобразование сделать не вычислением, а табличное?
0
0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 27
04.04.2015, 07:39  [ТС]
Вы можете создать заново программу?Без succ,byte,pred и char?!
0
Модератор
10440 / 5729 / 3405
Регистрация: 17.08.2012
Сообщений: 17,438
06.04.2015, 00:12
Да, сегодня днём сделаю.

Добавлено через 19 часов 18 минут
Для букв английского алфавита.
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
const d = 3; {сдвиг}
      m = 'abcdefghijklmnopqrstuvwxyz'; {массивы для перекодировки}
      b = 'ABCDEFGHIJRLMNOPQRSTUVWXYZ';
var s1, s2, s3: string; {строки}
    i: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    if pos(s1[i], m) > 0
      then s2 := s2 + m[(pos(s1[i], m) + d - 1) mod length(m) + 1]
      else if pos(s1[i], b) > 0
        then s2 := s2 + b[(pos(s1[i], b) + d - 1) mod length(b) + 1]
        else s2 := s2 + s1[i];
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    if pos(s2[i], m) > 0
      then s3 := s3 + m[(pos(s2[i], m) - d - 1 + length(m)) mod length(m) + 1]
      else if pos(s2[i], b) > 0
        then s3 := s3 + b[(pos(s2[i], b) + d - 1 + length(b)) mod length(b) + 1]
        else s3 := s3 + s2[i];
  writeln('Decoded:');
  writeln(s3);
  readln
end.
Добавлено через 30 минут
Ну и, на всякий случай, если Вам вдруг pos и mod применять нельзя:
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
const d = 3; {сдвиг}
      m = 'abcdefghijklmnopqrstuvwxyz'; {массивы для перекодировки}
      b = 'ABCDEFGHIJRLMNOPQRSTUVWXYZ';
var s1, s2, s3: string; {строки}
    i, j, k: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    begin
      for j := 1 to 26 do
        if s1[i] = m[j]
          then begin
            k := j + d;
            if k > 26 then k := k - 26;
            s2 := s2 + m[k];
            break
          end
          else if s1[i] = b[j]
            then begin
              k := j + d;
              if k > 26 then k := k - 26;
              s2 := s2 + b[k];
              break
            end;
      if length(s2) < i then s2 := s2 + s1[i]
    end;
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    begin
      for j := 1 to 26 do
        if s2[i] = m[j]
          then begin
            k := j - d;
            if k < 1 then k := k + 26;
            s3 := s3 + m[k];
            break
          end
          else if s2[i] = b[j]
            then begin
              k := j - d;
              if k < 1 then k := k + 26;
              s3 := s3 + b[k];
              break
            end;
      if length(s3) < i then s3 := s3 + s1[i]
    end;
  writeln('Decoded:');
  writeln(s3);
  readln
end.
Добавлено через 3 минуты
Да, если и break нельзя, просто удалите эти строки.

Не по теме:

Да что ж у Вас за учебное заведение такое весёлое: что ни возьми, ничего нельзя... С урока-то хоть выйти пописать можно?



Добавлено через 36 минут
Ах, да, забыл ещё бестолковое решение через два массива. Сдвиг равен 3. Нужен другой сдвиг (не как у Цезаря), исправьте массивы m2 и b2.
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
const m1 = 'abcdefghijklmnopqrstuvwxyz'; {массивы для перекодировки}
      m2 = 'defghijklmnopqrstuvwxyzabc';
      b1 = 'ABCDEFGHIJRLMNOPQRSTUVWXYZ';
      b2 = 'DEFGHIJRLMNOPQRSTUVWXYZABC';
var s1, s2, s3: string; {строки}
    i, j, k: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    begin
      for j := 1 to 26 do
        if s1[i] = m1[j]
          then begin
            s2 := s2 + m2[j];
            break
          end
          else if s1[i] = b1[j]
            then begin
              s2 := s2 + b2[j];
              break
            end;
      if length(s2) < i then s2 := s2 + s1[i]
    end;
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    begin
      for j := 1 to 26 do
        if s2[i] = m2[j]
          then begin
            s3 := s3 + m1[j];
            break
          end
          else if s2[i] = b2[j]
            then begin
              s3 := s3 + b1[j];
              break
            end;
      if length(s3) < i then s3 := s3 + s1[i]
    end;
  writeln('Decoded:');
  writeln(s3);
  readln
end.
Добавлено через 3 часа 26 минут
 Комментарий модератора 
VLlad2005, прекращайте плодить дублей.
Если нужно шифрование с другим сдвигом, я же написал, что делать.

В частности, для того, чтобы было computer -> eqorwvgt (то есть, сдвиг = 2), для первых двух программ заменить:
Pascal
1
const d = 2;
для последней программы заменить
Pascal
1
2
3
4
const m1 = 'abcdefghijklmnopqrstuvwxyz'; {массивы для перекодировки}
      m2 = 'cdefghijklmnopqrstuvwxyzab';
      b1 = 'ABCDEFGHIJRLMNOPQRSTUVWXYZ';
      b2 = 'CDEFGHIJRLMNOPQRSTUVWXYZAB';
Что именно Вам непонятно в написанных мною кодах? На всякий случай, вот упрощённые варианты последних программ, кодируются только строчные буквы английского алфавита, сдвиг равен 2, как Вам и нужно, а не 3, как было у Цезаря.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const d = 2; {сдвиг}
      m = 'abcdefghijklmnopqrstuvwxyz'; {массив для перекодировки}
var s1, s2, s3: string; {строки}
    i: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    if pos(s1[i], m) > 0
      then s2 := s2 + m[(pos(s1[i], m) + d - 1) mod length(m) + 1]
      else s2 := s2 + s1[i];
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    if pos(s2[i], m) > 0
      then s3 := s3 + m[(pos(s2[i], m) - d - 1 + length(m)) mod length(m) + 1]
      else s3 := s3 + s2[i];
  writeln('Decoded:');
  writeln(s3);
  readln
end.
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
const d = 2; {сдвиг}
      m = 'abcdefghijklmnopqrstuvwxyz'; {массив для перекодировки}
var s1, s2, s3: string; {строки}
    i, j, k: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    begin
      for j := 1 to length(m) do
        if s1[i] = m[j]
          then begin
            k := j + d;
            if k > 26 then k := k - length(m);
            s2 := s2 + m[k];
            break
          end;
      if length(s2) < i then s2 := s2 + s1[i]
    end;
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    begin
      for j := 1 to length(m) do
        if s2[i] = m[j]
          then begin
            k := j - d;
            if k < 1 then k := k + length(m);
            s3 := s3 + m[k];
            break
          end;
      if length(s3) < i then s3 := s3 + s1[i]
    end;
  writeln('Decoded:');
  writeln(s3);
  readln
end.
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
const m1 = 'abcdefghijklmnopqrstuvwxyz'; {массивы для перекодировки}
      m2 = 'cdefghijklmnopqrstuvwxyzab';
var s1, s2, s3: string; {строки}
    i, j, k: integer; {счётчик}
begin
  writeln('Enter string:');
  readln(s1);
  s2 := '';
  for i := 1 to length(s1) do
    begin
      for j := 1 to length(m1) do
        if s1[i] = m1[j]
          then begin
            s2 := s2 + m2[j];
            break
          end;
      if length(s2) < i then s2 := s2 + s1[i]
    end;
  writeln('Caesar coded:');
  writeln(s2);
  s3 := '';
  for i := 1 to length(s2) do
    begin
      for j := 1 to length(m2) do
        if s2[i] = m2[j]
          then begin
            s3 := s3 + m1[j];
            break
          end;
      if length(s3) < i then s3 := s3 + s1[i]
    end;
  writeln('Decoded:');
  writeln(s3);
  readln
end.
Если есть какие-то вопросы по коду, пожелания по изменению кода - пишите, отвечу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2015, 00:12
Помогаю со студенческими работами здесь

Кодирование введённой пользователем строки по опрделённому правилу
В общем вот задание: Ввести с клавиатуры символьную строку длиной не более 80 символов. Строка должна быть введена посимвольно с...

Кодирование и декодирование
как перевести в нормальный вид к примеру такую запись %25d0%259c%25d0%25b0%25d1%2588%25d0%25b8%25d0%25bd%25d0%25b0 пробовал...

Кодирование/Декодирование
Добрый вечер! Народ выручайте))) Имеется функция, которая как кодирует так и декодирует текст: AnsiString XOR_Crypt(AnsiString in,...

Кодирование и декодирование
Всем привет. Народ,у меня такая проблема, есть код который кодирует и декодирует текст. Но вот проблемка, если закомментировать все функции...

кодирование/декодирование
надо написать программу в Делфи.... вот работа программы.... Ввод текста(последовательность символов). программа определяет...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru