Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

Anigmos 12. Feb 2007 16:09


Bruchrechnung und das kürzen...
 
Hi,

Ich habe ein Problem ich wollte/muss eine Art Bruch-Taschenrechner programmieren der die Zahlen auch kürzt...nun habe ich ein Problem ich habe alles fertig bis auf das kürzen, die ggt funktion ist auch schon geschrieben... nur muss man sie ja auch irgendwie einbinden um so einen bruch als gemischte zahl angeben zu können. Wie mach ich das???


Hier das programm:
Delphi-Quellcode:
unit Unit1;

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);
    procedure ErgebnisZaehlerEditChange(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function ggT(a, b:Integer):Integer;
var
res:Integer;
begin
   repeat
          res := a mod b;
          a:=b;
          b:=res;
   until b <> 0;
end;

{*
procedure B_kuerzen(..);          <------ soll auch verwendet werden
}

procedure B_multiplizieren(var z1,z2,n1,n2,zerg,nennerg:real);
begin
zerg:= z1*z2;
nennerg:=n1*n2;
end;


procedure B_dividieren(var z1,z2,n1,n2,zerg,nennerg:real);
begin
zerg:= z1*n2;
nennerg:=n1*z2;
end;

procedure b_addieren(var z1,z2,n1,n2,zerg,nennerg:real);
begin
zerg:=(z1*n1)+(z2*n1);
nennerg:=n1*n2
end;

procedure B_subtrahieren(var z1,z2,n1,n2,zerg,nennerg:real);
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:Real;
begin

z1:=strtofloat(Zaehler1Edit.text);
z2:=strtofloat(Zaehler2Edit.text);
n1:=strtofloat(nenner1edit.text);
n2:=strtofloat(nenner2edit.text);
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);
// Ausgabe
ErgebnisZaehlerEdit.text:=Floattostr(zerg);
ErgebnisNennerEdit.text:=Floattostr(nennerg);
end;

procedure TForm1.ErgebnisZaehlerEditChange(Sender: TObject);
begin

end;

end.

Sidorion 12. Feb 2007 16:19

Re: Bruchrechnung und das kürzen...
 
Zunächst: Deine Funktion ggT leifert nix zurück (nein falsch: die liefert irgendeinen Integer, was halt grad im Speicher steht). Also entweder res durch Result ersetzen oder Result:=res ans Ende einfügen.
Zum Kürzen: ggt mit Zähler und Nenner aufrufen und danach beide durch das Ergebnis von ggt teilen.

Anigmos 12. Feb 2007 16:27

Re: Bruchrechnung und das kürzen...
 
also der ggt sollte eigentlich funktionieren hab das in nem anderen programm schon benutzt deswegen seh ich da kein problem oder doch?
Zitat:

Zum Kürzen: ggt mit Zähler und Nenner aufrufen und danach beide durch das Ergebnis von ggt teilen.
verstehe ich nicht so ganz

Delphi-Quellcode:
procedure B_kuerzen(var z1,z2,n1,n2,zerg,nennerg,ganerg:real);
begin
ganerg:= (ggt(a,b)/z1)7(ggt(a,b)/z2)  //so?
end;

yörsch 13. Feb 2007 08:43

Re: Bruchrechnung und das kürzen...
 
Hai,
Delphi-Quellcode:
function ggT(a, b:Integer):Integer;
var
res:Integer;
begin
   repeat
          res := a mod b;
          a:=b;
          b:=res;
   until b <> 0;
end;
was für einen wert soll result (also das ergebnis haben ???)
wenn ich die Funktion sosehe dann wohl : result := res; :drunken:

TonyR 13. Feb 2007 09:21

Re: Bruchrechnung und das kürzen...
 
Zitat:

Zitat von Anigmos
Delphi-Quellcode:
procedure B_kuerzen(var z1,z2,n1,n2,zerg,nennerg,ganerg:real);
begin
ganerg:= (ggt(a,b)/z1)7(ggt(a,b)/z2)  //so?    Eigentlich nicht, NEIN
end;

Ich finde mich hier überhaupt nicht rein, tut mir leid!

Warum hast du nicht TBruch als einen Record deklariert?
Delphi-Quellcode:
TBruch = record
  Zahler, Nenner: Integer;
