![]() |
Problem beim kürzen von Brüchen
Delphi-Quellcode:
Das einmal der Gesamte Code.
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. Der Fehler liegt hier:
Delphi-Quellcode:
In dieser Zeile tritt der Fehler auf: Operator oder Semikolon fehlt.
ggTeiler := ggT(ErgebnisZaehler, ErgebnisNenner);
Ich habe mir den Text etwas genauer angeschaut kann den fehler aber nicht entdecken? |
Re: Problem beim kürzen von Brüchen
Wenn das wirklich dein Code ist, wie er in deinem Programm steht, dann fehlt an folgender Stelle ein Semikolon!
Delphi-Quellcode:
Edit: Und ich weis auch nicht, ob es so super ist, dass es eine Variable gibt, die den selben Namen hat wie eine Funktion (in dem Falle "ggt")!!!
procedure TForm1.EndeButtonClick(Sender: TObject);
begin Close end; |
Re: Problem beim kürzen von Brüchen
Vorm End darf man das Semikolon weglassen.
Aber das mit Variable/Funktion verursacht abgesehen von Verwirrung auf gerne Fehler. |
Re: Problem beim kürzen von Brüchen
Ich habe deinen Code mal bei mir eingefügt und es jetzt komplett rausfinden können, wo der Fehler liegt!
Delphi-Quellcode:
Jetzt gehts! Es liegt wirklich daran, dass eine Variable nicht gleich heißen darf, wie eine Funktion!
procedure B_kuerzen (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; Edit: Ich hab mal diesen Parameter ganz weggenommen... den brauchst du doch gar nicht :gruebel: |
Re: Problem beim kürzen von Brüchen
danke jetzt klappt es.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz