0 / 0 / 0
Регистрация: 22.02.2015
Сообщений: 27

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

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

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



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

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

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

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

6
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,483
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
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,483
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
Модератор
10451 / 5746 / 3409
Регистрация: 17.08.2012
Сообщений: 17,483
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru