Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bruchrechnung und das kürzen... (https://www.delphipraxis.net/86319-bruchrechnung-und-das-kuerzen.html)

TonyR 13. Feb 2007 10:23

Re: Bruchrechnung und das kürzen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Informatik Klasse 11???
Ich hab so was auch mal gemacht (siehe Anhang).

Ich bin auch dumm ... :oops:
Man muss ja gar nicht mehr runden (rein theoretisch) => es kommt ja ne Ganzzahl raus (wegen ggt).
Aber ob der Compiler das auch weis kann ich jetzt gar nicht sagen...
Hast du noch ein Problem oder funkt das jetzt so?

PS: Zitiere bitte nicht immer ganze Posts (wegen übersichtlichkeit und Platz)

Anigmos 13. Feb 2007 11:34

Re: Bruchrechnung und das kürzen...
 
Jop info klasse 11 genau so ein programm sollten wir schreiben...
Wenn ich bei mir jetzt 15/15 * 15/15 bekomme ich ein error mit dem fehler division durch 0...Irgendwas ist noch faul ;)

TonyR 13. Feb 2007 11:38

Re: Bruchrechnung und das kürzen...
 
dann musst du mal Haltepunkte in dein Prog einfügen und wenn es dann unterbrochen wurde, musst du mit F7 jede Zeile einzeln weiterrücken und gucken an welcher stelle genau dein Prog den Error verursacht! Und wenn du dir das nicht erklären kannst warum, dann poste die Stelle, die nicht geht!

Anigmos 13. Feb 2007 11:44

Re: Bruchrechnung und das kürzen...
 
wie macht man denn die haltepunkte?

TonyR 13. Feb 2007 11:46

Re: Bruchrechnung und das kürzen...
 
bei einer Quelltextzeile links auf den grauen rand klicken, da dürfte dann so ein roter punkt erscheinen

Anigmos 13. Feb 2007 12:04

Re: Bruchrechnung und das kürzen...
 
das problem liegt beim ggt?! :gruebel:
Delphi-Quellcode:
          result:= a mod b;

und hier nochmal der Code wie er jetzt ist...

Delphi-Quellcode:
// Z1 ist der 1. Zähler
// Z2 der 2. Zähler
// n1 der erste nenner
// n2 der zweite nenner
// zerg Zählerergebnis
//nenner Nennerergebnis
//ganerg Ganzzahlenergebnis
unit mBruchrechnen;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
// GGT Bestimmung
function ggT(a, b:integer):integer;
begin
   repeat
          result:= a mod b;
          a:=b;
          b:=result;
   until b <> 0;
end;

//Kürzen
procedure B_kuerzen(var z1,z2,n1,n2,zerg,nennerg,ganerg:integer);
begin
zerg:=zerg div(ggt(zerg,nennerg));
nennerg:=nennerg div (ggt(zerg,nennerg));
end;
// Brüche Multiplizieren
procedure B_multiplizieren(var z1,z2,n1,n2,zerg,nennerg:integer);
begin
zerg:= z1*z2;
nennerg:=n1*n2;
end;

// Brüche Dividieren
procedure B_dividieren(var z1,z2,n1,n2,zerg,nennerg:integer);
begin
zerg:= z1*n2;
nennerg:=n1*z2;
end;
// Brüche addieren
procedure b_addieren(var z1,z2,n1,n2,zerg,nennerg:integer);
begin
zerg:=(z1*n1)+(z2*n1);
nennerg:=n1*n2
end;
// Brüche subtrahieren
procedure B_subtrahieren(var z1,z2,n1,n2,zerg,nennerg:integer);
begin
zerg:=(z1*n1)-(z2*n1);
nennerg:=n1*n2
end;

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

procedure TForm1.RechnenButtonClick(Sender: TObject);
var z1,z2,n1,n2,zerg,nennerg,ganerg:integer;
begin
//eingabe
z1:=strtoint(Zaehler1Edit.text);
z2:=strtoint(Zaehler2Edit.text);
n1:=strtoint(nenner1edit.text);
n2:=strtoint(nenner2edit.text);
// Abfrage des Operators und ausführen der jeweiligen Funktion
if operatoredit.text = '*' then B_multiplizieren(z1,z2,n1,n2,zerg,nennerg);
if operatoredit.text = '/' then B_dividieren(z1,z2,n1,n2,zerg,nennerg);
if operatoredit.text = '+' then B_addieren(z1,z2,n1,n2,zerg,nennerg);
if operatoredit.text = '-' then B_subtrahieren(z1,z2,n1,n2,zerg,nennerg);
// Kürzen
B_kuerzen(z1,z2,n1,n2,zerg,nennerg,ganerg);
// Ausgabe
GanzzahlEdit.text:=inttostr(ganerg);
ErgebnisZaehlerEdit.text:=inttostr(zerg);
ErgebnisNennerEdit.text:=inttostr(nennerg);
end;

end.

marabu 13. Feb 2007 12:23

Re: Bruchrechnung und das kürzen...
 
Hallo Anigmos,

ich fürchte du verwendest den euklidischen Algorithmus ohne ihn zu verstehen. Betrachte zumindest mal die Rechenregeln im Wikipedia-Artikel. Und wenn du hier nach [dp]Euklid*[/dp] suchst, dann erhältst du auch noch jede Menge Lesestoff.

Freundliche Grüße

TonyR 13. Feb 2007 12:35

Re: Bruchrechnung und das kürzen...
 
Hier mal als Referenz meine ggt-Funktion!
Delphi-Quellcode:
function ggT(a,b: integer):integer;
   var x :integer;
begin
   if b <> 0 then
   repeat
     x:=a mod b;
     a:=b;
     b:=x;
   until x = 0;
     result := abs(a); //falls a, oder b negativ
end;
Edit: die habe ich verstanden, aber vorher auch nur von dsdt.info kopiert :wink:

bitsetter 13. Feb 2007 12:54

Re: Bruchrechnung und das kürzen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mal ein kleines Beispiel zum Thema Brüche kürzen angehängt, weis aber nicht, ob du sowas meintest.

Anigmos 14. Feb 2007 14:55

Re: Bruchrechnung und das kürzen...
 
So noch langem hin und her hab ich 1. den fehler bei meinem algorithmus gefunden hab anstatt b = 0 b <> 0 gehabt :wall: Tja aber nun ist noch das problem mit der Ausgabe wie kann ich diese einbinden??


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:37 Uhr.
Seite 2 von 3     12 3      

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