function f(a, b: Integer): Integer; var c, temp: Integer; begin if (a = 0) then begin Result := b; Exit; end; if (b = 0) then begin Result := a; Exit; end; if a > b then begin temp := a; a := b; b := temp; end; c := a mod b; while c > 0 do begin a := b; b := c; c := a mod b; end; Result := b; end;function v(a, b:Integer): Integer; var i: Integer; begin i:= 1; while (i mod a <> 0) or (i mod b <> 0) do Inc(i); Result := i; end;procedure TForm1.Button2Click(Sender: TObject); var a: array[1..1000] of Integer; v1, v2, i, n: Integer; begin a[1] := 20; a[2] := 6; a[3] := 25; a[4] := 40; n := 4; v1 := f(a[1], a[2]); v2 := v(a[1], a[2]); i := 3; while (i <= n) do begin v1 := f(v1, a[i]); v2 := v(v2, a[i]); Inc(i); end; ShowMessage(Format('最大公约数: %d 最小公倍数 %d', [v1, v2])); end;
代码文件:
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Edit1: TEdit; Edit2: TEdit; procedure Button1Click(Sender: TObject); end;var Form1: TForm1;implementation{$R *.dfm}{求最大公约数 算法: 假如 x > y, x mod y 取余数后, y 付给 x、余数付给 y, 然后重复运算, 最后非 0 的余数就是最大公约数 } function zdgys(x,y: Cardinal): Cardinal; var n: Integer; begin n := y; if x < y then begin y := x; x := n; end; while n > 0 do begin n := x mod y; x := y; if n > 0 then y := n; end; Result := y; end;{求最小公倍数 算法: x * y div 它们的最大公约数 } function zxgbs(x,y: Cardinal): Cardinal; var m,n: Cardinal; begin m := x * y; n := y; if x < y then begin y := x; x := n; end; while n > 0 do begin n := x mod y; x := y; if n > 0 then y := n; end; Result := m div y; end;{测试} procedure TForm1.Button1Click(Sender: TObject); const str = '%0:d 与 %1:d 的最大公约数是 %2:d'#13#10'%0:d 与 %1:d 的最小公倍数是 %3:d'; var x,y,a,b: Cardinal; begin x := StrToIntDef(Edit1.Text, 1); y := StrToIntDef(Edit2.Text, 1); a := zdgys(x, y); b := zxgbs(x, y); ShowMessageFmt(str, [x,y,a,b]); end;end. 窗体文件:
object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 160 ClientWidth = 268 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 176 Top = 14 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = Button1Click end object Edit1: TEdit Left = 17 Top = 16 Width = 64 Height = 21 TabOrder = 1 Text = 'Edit1' end object Edit2: TEdit Left = 98 Top = 16 Width = 63 Height = 21 TabOrder = 2 Text = 'Edit2' end end
以前学JAVA的时候练过这些小题目
function LCM(var x, y : Integer) : Integer; //最小公倍数 var z : Integer; begin if x > y then begin z := x; end else begin z := y; end; repeat if (z mod x = 0) and (z mod y = 0) then Break; Inc(z); until False; Result := z; end;function GCD(var x, y : integer) : Integer; //最大公约数 var z : Integer; begin repeat z := x mod y; x := y; y := z until z = 0; Result := x; end;procedure TForm_Counter.btnGCDClick(Sender: TObject); var EditText : array[1..12] of TEdit; counters : array of Integer; i, j : Integer; x, y, z : Integer; begin EditText[1] := edtdata1; EditText[2] := edtdata2; EditText[3] := edtdata3; EditText[4] := edtdata4; EditText[5] := edtdata5; EditText[6] := edtdata6; EditText[7] := edtdata7; EditText[8] := edtdata8; EditText[9] := edtdata9; EditText[10] := edtdata10; EditText[11] := edtdata11; EditText[12] := edtdata12; y := 0; x := 0; z := 0; SetLength(counters,12); for i := 1 to 12 do begin if EditText[i].Text <> '' then begin counters[i] := StrToInt(edittext[i].Text); y := y + 1; end else Break; end; SetLength(counters,y); j := gcd(counters[1], counters[2]); while (z <= y) do //以下代码用的是 1楼 的代码。 begin x := gcd(j, counters[y]); Inc(z); end; Edit_VisibleData.Text := IntToStr(x); end;帮我看看错误在哪里。调试时发生运行错误,程序退出。
var
c, temp: Integer;
begin
if (a = 0) then
begin
Result := b;
Exit;
end;
if (b = 0) then
begin
Result := a;
Exit;
end;
if a > b then
begin
temp := a;
a := b;
b := temp;
end;
c := a mod b;
while c > 0 do
begin
a := b;
b := c;
c := a mod b;
end;
Result := b;
end;function v(a, b:Integer): Integer;
var
i: Integer;
begin
i:= 1;
while (i mod a <> 0) or (i mod b <> 0) do Inc(i);
Result := i;
end;procedure TForm1.Button2Click(Sender: TObject);
var
a: array[1..1000] of Integer;
v1, v2, i, n: Integer;
begin
a[1] := 20;
a[2] := 6;
a[3] := 25;
a[4] := 40;
n := 4;
v1 := f(a[1], a[2]);
v2 := v(a[1], a[2]);
i := 3;
while (i <= n) do
begin
v1 := f(v1, a[i]);
v2 := v(v2, a[i]);
Inc(i);
end;
ShowMessage(Format('最大公约数: %d 最小公倍数 %d', [v1, v2]));
end;
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}{求最大公约数
算法: 假如 x > y, x mod y 取余数后,
y 付给 x、余数付给 y,
然后重复运算, 最后非 0 的余数就是最大公约数
}
function zdgys(x,y: Cardinal): Cardinal;
var
n: Integer;
begin
n := y;
if x < y then
begin
y := x;
x := n;
end; while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end;
Result := y;
end;{求最小公倍数
算法: x * y div 它们的最大公约数
}
function zxgbs(x,y: Cardinal): Cardinal;
var
m,n: Cardinal;
begin
m := x * y;
n := y;
if x < y then
begin
y := x;
x := n;
end; while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end; Result := m div y;
end;{测试}
procedure TForm1.Button1Click(Sender: TObject);
const
str = '%0:d 与 %1:d 的最大公约数是 %2:d'#13#10'%0:d 与 %1:d 的最小公倍数是 %3:d';
var
x,y,a,b: Cardinal;
begin
x := StrToIntDef(Edit1.Text, 1);
y := StrToIntDef(Edit2.Text, 1);
a := zdgys(x, y);
b := zxgbs(x, y);
ShowMessageFmt(str, [x,y,a,b]);
end;end.
窗体文件:
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 160
ClientWidth = 268
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 176
Top = 14
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object Edit1: TEdit
Left = 17
Top = 16
Width = 64
Height = 21
TabOrder = 1
Text = 'Edit1'
end
object Edit2: TEdit
Left = 98
Top = 16
Width = 63
Height = 21
TabOrder = 2
Text = 'Edit2'
end
end
var z : Integer;
begin
if x > y then
begin
z := x;
end
else
begin
z := y;
end;
repeat
if (z mod x = 0) and (z mod y = 0) then Break;
Inc(z);
until False;
Result := z;
end;function GCD(var x, y : integer) : Integer; //最大公约数
var z : Integer;
begin
repeat
z := x mod y;
x := y;
y := z
until z = 0;
Result := x;
end;procedure TForm_Counter.btnGCDClick(Sender: TObject);
var
EditText : array[1..12] of TEdit;
counters : array of Integer;
i, j : Integer;
x, y, z : Integer;
begin
EditText[1] := edtdata1;
EditText[2] := edtdata2;
EditText[3] := edtdata3;
EditText[4] := edtdata4;
EditText[5] := edtdata5;
EditText[6] := edtdata6;
EditText[7] := edtdata7;
EditText[8] := edtdata8;
EditText[9] := edtdata9;
EditText[10] := edtdata10;
EditText[11] := edtdata11;
EditText[12] := edtdata12;
y := 0;
x := 0;
z := 0;
SetLength(counters,12);
for i := 1 to 12 do
begin
if EditText[i].Text <> '' then
begin
counters[i] := StrToInt(edittext[i].Text);
y := y + 1;
end
else Break;
end;
SetLength(counters,y);
j := gcd(counters[1], counters[2]);
while (z <= y) do //以下代码用的是 1楼 的代码。
begin
x := gcd(j, counters[y]);
Inc(z);
end;
Edit_VisibleData.Text := IntToStr(x);
end;帮我看看错误在哪里。调试时发生运行错误,程序退出。