Консультация № 190431
15.01.2017, 18:43
0.00 руб.
0 8 1
Помогите преобразовать код под PascalABC.NET
Как я понял, на данный момент он заточен под Turbo Pascal
Суть программы - шифр Трисемуса

Код:
uses crt;
var
password,codeline,original:string;
i:integer;
c:char;
procedure CodeDecode(x:integer);
var
j:integer;
begin
codeline:='';
{выводим оригинальную строку}
writeln(original);
for i:=1 to length(original)do
begin
{считаем корректирующее число}
j:=8*((1-x + pos(original[i],password)div 8)and 3)
+ pos(original[i],password)mod 8;
if j=0 then j:=32;
{кодирование-декодирование}
if pos(original[i],password)>0
then codeline:=codeline+password[j]{если символ есть в таблице кодируем-декодируем}
else codeline:=codeline+original[i];{если символа нет в таблице копируем без изменения}
end;
original:=codeline;{запоминаем новую строку}
writeln(codeline);{выводим результат}
end;
begin
{задаем кодируемый текст}
original:='контрольное слово или фраза задания';
{вводим пароль}
write('Enter password:');
password:='';
repeat
c:=ReadKey;
write(c);
if (pos(c,password)=0)and(c<>chr(13)) then password:=password+c;
until c=chr(13);
writeln;
password:='пароль';{контрольный пароль}
{дополнение русскими буквами таблицы кодирования}
for i:=160 to 175 do{а - р}
if pos(chr(i),password)=0 then password:=password+chr(i);
for i:=224 to 239 do{п - я}
if pos(chr(i),password)=0 then password:=password+chr(i);
{организовываем меню}
repeat
{выводим таблицу кодирования}
for i:=1 to length(password)do
begin
write(password[i]);
if (i mod 8)=0 then writeln;
end;
{выводим меню}
writeln('c-code',chr(10),chr(13),'d-decode',chr(10),chr(13),'q-quit');
c:=ReadKey;
{кодируем - декодируем}
if(c='c')or(c='d')then CodeDecode(2*(ord(c)-ord('c')));
until c='q';
ReadKey;
end.


Обсуждение

давно
Посетитель
400259
21
15.01.2017, 18:46
общий
Пример реализации:
после задания ключевого слова (password) бандероль
и кодируемой фразы:
original:='вылетаем пятого';

получаем:

Код:
бандерол
ьвгжзийк
мпстуфхц
чшщъыэюя

вылетаем пятого
пекзъвзч шлъйсй
давно
Старший Модератор
31795
6196
16.01.2017, 11:52
общий
Адресаты:
А в чем проблема, Shift + F9
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400259
21
16.01.2017, 15:05
общий
Цитата: Зенченко Константин Николаевич
А в чем проблема, Shift + F9


Не компилируется

Прикрепленные файлы:
93421e58a950c5a1890a9ff2c1bbb920.png
давно
Старший Модератор
31795
6196
16.01.2017, 16:21
общий
16.01.2017, 16:23
Адресаты:
ABCNet нехочет принимать переменную i как глобальную, добавьте её в строку j:integer;.
Должно скомпилироватся, после этого Shift + F9 и будет Вам счастье.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
400259
21
16.01.2017, 16:57
общий
Программа запустилась, но как можно починить кодировку? (chr не преобразует в кириллицу)
Прикрепленные файлы:
e79303b28ad1477e14600a79bce89ddc.png
давно
Старший Модератор
31795
6196
16.01.2017, 18:26
общий
16.01.2017, 18:32
Адресаты:
Основной кодировкой ABCNet есть Unicode. для преобразования к кодировке Windows(ср1251), используйте ChrAnsi и OrdAnsi.
Проверьте этот код:
[code lang=pascal h=60]begin
for var i:=0 to 15 do
begin
for var j:=0 to 15 do
write((i*16+j):8,'=',chrAnsi(i*16+j));
end;
readln;
end.[/code]
с chr и chrAnsi
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
19.01.2017, 18:56
общий
Адресаты:
У Вас что-то получилось?
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
20.01.2017, 16:54
общий
это ответ
Здравствуйте, almazmr!

По умолчанию АВС.net использует Unicode. Чтобы преобразовать символ в формат ANSI есть функции ChrAnsi и OrdAnsi.
для решения проблемы Вам достаточно один из циклов преобразовать к виду:
[code lang=pascal h=50] for i:=224 to 255 do{п - я}
if pos(chrAnsi(i),password)=0 then password:=password+chrAnsi(i);[/code]
а второй убрать.
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа