Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 08.09.2012, 19:59   #1 (permalink)
gabriela007
Member
 
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Создать программу шифровки-дешифровки

Код:
program Project2;
{$APPTYPE CONSOLE}
Uses
SysUtils,windows;
Var
      n,kolsimvolov,i,j,akey : Integer;
      text,textkey,key : String;

Begin
  SetConsoleOutputCP(1251);
  Writeln ('введите количество символов в блоке');
  Readln(n);
  Writeln ('Введите ключ');
  Readln(key);
  Writeln ('Введите текст');
  Readln (text);
  kolsimvolov:=Length(text);
  i:=0;
  textkey:='';
  Repeat
    For j:=1 to n do
      begin
        akey:=Byte(key[j]);
        If akey = 0 then Break;
        If i + akey <= kolsimvolov then
          textkey:=textkey + text[i + akey];
      end;
    i:=i + n;  
  Until (i>=kolsimvolov);
  Writeln ('Зашифрованный текст: ');
  Writeln (textkey);
  Readln;
End.
помогите найти ошибку.не выводит зашифрованный текст
gabriela007 вне форума   Ответить с цитированием

Старый 08.09.2012, 19:59
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот обсуждения, которые имеют общее с вашей темой

Создать БП
Как создать админ?
Помогите создать программу на турбо Паскале
Создать вирус
Как создать ICQ-чат?
Как создать свой FTP?

Старый 08.09.2012, 20:54   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Несколько вопросов и уточнений:
1. Что понимается под "количеством символов в блоке"? Что такое вообще "блок"?
2. Приведите пример используемого ключа.
3. Приведите пример используемого текста.
И вообще - напишите-ка словами, и поподробнее, как Вы понимаете алгоритм шифрования.
Vladimir_S вне форума   Ответить с цитированием
Старый 08.09.2012, 21:15   #3 (permalink)
gabriela007
Member
 
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

открытый текст "шифрование_перестановкой".ключ правило перестановки: группы из 8 букв с порядковыми номерами 1.2...8 переставить порядок 3-8-1-5-2-7-6-4
шифртекст "фншоиавр_сиееерпннтваоко"
gabriela007 вне форума   Ответить с цитированием
Старый 08.09.2012, 21:18   #4 (permalink)
Gruvi
VIP user
 
Аватар для Gruvi
 
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
По умолчанию

хмм могу предположить что ключ неправильно задается, программно правильно, но логически нет.
и еще кажется что в
Цитата:
For j:=1 to n do
begin
akey:=Byte(key[j]);
If akey = 0 then Break;
If i + akey <= kolsimvolov then
textkey:=textkey + text[i + akey];
end;
i:=i + n;
где-то тут ошибка, времени разбираться нету ,взглянул чисто символически.
Gruvi вне форума   Ответить с цитированием
Старый 08.09.2012, 21:27   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela007 Посмотреть сообщение
открытый текст "шифрование_перестановкой".ключ правило перестановки: группы из 8 букв с порядковыми номерами 1.2...8 переставить порядок 3-8-1-5-2-7-6-4
шифртекст "фншоиавр_сиееерпннтваоко"
Извините, но из этой пулеметной очереди ничего не понял. Рад бы помочь, но если для Вас столь затруднительно написать топик типа
Исходный текст: ........
Вводимый ключ: ........
Далее каждую букву текста мы ......... (здесь максимально подробно).
Ожидаемый результат: ...........
то, боюсь, помочь Вам не смогу.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 08.09.2012, 22:23   #6 (permalink)
gabriela007
Member
 
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

