Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Craw
235 / 46 / 4
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
#1

Алгоритм Евклида - Delphi

03.07.2013, 00:26. Просмотров 909. Ответов 2
Метки нет (Все метки)

С помощью алгоритма Евклида (не расширенного) пытаюсь вычислить НОД:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function NOD(a: integer; n: integer):integer; // âû÷èñëèòü ГЌГЋГ„ Г*ëãîðèòìîì ÅâêëèäГ*
var
   r : array[1..100] of integer; // TO DO: äèГ*Г*ìè÷åñêèé Г¬Г*Г±Г±ГЁГў
                                 // äëÿ Г°Г*öèîГ*Г*ëüГ*îãî èñïîëüçîâГ*Г*ГЁГї ГЇГ*ìÿòè
   i : integer;
begin
   r[1]:=a; r[2]:=n; // îïðåäåëÿåì Г*Г*èáîëüøèé ýëåìåГ*ГІ из параметров
   if a<n then r[2]:=a; r[1]:=n;
 
   result:=1; // инициализация результата
   for i:=3 to 100 do  // Г±Г¬. ïîÿñГ*ГҐГ*ГЁГї âûøå ïðî ìåòîä ÅâêëèäГ*
      r[i] := r[i-2] mod r[i-1];
      if r[i-1] mod r[i] = 0 then
         begin
         result:=r[i];
         Exit;
        end;
 
end;
Всё должно работать, но в 12 строке ошибка - деление на ноль! Никак не могу понять, почему, ведь переменные a и n не равны нулю, как и элементы массива (должны быть).

Не по теме:

Кроме того, нужно создать динамический массив обязательно, чтобы экономить память и работать с большими числами, но уверен, что в поиске найду и не придется задавать вопрос.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.07.2013, 00:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Алгоритм Евклида (Delphi):

Алгоритм Евклида - Delphi
Требуется с помощью процедур и функций решить задачу: Даны натуральные числа а и b. Найти их наименьшее общее кратнок, определив функцию...

Алгоритм Евклида со сдвигом битов - Delphi
Составить программу вычисляющую НОД двух чисел по алгоритму Евклида. Пусть m&gt;=n - два целых числа, одновременно не равных нулю. Тогда...

Необходимо реализовать расширенный алгоритм Евклида - Delphi
Добрый вечер человеки! Необходимо реализовать расширенный алгоритм Евклида.Имеется реализованный код на Паскале,но что то не получается...

Найти наибольший общий делитель - алгоритм Евклида - Delphi
Найти наибольший общий делитель - алгоритм Евклида.

алгоритм Евклида. Соотношение Безу как сделать? - Delphi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type...

Расширенный алгоритм Евклида для вычисления мультипликативного обратного - Delphi
Расширенный алгоритм Евклида для вычисления мультипликативного обратного.

2
Одиночка
3924 / 1849 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
03.07.2013, 01:10 #2
Вот когда-то делал НОД:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//Вычисление НОД двух чисел
//Алгоритм Эвклида ...
Function NOD(a,b:Integer):Integer;
Begin
  Result:=1;
  Repeat
    If a>b Then
    //Меняем a и b местами, чтобы a было < b
    Begin i:=a; a:=b; b:=i; End;
    Repeat
      b:=b-a;
    Until (b=0) Or (b<a);
    Result:=a;
  Until (b=0);
End; {NOD}
Только зачем тут динамический массив?
1
Craw
235 / 46 / 4
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
04.07.2013, 15:43  [ТС] #3
Цитата Сообщение от Одиночка Посмотреть сообщение
Только зачем тут динамический массив?
Есть последовательность a>b>R1>R2>R3>R4>...>Rn же в этом алгоритме Евклида, так вот я хотел сохранить все значения RK в массив (вычислить их), и как только какой-то будет равен 0, возвратить его как НОД. Но не додумался, что можно сделать намного проще, оперируя только двумя переменными, меняя их значения!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 15:43
Привет! Вот еще темы с ответами:

Перевод чисел из одной системы счисления в другую используя алгоритм Евклида. - Delphi
здравствуйте! можете помоч с кодом? Перевод чисел из одной системы счисления в другую используя алгоритм Евклида.

Рекурсивная функция алгоритма Евклида - Delphi
Доброе утро. Облазил и обмозговал уже что смог на эту тему, ни один вариант не работает, вот последний вариант, ругается на 27 строку мол...

Найти наибольший общий делитель двух чисел по алгоритму Евклида - Delphi
найти наибольший общий делитель двух чисел по алгоритму Евклида ...

заданы числа a, b, c и d Нужно узнать, наступит в процессе реализации алгоритма Евклида для заданной п - Delphi
Пусть заданы числа a, b, c и d. Нужно узнать, наступит в процессе реализации алгоритма Евклида для заданной пары чисел (a, b) такой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru