AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem beim kürzen von Brüchen

Ein Thema von Clobber the mob · begonnen am 15. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Clobber the mob

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

Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 21: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
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 21:22
Wenn das wirklich dein Code ist, wie er in deinem Programm steht, dann fehlt an folgender Stelle ein Semikolon!
Delphi-Quellcode:
procedure TForm1.EndeButtonClick(Sender: TObject);
begin
Close
end;
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")!!!
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Benutzerbild von jakobwenzel
jakobwenzel

Registriert seit: 31. Aug 2005
Ort: Ingelheim am Rhein
141 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 21:26
Vorm End darf man das Semikolon weglassen.

Aber das mit Variable/Funktion verursacht abgesehen von Verwirrung auf gerne Fehler.
Jakob Wenzel
"My store now sells Ninja Weapons!"
Comicverkäufer bei den Simpsons
  Mit Zitat antworten Zitat
Benutzerbild von TonyR
TonyR

Registriert seit: 17. Jun 2006
Ort: Bautzen
503 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 21:35
Ich habe deinen Code mal bei mir eingefügt und es jetzt komplett rausfinden können, wo der Fehler liegt!
Delphi-Quellcode:
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;
Jetzt gehts! Es liegt wirklich daran, dass eine Variable nicht gleich heißen darf, wie eine Funktion!

Edit: Ich hab mal diesen Parameter ganz weggenommen... den brauchst du doch gar nicht
Es ist unmöglich, witzig zu sein ohne ein bisschen Bosheit. Die Bosheit eines guten Witzes ist der Widerhaken, der ihn haften lässt. - Georg Christoph Lichtenberg
  Mit Zitat antworten Zitat
Clobber the mob

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

Re: Problem beim kürzen von Brüchen

  Alt 15. Feb 2007, 21:43
danke jetzt klappt es.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz