Как найти наибольший общий делитель в Delphi

Другое   1 Ноябрь 2010  Автор статьи: admin 

Функции нахождения наибольшего общего делителя двух чисел или массива.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
 // функция нахождения НОД(A,B)

function TForm1.GCF(A, B: Integer): Integer;
var
Lfactor: Integer;
begin
if (A < 1) or (B < 1) then
begin
Result := -1;
Exit;
end;
if A = B then
begin
Result := A;
Exit;
end;
Result := 1;
for Lfactor := trunc(max(A, B) / 2) downto 2 do
begin
if (frac(A / Lfactor) = 0) and (frac(B / Lfactor) = 0) then
begin
Result := Lfactor;
Exit;
end;
end;
end;

// функция нахождения НОД(a[1],a[2],a[3]...a[n])
function TForm1.GCFarray(A: array of Integer): Integer;
var
Llength, Lindex, Lfactor: Integer;
begin
Llength := Length(A);
for Lindex := 0 to Llength - 1 do
begin
if A[Lindex] < 1 then
begin
Result := -1;
Exit;
end;
end;

Lindex := 1;
while (Lindex < Llength) and (A[Lindex] = A[0]) do
Inc(Lindex);
if Lindex = Llength then
begin
Result := A[0];
Exit;
end;

Result := 1;

for Lfactor := trunc(ArrayMax(A) / 2) downto 2 do
begin
Lindex := 0;
while (Lindex < Llength) and
(frac(A[Lindex] / Lfactor) = 0) do
Inc(Lindex);
if Lindex = Llength then
begin
Result := Lfactor;
Exit;
end;
end;
end;

function TForm1.ArrayMax(Aarray: array of Integer): Integer;
var
Lpos: Integer;
begin
Result := 0;
for Lpos := 0 to Length(Aarray) - 1 do
if Aarray[Lpos] > Result then
Result := Aarray[Lpos];
end;

[note]Применение:

procedure TForm1.Button1Click(Sender: TObject);
var
Res: Integer;
begin
Res := GCF(81, 54);
ShowMessage(Inttostr(Res));
end;[/note]

Научиться программировать

  • на Delphi

  • на Java

  • на C++