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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2011, 23:46   #11
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

begin
Хотя посмотрите пожалуйста код, что то через раз правильно вычисляет... то вообще отрицательно значение дает
Var

b,c,rez,odin,ze,re:int64;
reb,a,d,k,be, N :Integer;
......

begin

c:=StrToint(edt2.Text);
a:=StrToint(edt3.Text);
odin:=1;
be:=StrToInt(edt4.Text);
for k:=1 to be do
odin:=odin*c;
re:=odin mod a;


a и b хранятся соответственно в edt2.Text и в edt4.Text

причем опять же небольшие числа правильно рассчитывает, как только возрастает, так неразбериха...

Последний раз редактировалось Zibiv; 27.05.2011 в 23:51.
Zibiv вне форума Ответить с цитированием
Старый 27.05.2011, 23:55   #12
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А вот у меня такое предложение, как вычислять остаток.
Если нам требуется вычислить остаток от деления a на b, то алгоритм такой.
В цикле каждый раз из a вычитаем b, при этом смотрим, если a (результат) получился меньше, чем b, то это и будет являться остатком.

Например, делим 10 на 3 с остатком.

Итерация 1.
10-3 = 7.
здесь 7>3, идём дальше

2.
7-3 = 4
4>3, идём дальше

3.
4-3 = 1.
1 < 3, остаток равен 1.
Вадим Мошев вне форума Ответить с цитированием
Старый 27.05.2011, 23:58   #13
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Цитата:
Сообщение от Вадим Мошев Посмотреть сообщение
А вот у меня такое предложение, как вычислять остаток.
Если нам требуется вычислить остаток от деления a на b, то алгоритм такой.
В цикле каждый раз из a вычитаем b, при этом смотрим, если a (результат) получился меньше, чем b, то это и будет являться остатком.

Например, делим 10 на 3 с остатком.

Итерация 1.
10-3 = 7.
здесь 7>3, идём дальше

2.
7-3 = 4
4>3, идём дальше

3.
4-3 = 1.
1 < 3, остаток равен 1.
Пробовал, опять же при больших числах программа зависает..... если надо найти 12383723128 mod 15 сколько же будет вычитать))
Zibiv вне форума Ответить с цитированием
Старый 28.05.2011, 00:04   #14
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Код:
c:=StrToint(edt2.Text);
У нас же Int64..... проверь чтоб все функции и процедуры работали с этим типом корректно.
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 28.05.2011, 00:11   #15
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

то есть должно быть c:=StrToint64(edt2.Text);

С малыми числа ми дает правельные результаты, но как только результат a^b дает число типа 1,2839933384336071289824798844234e+ 65 то mod берется некорректно
Zibiv вне форума Ответить с цитированием
Старый 28.05.2011, 00:13   #16
Valio
Сливочное масло
Участник клуба
 
Аватар для Valio
 
Регистрация: 01.01.2011
Сообщений: 1,149
По умолчанию

Кароче надо проверить что все функции будут работать с твоим типом правильно. Вполне возможно что mod не хочет работать с Int64 и надо будет написать свою функцию.

Что вообще за задание с адскими цифрами?
Сливочное масло Valio - компиляция как по маслу
Valio вне форума Ответить с цитированием
Старый 28.05.2011, 00:16   #17
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Схема Диффи Хеллмана, генерация ключа))

ну с небольшими значениями все совершенно верно
Zibiv вне форума Ответить с цитированием
Старый 28.05.2011, 00:27   #18
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Я уже не знаю что надо делать...
Zibiv вне форума Ответить с цитированием
Старый 28.05.2011, 08:31   #19
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,899
По умолчанию

поиск по форуму "длинная арифметика"
phomm вне форума Ответить с цитированием
Старый 28.05.2011, 11:43   #20
Zibiv
Пользователь
 
Регистрация: 27.09.2008
Сообщений: 64
По умолчанию

Точно!!

Вот смотрите создал массив, для того что бы возводить в степень и получать числа без мантиссы, потому что как я понял mod некорректно вычисляется из-за того что результат возведения в степень округялся...

Код:
var
  f: array[1..5,1..210] of Integer;
  i, j, q, k, n, d, z, kk: integer;


begin
d:=StrToInt(edt2.Text);//то что возводим
n:=StrToInt(edt4.Text);// во что возводим
i:=210;
k:= i;
while d>0 do
begin
f[1,i]:=d mod 10;
d := d div 10;
i := i - 1;
end;
for j := 1 to k do
begin
f[2, j] := f[1, j];
end;
for q := 1 to n - 1 do
begin
j := k;
z := 0;
while j > 1 do
begin
f[3, j] := (f[1, j] * f[2, k] mod 10) + z;
z := f[1, j] * f[2, k] div 10;
j := j - 1;
end;
z := 0;
for j := k downto 1 do
begin
f[5, j] := (f[3, j] + f[4, j] + z) mod 10;
z := (f[3, j] + f[4, j] + z) div 10;
end;
for j := 1 to k do
begin
f[1, j] := f[5, j];
f[5, j] := 0;
end;
for j := 1 to k do
begin
if f[1, j] = 0 then
begin
kk := kk + 1
end
end;
end;

for j := kk + 1 to k do
begin
re:=(f[1,j]);
end;
edt1.Text:=IntToStr(re);// вывод результата
end;
во-первых почему-то сам результат не выводится... в edit1, и мне кажется что у меня глаз замылился и я не вижу простых вещей...

хммммм в паскале работает вроде корректно работает но нужно в Delphi

Последний раз редактировалось Zibiv; 28.05.2011 в 14:58.
Zibiv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
определить остаток от деления чисел dimon-nicolayev Паскаль, Turbo Pascal, PascalABC.NET 2 11.04.2011 11:02
Остаток от деления Memfis_nya Помощь студентам 23 26.09.2010 14:58
Нахождение остатка от деления очень больших чисел Pavel_Ine Общие вопросы C/C++ 6 22.11.2009 20:49
остаток от деления % Division Общие вопросы C/C++ 5 25.12.2008 14:08