Помощь - Поиск - Пользователи - Календарь
Полная версия: Шифрование
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Pistoletka
Шифрование методом Виженера. Программа работает.
Program shifr; 
var
kl,sh:string;
th: array[1..255] of Char;
ch,dh,ah:array[1..255] of integer;
l,l2,i:integer;
begin
writeln('Input key:');
readln(kl);
writeln('Input word:');
readln(sh);
l:=Length(kl);
l2:=Length(sh);
while l<l2 do
begin
l:=Length(kl);
l2:=Length(sh);
kl:=kl+kl;
end;

for i:=1 to Length(kl) do
ch[i] := ord(kl[i]) - ord('a');
for i:=1 to Length(sh) do
dh[i]:=ord(sh[i]) - ord('a');
for i:=1 to Length(sh) do
ah[i] := (ch[i] + dh[i]) mod 26;
for i:=1 to Length(sh) do
th[i]:= chr (ah[i] + ord('a'));
writeln('shifr text: ');
writeln(th)
end.

Можете мне объяснить, почему зашифрованный текст выводится таким образом с [ и через запятые?
Input key:
sf
Input word:
or
shifr text:
[g,w,
Федосеев Павел
Попробуйте на листе бумаги выполнить шифрование. Тогда смысл каждого из циклов станет понятнее.
Pistoletka
Цитата(Федосеев Павел @ 18.10.2016 19:50) *

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

Пробовала, все равно не понимаю.
OCTAGRAM
Во-первых, в конце выводится th, который суть array[1 .. 255] of Char, и длина его номинально 255, а с учётом того, что нулевые байты для совместимости с C сигнализируют о конце строки, может и меньше, но это всё равно кислая схема. Надо либо через for выводить по символу, либо сделать th строкой и в последнем for дописывать символы конкатенацией th := th + Chr(…);. Других явных проблем не наблюдаю.

Добавлено через 3 мин.
И ещё в while l:=Length(kl); лучше делать после конкатенации, а не до.
Pistoletka
Цитата(OCTAGRAM @ 18.10.2016 22:47) *

Во-первых, в конце выводится th, который суть array[1 .. 255] of Char, и длина его номинально 255, а с учётом того, что нулевые байты для совместимости с C сигнализируют о конце строки, может и меньше, но это всё равно кислая схема. Надо либо через for выводить по символу, либо сделать th строкой и в последнем for дописывать символы конкатенацией th := th + Chr(…);. Других явных проблем не наблюдаю.

Добавлено через 3 мин.
И ещё в while l:=Length(kl); лучше делать после конкатенации, а не до.


Спасибо большое, помогли.
Федосеев Павел
Я, грешным делом, понял, что топикстартер приобрёл код и хочет его осознать, а не то, что вывод программы не равен эталонному или ожидаемому.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.