исходный текст apple
вводимый ключ 53214
далее мы на первое место ставим 5 букву исходного слова,на второе место третью букву и т.д.......
ожидаемый результат eppal
gabriela007 вне форума   Ответить с цитированием
Старый 09.09.2012, 12:30   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela007 Посмотреть сообщение
исходный текст apple
вводимый ключ 53214
далее мы на первое место ставим 5 букву исходного слова,на второе место третью букву и т.д.......
ожидаемый результат eppal
Так, ну это уже что-то. Начинает проясняться. Уже установлено, что ключ - это последовательность цифр. Теперь дело за малым - приковать Вас наручниками к батарее и, используя ВСЕ средства, под пыткой вырвать информацию о блоках.
Ладно, допустим так. Текст разбивается на блоки с количеством символов, равным длине ключа, и поблочно кодируется. Прекрасно! Но возникает вопрос: а что делать с остатком текста? Ведь полное количество символов текста вовсе не обязано быть кратным длине ключа! И что? Забегая вперед, скажу, что в моем варианте это решается так:
1. Если абсолютный номер обрабатываемого символа превышает kolsimvolov, то обработка не делается.
2. Если текущее значение i плюс кодовый сдвиг символа превышает kolsimvolov, то символ не кодируется и оставляется исходным.
Кроме того, при вводе ключа необходимо проверять истинность двух утверждений:
1. Количество символов ключа равно длине блока.
2. Ключ не содержит повторяющихся символов.
Обе проверки вставлены.
Теперь об ошибках.
Главная из них - абсолютно неправильное использование оператора BYTE, он же ORD. Этот оператор возвращает вовсе не числовое значение символа-цифры, а его код. Например, последовательно применение его к символам строки
53214
вернет
53 51 50 49 52
Вот так. А нужную Вам задачу решает процедура VAL.
Ниже приведен вариант кода. Экранные сообщения там на английском, потому что мне с кириллицей заморачиваться всегда напряжно. Вернете, если надо.
Код:
Uses
SysUtils,windows;   
Var
      n,kolsimvolov,i,j,akey,Code : Integer;
      text,textkey,key,S : String;
      p:boolean;

Begin
  SetConsoleOutputCP(1251); 
  Write('Enter the number of symbols per block: ');
  Readln(n);
  Repeat
   Write('Enter the key: ');
   Readln(key);
   If Length(key)<>n then writeln('Key must contain ',n,' symbols!');
   p:=true;
   i:=0;
   repeat
    inc(i);
    j:=i;
    repeat
     inc(j);
     if j<=Length(key) then
      if (key[i]=key[j]) then p:=false;
    until Not(p) or (j=Length(key));
   until i=Length(key)-1;
   If Not(p) then writeln('All key symbols must be different!');
  Until (Length(key)=n) and p;
  Write('Enter the text: ');
  Readln(text);
  kolsimvolov:=Length(text);
  i:=0;
  textkey:='';
  Repeat
    For j:=1 to n do
      begin
        S:=key[j];
        VAL(S,akey,Code);
        If (i+j)<=kolsimvolov then
         begin
          If i+akey <= kolsimvolov then
            textkey:=textkey + text[i+akey]
          else textkey:=textkey+text[i+j];
         end;
      end;
    i:=i + n;
  Until (i>=kolsimvolov);
  Writeln('Encoded text:   '+textkey);
  Readln;  
End.
Миниатюры
fp02c.jpg  
Vladimir_S вне форума   Ответить с цитированием
Старый 24.09.2012, 19:34   #8 (permalink)
gabriela007
Member
 
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

в этой же задачи нужно выполнить расшифровку данного слова.подкиньте хотя бы идею
gabriela007 вне форума   Ответить с цитированием
Старый 24.09.2012, 20:11   #9 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от gabriela007 Посмотреть сообщение
в этой же задачи нужно выполнить расшифровку данного слова.подкиньте хотя бы идею
Ох, Gabriela, даже и не знаю - опять во всё это влезать, вспоминать. Что ж Вы сразу-то? А теперь я из отпуска на работу вышел, времени мало, попробую, конечно, но вот когда - не ведаю.
Vladimir_S вне форума   Ответить с цитированием
Старый 24.09.2012, 21:30   #10 (permalink)
gabriela007
Member
 
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

сказали сегодня что еще и раскодировка нужна((((в задание только кодировка была....вот насчет второго даже идей нет(((
gabriela007 вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 01:33.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.