![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
почему выдает ошибку: Operator not applicable to this operand type?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
P,G,X,K,M,a,b,Y:integer;
begin
P:=strtoint(Edit1.Text);
G:=strtoint(Edit2.Text);
X:=strtoint(Edit3.Text);
K:=strtoint(Edit5.Text);
if ((P>G)and(X<P))and((K<(P-1))and(K>1)) then
begin
Y:=exp(X*ln(G)) mod P; // на этой строке ошибка!
Edit4.Text:=inttostr(Y);
end
else
messagebox(0, pchar('Вы ввели значения неправильно! P>G, X<P и 1<K<P-1'),pchar('ВНИМАНИЕ!'),mb_iconinformation+mb_ok);
end;всю голову сломала, все типы данных перепробовала! что-то не так с mod скорее всего... ![]() |
|
#2
|
||||
|
||||
|
Правильно:
Код:
integer mod integer Код:
real mod integer |
|
#3
|
||||
|
||||
|
Все очень просто mod это остаток от деления целого числа на целое...т.е. (как у тебя) integer на integer...
Код:
exp(X*ln(G)) Что конкретно ты хочешь сделать??? |
|
#4
|
|||
|
|||
|
у меня просто формула:
Y:=G(в степени х) mod P по идее там не должно быть дробного числа... но т.к. там экспонента и логарифм, то дробное скорее всего появится... а вообще в целом пытаюсь рализовать шифр Эль Гамаля... но это только начало |
|
#5
|
||||
|
||||
|
Дело не в том появится или нет, а в том, что Exp по определению всегда возвращает Real. И даже если она вернет вроде-бы целое число, все равно для дельфи это будет реал, а он очень строго следит за соответствием типов при операциях типа вашей.
|
|
#6
|
||||
|
||||
|
превратить из дробного в целое поможет функция Trunc(ваше дробное)...
|
|
#7
|
|||
|
|||
|
ага, спасибо!
|