|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
08.09.2012, 19:59 | #1 (permalink) |
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. |
08.09.2012, 19:59 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вот обсуждения, которые имеют общее с вашей темой Создать БП Как создать админ? Помогите создать программу на турбо Паскале Создать вирус Как создать ICQ-чат? Как создать свой FTP? |
08.09.2012, 20:54 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Несколько вопросов и уточнений:
1. Что понимается под "количеством символов в блоке"? Что такое вообще "блок"? 2. Приведите пример используемого ключа. 3. Приведите пример используемого текста. И вообще - напишите-ка словами, и поподробнее, как Вы понимаете алгоритм шифрования. |
08.09.2012, 21:15 | #3 (permalink) |
Member
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
открытый текст "шифрование_перестановкой".ключ правило перестановки: группы из 8 букв с порядковыми номерами 1.2...8 переставить порядок 3-8-1-5-2-7-6-4
шифртекст "фншоиавр_сиееерпннтваоко" |
08.09.2012, 21:18 | #4 (permalink) | |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
хмм могу предположить что ключ неправильно задается, программно правильно, но логически нет.
и еще кажется что в Цитата:
|
|
08.09.2012, 21:27 | #5 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Исходный текст: ........ Вводимый ключ: ........ Далее каждую букву текста мы ......... (здесь максимально подробно). Ожидаемый результат: ........... то, боюсь, помочь Вам не смогу. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.09.2012, 22:23 | #6 (permalink) |
Member
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
исходный текст apple
вводимый ключ 53214 далее мы на первое место ставим 5 букву исходного слова,на второе место третью букву и т.д....... ожидаемый результат eppal |
09.09.2012, 12:30 | #7 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Ладно, допустим так. Текст разбивается на блоки с количеством символов, равным длине ключа, и поблочно кодируется. Прекрасно! Но возникает вопрос: а что делать с остатком текста? Ведь полное количество символов текста вовсе не обязано быть кратным длине ключа! И что? Забегая вперед, скажу, что в моем варианте это решается так: 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. |
|
24.09.2012, 21:30 | #10 (permalink) |
Member
Регистрация: 03.09.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
сказали сегодня что еще и раскодировка нужна((((в задание только кодировка была....вот насчет второго даже идей нет(((
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|