Einzelnen Beitrag anzeigen

Clobber the mob

Registriert seit: 28. Jan 2007
11 Beiträge
 
#1

Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 22:07
Delphi-Quellcode:
unit Bruchrechnung;

interface

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

type
  TForm1 = class(TForm)
    EndeButton: TButton;
    RechnenButton: TButton;
    Zaehler1Edit: TEdit;
    Nenner1Edit: TEdit;
    OperatorEdit: TEdit;
    Zaehler2Edit: TEdit;
    Nenner2Edit: TEdit;
    GanzzahlEdit: TEdit;
    ErgebnisZaehlerEdit: TEdit;
    ErgebnisNennerEdit: TEdit;
    procedure EndeButtonClick(Sender: TObject);
    procedure RechnenButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// function für die Berechnung des ggT

function ggT(a, b : Integer) : Integer;
var rest:integer;
begin
 repeat
       Rest := a MOD b;
       a := b;
       b := Rest;
 until Rest = 0;
       Result := a;
end;

// Alle Berechnungs-Prozeduren

procedure B_kuerzen (ggT, ErgebnisZaehler, ErgebnisNenner : Integer);
var ggTeiler:integer;
begin
 if (ErgebnisZaehler <> 0) AND (ErgebnisNenner <> 0) then
 begin
  ggTeiler := ggT(ErgebnisZaehler, ErgebnisNenner);
  ErgebnisZaehler := ErgebnisZaehler DIV ggTeiler;
  ErgebnisNenner := ErgebnisNenner DIV ggTeiler;
 end;
end;

procedure B_addieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
 ErgebnisZaehler := (Zaehler1 * Nenner2) + (Zaehler2 * Nenner1);
 ErgebnisNenner := Nenner1 * Nenner2;
end;

procedure B_subtrahieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
 var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
 ErgebnisZaehler := (Zaehler1 * Nenner2) - (Zaehler2 * Nenner1);
 ErgebnisNenner := Nenner1 * Nenner2;
end;

procedure B_dividieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
 var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
 ErgebnisZaehler := Zaehler1 * Nenner2;
 ErgebnisNenner := Nenner1 * Zaehler2;
end;

procedure B_multiplizieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
 var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
 ErgebnisZaehler := Zaehler1 * Zaehler2;
 ErgebnisNenner := Nenner1 * Nenner2;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
  Zaehler1Edit.Text := '1';
  Zaehler2Edit.Text := '1';
  Nenner1Edit.Text := '1';
  Nenner2Edit.Text := '1';
  GanzzahlEdit.Text := '0';
  ErgebnisZaehlerEdit.Text := '0';
  ErgebnisNennerEdit.Text := '0';
  OperatorEdit.Text := '-';
end;

procedure TForm1.RechnenButtonClick(Sender: TObject);
 var Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner, Ganzzahl, ggT, ggTeiler : integer;
begin

// Eingabe - einlesen der Werte
  Zaehler1 := StrToInt(Zaehler1Edit.Text);
  Zaehler2 := StrToInt(Zaehler2Edit.Text);
  Nenner1 := StrToInt(Nenner1Edit.Text);
  Nenner2 := StrToInt(Nenner2Edit.Text);

// Prüfung auf gültigen Operator
  begin if Zaehler1 = 0 then
    ShowMessage('Error: 0 ist ein ungültiger Wert')
  end;
  begin if Zaehler2 = 0 then
    ShowMessage('Error: 0 ist ein ungültiger Wert')
  end;
  begin if Nenner1 = 0 then
    ShowMessage('Error: 0 ist ein ungültiger Wert')
  end;
  begin if Nenner2 = 0 then
    ShowMessage('Error: 0 ist ein ungültiger Wert')
  end;

// Berechnung
  if OperatorEdit.Text = '+then B_addieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner) else
  if OperatorEdit.Text = '-then B_subtrahieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner) else
  if OperatorEdit.Text = '/then B_dividieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner) else
  if OperatorEdit.Text = '*then B_multiplizieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner)
  else ShowMessage('Error: Ungültiges Rechenzeichen');

  if ErgebnisZaehler = ErgebnisNenner then
  begin
   Ganzzahl := 1;
   ErgebnisZaehler := 0;
   ErgebnisNenner := 0;
  end;

// Hier sollte dann der Bruch gekürzt werden
  B_Kuerzen(ErgebnisZaehler, ErgebnisNenner, ggTeiler);

// Berechnung der Ganzzahl des Bruches
  Ganzzahl := ErgebnisZaehler DIV ErgebnisNenner;
  ErgebnisZaehler := ErgebnisZaehler MOD ErgebnisNenner;

// Ungültige Ergebnisse vermeiden
  if ErgebnisZaehler = 0 then
  ErgebnisNenner := 0;
  if ErgebnisNenner = 0 then
  ErgebnisZaehler := 0;



// Ausgebe der Werte(Ergebnisse)
  ErgebnisNennerEdit.Text := IntToStr(ErgebnisNenner);
  ErgebnisZaehlerEdit.Text := IntToStr(ErgebnisZaehler);
  GanzzahlEdit.Text := IntToStr(Ganzzahl);

end;


procedure TForm1.EndeButtonClick(Sender: TObject);
begin
 Close
end;

end.
Das einmal der Gesamte Code.
Der Fehler liegt hier:
ggTeiler := ggT(ErgebnisZaehler, ErgebnisNenner); In dieser Zeile tritt der Fehler auf: Operator oder Semikolon fehlt.

Ich habe mir den Text etwas genauer angeschaut kann den fehler aber nicht entdecken?
  Mit Zitat antworten Zitat