28.03.2017, 22:32 [+3 UTC]
в нашей команде: 1 870 чел. | участники онлайн: 2 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
26.03.2017, 18:27

Последний вопрос:
28.03.2017, 21:32

Последний ответ:
28.03.2017, 18:23

Последняя рассылка:
28.03.2017, 17:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
05.09.2009, 12:43 »
floppyk
Большое спасибо за помощь!

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Модератор)]

Лучшие эксперты в этом разделе

Зенченко Константин Николаевич
Статус: Модератор
Рейтинг: 361
Асмик Гаряка
Статус: Советник
Рейтинг: 244
mklokov
Статус: 4-й класс
Рейтинг: 113

Перейти к консультации №:
 

Консультация онлайн # 190431
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: almazmr (Посетитель)
Отправлена: 15.01.2017, 18:43
Поступило ответов: 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.


Состояние: Консультация закрыта

Здравствуйте, almazmr!

По умолчанию АВС.net использует Unicode. Чтобы преобразовать символ в формат ANSI есть функции ChrAnsi и OrdAnsi.
для решения проблемы Вам достаточно один из циклов преобразовать к виду:

Код (Pascal) :: выделить код
 for i:=224 to 255 do{п - я}
    if pos(chrAnsi(i),password)=0 then password:=password+chrAnsi(i);

а второй убрать.
Удачи!


Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 20.01.2017, 16:54

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 190431
almazmr
Посетитель

ID: 400259

# 1

= общий = | 15.01.2017, 18:46 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

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

получаем:

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

вылетаем пятого
пекзъвзч шлъйсй

Зенченко Константин Николаевич
Модератор

ID: 31795

# 2

= общий = | 16.01.2017, 11:52 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
almazmr:

А в чем проблема, Shift + F9

almazmr
Посетитель

ID: 400259

# 3

= общий = | 16.01.2017, 15:05 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

© Цитата: Зенченко Константин Николаевич
А в чем проблема, Shift + F9


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

-----
 Прикрепленный файл (кликните по картинке для увеличения):

Зенченко Константин Николаевич
Модератор

ID: 31795

# 4

= общий = | 16.01.2017, 16:21 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
almazmr:

ABCNet нехочет принимать переменную i как глобальную, добавьте её в строку j:integer;.
Должно скомпилироватся, после этого Shift + F9 и будет Вам счастье.

• Отредактировал: Зенченко Константин Николаевич (Модератор)
• Дата редактирования: 16.01.2017, 16:23

almazmr
Посетитель

ID: 400259

# 5

= общий = | 16.01.2017, 16:57 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Программа запустилась, но как можно починить кодировку? (chr не преобразует в кириллицу)

-----
 Прикрепленный файл (кликните по картинке для увеличения):

Зенченко Константин Николаевич
Модератор

ID: 31795

# 6

= общий = | 16.01.2017, 18:26 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
almazmr:

Основной кодировкой ABCNet есть Unicode. для преобразования к кодировке Windows(ср1251), используйте ChrAnsi и OrdAnsi.
Проверьте этот код:

Код (Pascal) :: выделить код
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.

с chr и chrAnsi

• Отредактировал: Зенченко Константин Николаевич (Модератор)
• Дата редактирования: 16.01.2017, 18:32

Зенченко Константин Николаевич
Модератор

ID: 31795

# 7

= общий = | 19.01.2017, 18:56 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
almazmr:

У Вас что-то получилось?

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос | интересные статьи

Время генерирования страницы: 0.17550 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн