java73 писал(а):Вы правда вручную клали на форму сотню меток и сотню инпутов? Нет, у меня исключительно академический интерес. В первую очередь я советую вам привести код в порядок. Заменить дублирующиеся присваивания, которые при желании и небольшом размышлении можно преобразовать функцию из одной строки (замены символов у вас там например...), заменить рукотворные одинаковые элементы на форме динамическим их созданием в цикле (так будет проще и менять у них визибилити потом), и самое главнео - убрать ВСЕ глобальные переменные в модуле; разобрать их по структурам или классам. Уверен, что ваша проблема в том, что где-то используются одинаковые переменные, которые во втором случае инициализируются так, что первый алгоритм портится.
Можно сказать, что в ручную. Методом копирования и вставки. Я просто не так уж и много о языке знаю, только азы и несколько функций, по этому то и код в таком состоянии.
Что ж, благодарю за совет, попробую это сделать.
Добавлено спустя 2 минуты 35 секунд:Vadim писал(а):GrEFeRFeeD
У Вас шифр цезаря и сам по себе не работает.
И если хотите, чтобы Вам помогли - введите в свой код комментарии. Где этот самый шифр цезаря?
У Вас вся проблема в том, что, как верно заметил java73, Вы из своего кода сделали помойку. Приведите код в порядок и сами увидите, где у Вас ошибка.
Пока не залезть в генератор ключа и не попереключаться - работает.
Сам код:
- Код: Выделить всё
Memo2.Clear;
m:='';
k:=0;
s:='';
h:='';
n:=StrToInt(Edit1.Text);
if RadioGroup1.ItemIndex = 0 then
begin
For i:=1 to Memo1.Lines.Count do h:=h+Memo1.Lines[i-1];
For i:=1 to Length(h) do
begin
m:=copy(h,i,1);
For ii:=1 to 26 do
begin
if m=ensm[ii] then
begin
k:=ii+n;
if k>26 then
While k>26 do k:=k-26;
s:=s+ensm[k];
//d:=d+1;
Break;
end else
if m=encp[ii] then
begin
k:=ii+n;
if k>26 then
While k>26 do k:=k-26;
s:=s+encp[k];
//d:=d+1;
Break;
end;
end;
For ii:=1 to smbi do
begin
if m=smbl[ii] then
begin
k:=ii+n;
if k>smbi then
While k>smbi do k:=k-smbi;
s:=s+smbl[k];
//d:=d+1;
Break;
end;
end;
end;
Memo2.Lines.Add(s);
end
// расшифровка
else if RadioGroup1.ItemIndex = 1 then
begin
For i:=1 to Memo1.Lines.Count do h:=h+Memo1.Lines[i-1];
For i:=1 to Length(h) do
begin
m:=copy(h,i,1);
For ii:=1 to 26 do
begin
if m=ensm[ii] then
begin
k:=ii-n;
if k<1 then
While k<1 do k:=k+26;
s:=s+ensm[k];
//d:=d+1;
Break;
end else
if m=encp[ii] then
begin
k:=ii-n;
if k<1 then
While k<1 do k:=k+26;
s:=s+encp[k];
//d:=d+1;
Break;
end;
end;
For ii:=1 to smbi do
begin
if m=smbl[ii] then
begin
k:=ii-n;
if k<1 then
While k<1 do k:=k+smbi;
s:=s+smbl[k];
//d:=d+1;
Break;
end;
end;
end;
Memo2.Lines.Add(s);
end;