如题!

解决方案 »

  1.   

    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;
      

  2.   

    代码文件:
     
    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
      

  3.   

    以前学JAVA的时候练过这些小题目
      

  4.   

    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;帮我看看错误在哪里。调试时发生运行错误,程序退出。