unit Euklid2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Label3: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Label4: TLabel;
    Panel1: TPanel;
    Label5: TLabel;
    Label6: TLabel;
    Panel2: TPanel;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
   var a, b, r, q, x, x0, x1, y, y0, y1, ggT, i, sign: Integer;
   Za, Zb, Antwort: String;
{$R *.DFM}

procedure TForm1.Button3Click(Sender: TObject);
begin
     close;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
     (* alle Werte zurücksetzen *)

     a := 1;
     Za := '1';
     b := 1;
     Zb := '1';
     r := 0;
     q := 1;
     x := 1;
     y := 0;
     i := 0;
     ggT := 1;
     Antwort := IntToStr(x)+' * '+Za+' + '+IntToStr(y)+' * '+Zb+' = '+IntToStr(ggT);

     Panel1.Caption := '1';
     Panel2.Caption := Antwort;
     Edit1.Text := '1';
     Edit2.Text := '1';
     Label6.Caption := '0';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     (* Zahlen einlesen *)
     Za := Edit1.Text;
     a := StrToInt(Za);
     Zb := Edit2.Text;
     b := StrToInt(Zb);
     i := 0;
     r := b;
     q := 1;
     x0 := 1;
     y0 := 0;
     x1 := 0;
     y1 := 1;
     sign := 1;

     (* erweiterter Eukidischer Algorithmus *)
     while r <> 0 do
       begin
          i := i + 1;
          q := a div b;
          r := a mod b;
          a := b;
          b := r;

          x := x1;
          y := y1;
          x1 := q * x1 + x0;
          y1 := q * y1 + y0;
          x0 := x;
          y0 := y;
          sign := -sign;
       end;

     ggT := a;
     x := sign * x0;
     y := -sign * y0;

     (*Ausgaben *)
     Panel1.Caption := IntToStr(a);
     Label6.Caption := IntToStr(i);

     Antwort := '('+IntToStr(x)+') * '+Za+' + ('+IntToStr(y)+') * '+Zb+' = '+IntToStr(ggT);
     Panel2.Caption := Antwort;

end;

end.