Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 30.06.2016
Сообщений: 14
1

Расшифровать текст заклинания

02.09.2016, 14:30. Просмотров 2200. Ответов 3
Метки нет (Все метки)

На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано Гарри Поттером следующим образом. Сначала Гарри определил количество букв в самом коротком слове, обозначив полученное число К (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую английскую букву в заклинании на букву, стоящую в алфавите на K букв ранее (алфавит считается циклическим, то есть перед буквой A стоит буква Z), оставив другие символы неизменными. Строчные буквы при этом остались строчными, а прописные – прописными. Требуется написать программу на языке Паскаль или Бэйсик, которая будет выводить на экран текст расшифрованного заклинания. Например, если зашифрованный текст был таким:

Zb Ra Ca Dab Ra.

то результат расшифровки должен быть следующим:

Bl Tc Ec Fcd Tc.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2016, 14:30
Ответы с готовыми решениями:

Вывести на экран текст расшифрованного заклинания
помогите написать программу=(

Расшифровать текст.
Помогите расшифровать текст ...

Зашифровать и расшифровать заданный текст
Один из способов шифровки текста состоит в табличной замене каждого символа другим символом....

Шифрование перестановкой - расшифровать текст
program Project2; {$APPTYPE CONSOLE} Uses SysUtils,windows; Var n,kolsimvolov,i,j,akey :...

3
Эксперт Pascal/Delphi
2349 / 1270 / 1481
Регистрация: 29.08.2014
Сообщений: 4,586
02.09.2016, 19:00 2
Botan1q, Затем он заменил каждую английскую букву в заклинании на букву, стоящую в алфавите на K букв ранее
а почему тогда в примере
Zb Ra Ca Dab Ra -> Bl Tc Ec Fcd Tc
слово Zb переходит в Bl?
должно перейти в Bd!

поиском пользоваться вам было лень, с просторов интернета:
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
var
  f:boolean;
  i, k, max: integer;
  c,cnew:char;
  s:string;
begin
  s:='';
  max:=20; k:=0;
  f:=false;
  repeat
  read(c);
    s:=s+c;
    if f then
    if c in ['a'..'z','A'..'Z'] then k:=k+1
    else begin
      if k<max then max:=k;
      f:=false
    end
    else
     if c in ['a'..'z','A' ..'Z']
       then begin f:=true; k:=1 end
    until c='.';
    writeln(max);
for i:=1 to length(s) do
begin
  cnew:=chr(ord(s[i])+max);
  case s[i] of
   'a'..'z': if cnew>'z' then write (chr (ord (cnew)-26))
   else write(cnew);
   'A'..'Z': if cnew>'Z' then write (chr (ord (cnew)-26))
else write(cnew);
else write(s[i])
end;
end;
readln
end.
0
Модератор
61588 / 46111 / 31828
Регистрация: 18.05.2008
Сообщений: 111,153
02.09.2016, 19:37 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
24
25
const pr:string='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
      st:string='abcdefghijklmnopqrstuvwxyz';
var s1,s2,s:string;
    i,k,p:byte;
begin
s1:=pr+pr+pr;
s2:=st+st+st;
readln(s);//читаем стрку, данную по правилам
p:=255;
k:=0;
for i:=1 to length(s)-1 do
if s[i]<>' ' then k:=k+1
else if(s[i]=' ')or(i=length(s)-1) then
 begin
  if p<k then p:=k;
  k:=0;
 end;
writeln('k=',k);
for i:=1 to length(s) do
 begin
  if pos(s[i],pr)>0 then s[i]:=s1[pos(s[i],pr)+26+k];
  if pos(s[i],st)>0 then s[i]:=s2[pos(s[i],st)+26+k];
 end;
write(s)
end.
0
Модератор
7919 / 3973 / 2788
Регистрация: 17.08.2012
Сообщений: 12,676
02.09.2016, 19:41 4
Шифр Цезаря со сдвигом, равным длине наикратчайшего слова. Мой вариант программы, с человеческим интерфейсом. Ограничение на количество букв в слове не учитывается за ненадобностью. Все разделители между двумя соседними словами заменяются одним пробелом, для придания заклинанию общепринятого вида (обратите внимание, что соседние слова по условию разделяются "любыми другими символами", то есть, возможно, несколькими символами, а не "одним символом, не являющимся буквой английского алфавита"). Для сдачи роботу не подходит.
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
var s, d: string;
    i, k, p, t: byte;
begin
  writeln('Enter encrypted Harry Potter''s spell:');
  readln(s);
  p := pos('.', s);
  if p = 0
    then writeln('Character a point isn''t found, it not a spell of Harry Potter.')
    else begin
      delete(s, p + 1, length(s) - p);
      for i := 1 to p do if not (s[i] in ['A'..'Z', 'a'..'z']) then s[i] := ' ';
      while pos('  ', s) > 0 do delete(s, pos('  ', s), 1);
      if (s[1] = ' ') and (length(s) > 1) then delete(s, 1, 1);
      if length(s) = 1
        then writeln('No words found, this silence of Harry Potter.')
        else begin
          k := 1000;
          t := 0;
          for i := 1 to length(s) do
            if s[i] <> ' '
              then inc(t)
              else begin
                if k > t then k := t;
                t := 0
              end;
          k := k mod 26;
          for i := 1 to length(s) do
            if s[i] <> ' '
              then begin
                if s[i] in ['A'..'Z']
                  then t := byte('A')
                  else t := byte('a');
                s[i] := char((byte(s[i]) - t + k) mod 26 + t)
              end;
          s[length(s)] := '.';
          writeln('Decrypted Harry Potter''s spell:');
          writeln(s)
        end
      end;
  readln
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2016, 19:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Зашифровать и расшифровать заданный текст с помощью перестановки
Задается натуральное число k и перестановка чисел 1, ... , k с помощью последовательности...

Расшифровать текст после сжатия
Надо расшифровать(в смысле вернуть в исходное состояние) текст после сжатия,не догоняю как оформить...

Требуется расшифровать зашифрованый текст. Правило шифрования известно...
Требуется расшифровать зашифрованый текст содержащий 150 букв. Правило шифрования известно: вместо...

Дан зашифрованный текст и его расшифрованный первый символ. Определить кодовое смещение k и расшифровать текст
Дано зашифрованное предложение на русском языке (способ шифрования описан в задании String35) и его...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.