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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2013, 20:17   #1
Маруська27
 
Регистрация: 08.05.2013
Сообщений: 5
По умолчанию шифровка строк через циклический шифратор(PaskalABC)

На вход программе подается строка (длиной не более 200 символов), в которой нужно
зашифровать все английские слова (словом называется непрерывная последовательность
английских букв, слова друга от друга отделяются любыми другими символами, длина слова не
превышает 20 символов). Строка заканчивается символом #, других символов # в строке нет.
Каждое слово зашифровано с помощью циклического сдвига на длину этого слова. Например,
если длина слова равна K, каждая буква в слове заменяется на букву, стоящую в английском
алфавите на K букв дальше (алфавит считается циклическим, то есть, за буквой Z стоит буква A).
Строчные буквы при этом остаются строчными, а прописные –прописными. Символы, не
являющиеся английскими буквами, не изменяются.
Требуется написать программу, которая будет выводить на экран текст зашифрованного
сообщения. Например, если исходный текст был таким:
Day, mice. "Year" is a mistake#
то результат шифровки должен быть следующий:
Gdb, qmgi. "Ciev" ku b tpzahrl#
Маруська27 вне форума Ответить с цитированием
Старый 08.05.2013, 21:42   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

И что требуется?
Определить криптостойкость шифра?
Скажу сразу - она не выдерживает критики.
s-andriano вне форума Ответить с цитированием
Старый 12.05.2013, 17:10   #3
Маруська27
 
Регистрация: 08.05.2013
Сообщений: 5
По умолчанию

нет надо написать программу шифрования
Маруська27 вне форума Ответить с цитированием
Старый 12.05.2013, 17:40   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Код:
var
  s: string;
  i, p, j, k: integer;
  w: boolean;

procedure crypt(var c: char; l: integer);
var
  sh: integer;
begin
  if c in ['a' .. 'z'] then
    sh := ord('a')
  else
    sh := ord('A');
  c := chr((ord(c) - sh + l) mod 26 + sh);
end;

begin
  readln(s);
  w := false;
  p := 0;
  k := pos('#', s) - 1;
  for i := 1 to k do
    if s[i] in ['a' .. 'z', 'A' .. 'Z'] then
    begin
      if not w then
      begin
        p := i;
        w := true;
      end;
    end
    else if w then
    begin
      for j := p to i - 1 do
        crypt(s[j], i - p);
      w := false;
    end;
  if w then
    for j := p to k do
      crypt(s[j], k - p + 1);
  writeln(s);
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.05.2013, 07:54   #5
Маруська27
 
Регистрация: 08.05.2013
Сообщений: 5
По умолчанию

У меня эта программа выдает туже самую строчку когда надо зашифрованную, и надо с файлами. что вводится строка на английском, и выдает зашифрованную. (PaskalABC)
Маруська27 вне форума Ответить с цитированием
Старый 13.05.2013, 13:29   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Маруська, попробуйте ещё раз внятно сформулировать, что Вас не устраивает в предложенном BDA варианте шифрования строки.


а ещё не увидел, где Вы спасибо говорите?..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.05.2013, 16:08   #7
Маруська27
 
Регистрация: 08.05.2013
Сообщений: 5
По умолчанию

спасибо большое, но мне надо было вот такую программу, только ее осталось переделать под файлы

Код:
function shift(x:char; sdvig:Integer):char;
var
k:Integer;
begin
if (x >= 'a') and (x <= 'z') then
begin
k := Ord(x) - Ord('a') + sdvig;
if k >= 26 then k:= k-26;
k := Ord('a') + k;
end;
else if (x >= 'A') and (x <= 'Z') then
begin
k := Ord(x) - Ord('A') + sdvig;
if k > 22 then k:= k-22;
k := Ord('A') + k;
end;
Result := Chr(k);
end;
var
S: string;
WordFound :boolean;
WordLength :Integer;
i,k: Integer;
begin
Readln(S);
WordFound := false;
for i:= 1 to Length(s) do
begin
if (not WordFound)
and ((S[i] >= 'a') and (S[i] <= 'z') or (S[i] >= 'A') and (S[i] <= 'Z')) then
begin
WordFound := true;
WordLength := 1;
end;
else if ((S[i] >= 'a') and (S[i] <= 'z') or (S[i] >= 'A') and (S[i] <= 'Z'))
then {слово продолжается}
WordLength := WordLength + 1
else if WordFound then {слово кончилось}
begin
WordFound:= false;
for k := i-1 downto i - WordLength do
S[k] := shift(S[k], WordLength);
end;
end;
Writeln(S);
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 13.05.2013 в 16:23.
Маруська27 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графики в PaskalABC Солнышконанебе Помощь студентам 2 10.04.2012 15:36
Обработка символьных строк.Шифровка перестановками.Паскаль. Lerika Lover Помощь студентам 0 28.12.2011 15:37
Циклический сдвиг строк в многомерном массиве. Corvette Общие вопросы C/C++ 12 29.08.2011 22:05
Шифровка и расшифровка через текстовые файлы в Паскале Novenkaja Помощь студентам 21 25.05.2011 08:32
Стрелка в PaskalABC. Falter Паскаль, Turbo Pascal, PascalABC.NET 0 08.01.2011 12:53