|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не получается найти общий делитель
Неполучается найти наибольший общий делитель двух чисел.
Поискал в инете, вот нашел. Где то здесь есть ошибка. Помогите найти и исправить. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Label2: TLabel; Edit2: TEdit; Label3: TLabel; Button1: TButton; Panel1: TPanel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var p, n1, m1, n, m, R: LongWord; begin n:= StrToInt(edit1.text); m:= StrToInt(edit2.Text); if (n = 0) or (m = 0) then R:= 0 else begin if m < n then begin n1 := m; m1 := n; end; begin n1 := n; m1 := m; end; while n1 > 0 do begin p := m1 mod n1; m1 := n1; n1 := p; end; R := m1; panel1.Caption:=IntToStr(R); end; end; end. |
#2
|
|||
|
|||
Edit1,Edit2- исходные числа
Edit3- максим общий делитель Код:
uses Math; {--------------------------------------------------------- функция возвращает макс общий делитель ----------------------------------------------------------} function GetMaxDiv(x1,x2:integer):integer; begin if (x1=0) or (x2=0) then Result:=-1 else begin Result:=min(x1,x2); while (x1 mod Result <> 0) or (x2 mod Result <> 0) do dec(Result) end; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit3.Text:=IntToStr(GetMaxDiv(StrToInt(Edit1.Text),StrToInt(Edit2.Text))); end; Последний раз редактировалось chainik, 04.10.2011 в 16:59. |