Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 23:31   #1
Agiza
 
Регистрация: 10.10.2010
Сообщений: 7
Печаль Delphi. Шифр Цезаря через ASCII

Написала программу, но она почему-то не пашет =( помогите пожалуйста
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  v:byte; e,d,c,s:string;  i,r:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

for i:=1 to length(s) do
 begin
  c:=Inttostr(Ord(S[I]));
  d:=c+inttostr(r);
  e:=chr(strtoint(d));
   edit2.Text:=e;
 end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:=s;
edit3.Text:=inttostr(r);
end;

end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 29.03.2011 в 10:40.
Agiza вне форума Ответить с цитированием
Старый 28.03.2011, 23:38   #2
Wild_klas
Форумчанин
 
Аватар для Wild_klas
 
Регистрация: 13.10.2010
Сообщений: 109
По умолчанию

А каково задание - то?
Учусь учиться.
Wild_klas вне форума Ответить с цитированием
Старый 28.03.2011, 23:40   #3
Agiza
 
Регистрация: 10.10.2010
Сообщений: 7
По умолчанию

Задание: зашифровать по методу Цезаря сообщение. прим: абвгд + ключ(допустим 3) => гдеёж
Agiza вне форума Ответить с цитированием
Старый 28.03.2011, 23:58   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

то что делается у вас.
c:=Inttostr(Ord(S[I])); превращаем символ 'a' в строку '31'
d:=c+inttostr(r); к строке '31' добавляем (дописываем) еще одну строку (пусть это будет '33'(полученное из символа 'c') в итоге вот такая строка '3133'

Сложение строк это не сложение чисел а склеивание
'31' + '2' = '312'


e:=chr(strtoint(d)); теперь для '3133' пытаемся найти символ
что очень затруднительно для ASCII.

В ТО время как НАДО было
превратить 'a' в число 1 'c' в 3
сложить эти числа 1 + 3
получить 4 и превратить в 'd'

'a'
ord('a')=31
ord('a') -30 =1
для 'c' аналогично 3
теперь 1 + 3 = 4
chr(4 +30 ) ='d'

т.е. у нас такая вот фрифметика
(31-30) + (33-30) + 30 = 34
но можно и чуть короче
(31) + (33- 30) = 34

Теперь о выводе результата.
edit2.Text:=e; каждый вновь "полученный " символ стирает все введенное до этого
в ответе надо накапливать символы.
edit1.Text:=edit1.Text +e;

P.S. А откуда возмуться значения для s и r если мы еще только создаем формую
procedure TForm1.FormCreate(Sender: TObject);
begin
edit1.Text:=s;
edit3.Text:=inttostr(r);
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.03.2011 в 00:06.
evg_m вне форума Ответить с цитированием
Старый 29.03.2011, 09:42   #5
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
т.е. у нас такая вот фрифметика
(31-30) + (33-30) + 30 = 34
но можно и чуть короче
(31) + (33- 30) = 34
Я недопонимаю зачем эти пляски с цифрой 30(подчеркну недопонимаю, может объясните), почему нельзя сделать просто
Код:
c:=ord(S[i]);
d:=c+r;  // у нас две переменные integer
e:=char(d);
Насколько я понял смещение r постоянное, оно просто выводится в edit
upd - ох, наврал про смещение, оно нигде не указывается. Ну тогда на тот же TForm1.Button1Click сначала прописать edit1.Text:=s; r:=StrToInt(r);
потому как читаться должно по нажатии кнопки а не по создании формы. О выводе результата поддерживаю

Последний раз редактировалось BoozZzilla; 29.03.2011 в 09:49.
BoozZzilla вне форума Ответить с цитированием
Старый 29.03.2011, 10:34   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Я недопонимаю зачем эти пляски с цифрой 30(подчеркну недопонимаю, может объясните),
если смещение задано числом то да пляски +-30 не нужны.
Мои объяснения и пляски для случая задания смещения буквой (у меня это была 'c' соответствующее смещению 3 ord('c') =33 =30 + 3).

(31) + (33- 30) = 34
(31) + 3 =34

А что собираетесь делать при шифрование последних букв алфавита(x y z)?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.03.2011 в 10:36.
evg_m вне форума Ответить с цитированием
Старый 29.03.2011, 10:49   #7
BoozZzilla
Форумчанин
 
Аватар для BoozZzilla
 
Регистрация: 26.01.2009
Сообщений: 125
По умолчанию

при смещении буквой задаём сначала r:=ord(S[0])-ord(edtit3.text[0]); (смещение первой буквы до буквы в edit) и дальше аналогично без этих лишних изысков
Насчёт последних букв надо спросить у автора насолько строг преподаватель. Возможно это спустится с рук, иначе я как начинающий сделал бы простым if xx>d>zz(не знаю я какой последний код у этих букв) then d:=d-26;
я также не вижу решения этой проблемы в вашем примере

Последний раз редактировалось BoozZzilla; 29.03.2011 в 10:57.
BoozZzilla вне форума Ответить с цитированием
Старый 29.03.2011, 11:43   #8
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

Извините, возможно не довъехал в необходимые конвертации символов в числа, но хочу уточнить, что смещение в 33 будет давать косяки, надо делать смещение 32, потому как в аски(и в анси) символ ё не лежит в остальном алфавите. Для аски ещё плох тот факт , что алфавит строчных букв разрывается, не по порядку идут номера (от $A0 до $AF идут а-п, и от $E0 до $EF идут р-я), заглавные буквы идут нормально
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шифр Цезаря Defa4ka Помощь студентам 5 23.10.2011 13:48
Шифр цезаря (не работает) Айдар Помощь студентам 3 21.06.2010 11:15
Шифр Цезаря Goracio Помощь студентам 1 19.04.2010 14:53
Шифр Цезаря Jasper92 Помощь студентам 3 02.12.2009 18:47