end;
und jetz:
Delphi-Quellcode:
procedure kurzen(Ausgangsbruch, Ergebnisbruch: Tbruch);
begin
Ergebnisbruch.zahler:=Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
Ergebnisbruch.nenner:=Round(Ausgangsbruch.nenner div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
end;

Anigmos 13. Feb 2007 09:54

Re: Bruchrechnung und das kürzen...
 
Zitat:

Zitat von yörsch
Hai,
Delphi-Quellcode:
function ggT(a, b:Integer):Integer;
var
res:Integer;
begin
   repeat
          res := a mod b;
          a:=b;
          b:=res;
   until b <> 0;
end;
was für einen wert soll result (also das ergebnis haben ???)
wenn ich die Funktion sosehe dann wohl : result := res; :drunken:

res hat das ergebnis a mod b ?



Zitat:

Zitat von TonyR
Zitat:

Zitat von Anigmos
Delphi-Quellcode:
procedure B_kuerzen(var z1,z2,n1,n2,zerg,nennerg,ganerg:real);
begin
ganerg:= (ggt(a,b)/z1)7(ggt(a,b)/z2)  //so?    Eigentlich nicht, NEIN
end;

Ich finde mich hier überhaupt nicht rein, tut mir leid!

Warum hast du nicht TBruch als einen Record deklariert?
Delphi-Quellcode:
TBruch = record
  Zahler, Nenner: Integer;
end;
und jetz:
Delphi-Quellcode:
procedure kurzen(Ausgangsbruch, Ergebnisbruch: Tbruch);
begin
Ergebnisbruch.zahler:=Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
Ergebnisbruch.nenner:=Round(Ausgangsbruch.nenner div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
end;

Das geht leider nicht...Wir dürfen nur mit mitteln Arbeiten, die wir schon hatten... Worin ich überhaupt keinen Sinn sehe aber das ist ein anderes Thema...

TonyR 13. Feb 2007 09:58

Re: Bruchrechnung und das kürzen...
 
Aber ich hoffe du verstehst meine Vorgehensweise hier:
Delphi-Quellcode:
procedure kurzen(Ausgangsbruch, Ergebnisbruch: Tbruch);
begin

Ergebnisbruch.zahler:=Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));

Ergebnisbruch.nenner:=Round(Ausgangsbruch.nenner div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));

end;
So geht das nämlich => dürfte ja selbsterklärend sein :wink:
Und jetzt kannst du deine eigene Prozedur mit deinen 100 Variablen schreiben, oder nicht?

Anigmos 13. Feb 2007 10:06

Re: Bruchrechnung und das kürzen...
 
Zitat:

Zitat von TonyR
Aber ich hoffe du verstehst meine Vorgehensweise hier:
Delphi-Quellcode:
procedure kurzen(Ausgangsbruch, Ergebnisbruch: Tbruch);
begin

Ergebnisbruch.zahler:=Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));

Ergebnisbruch.nenner:=Round(Ausgangsbruch.nenner div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));

end;
So geht das nämlich => dürfte ja selbsterklärend sein :wink:
Und jetzt kannst du deine eigene Prozedur mit deinen 100 Variablen schreiben, oder nicht?

;) ja ist es ;) war irgendwie grade neben mir :freak: aber da kommt mir ein neues problem in denn Sinn...Wie kann ich die ganzzahl anzeigen lassen? ist das dann nicht
Delphi-Quellcode:
ganzezahl:=  ???? div ???
ICh hoffe du verstehst mein Problem :gruebel:

TonyR 13. Feb 2007 10:12

Re: Bruchrechnung und das kürzen...
 
Zitat:

Zitat von Anigmos
...ICh hoffe du verstehst mein Problem :gruebel:

Nein.
"Round" rundet Zahlen immer zu einer Ganzzahl, es gibt also eine Ganzzahl wieder. Und wenn ich das hier verwende:
Delphi-Quellcode:
Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
wird eine Ganzahl zurückgeliefert... es kommt also zu keinem Problem.
Falls ich dich wirklich falsch verstanden habe, einfach nochmal genauer fragen :wink:

Anigmos 13. Feb 2007 10:17

Re: Bruchrechnung und das kürzen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von TonyR
Zitat:

Zitat von Anigmos
...ICh hoffe du verstehst mein Problem :gruebel:

Nein.
"Round" rundet Zahlen immer zu einer Ganzzahl, es gibt also eine Ganzzahl wieder. Und wenn ich das hier verwende:
Delphi-Quellcode:
Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
wird eine Ganzahl zurückgeliefert... es kommt also zu keinem Problem.
Falls ich dich wirklich falsch verstanden habe, einfach nochmal genauer fragen :wink:

Round dürfen wir nicht benutzen...fürs runden gibt es ja dieses f oderso...
Ich hab mal ein Bild angehangen wie ich es meine ( mit den Ausgabe werten)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Seite 1 von 3  1 23      

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