![]() |
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. |
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. |
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:
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; |
Re: Bruchrechnung und das kürzen...
Hai,
Delphi-Quellcode:
was für einen wert soll result (also das ergebnis haben ???)
function ggT(a, b:Integer):Integer;
var res:Integer; begin repeat res := a mod b; a:=b; b:=res; until b <> 0; end; wenn ich die Funktion sosehe dann wohl : result := res; :drunken: |
Re: Bruchrechnung und das kürzen...
Zitat:
Warum hast du nicht TBruch als einen Record deklariert?
Delphi-Quellcode:
und jetz:
TBruch = record
Zahler, Nenner: Integer; end;
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; |
Re: Bruchrechnung und das kürzen...
Zitat:
Zitat:
|
Re: Bruchrechnung und das kürzen...
Aber ich hoffe du verstehst meine Vorgehensweise hier:
Delphi-Quellcode:
So geht das nämlich => dürfte ja selbsterklärend sein :wink:
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; Und jetzt kannst du deine eigene Prozedur mit deinen 100 Variablen schreiben, oder nicht? |
Re: Bruchrechnung und das kürzen...
Zitat:
Delphi-Quellcode:
ICh hoffe du verstehst mein Problem :gruebel:
ganzezahl:= ???? div ???
|
Re: Bruchrechnung und das kürzen...
Zitat:
"Round" rundet Zahlen immer zu einer Ganzzahl, es gibt also eine Ganzzahl wieder. Und wenn ich das hier verwende:
Delphi-Quellcode:
wird eine Ganzahl zurückgeliefert... es kommt also zu keinem Problem.
Round(Ausgangsbruch.zahler div ggt(Ausgangsbruch.zahler,Ausgangsbruch.nenner));
Falls ich dich wirklich falsch verstanden habe, einfach nochmal genauer fragen :wink: |
Re: Bruchrechnung und das kürzen...
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich hab mal ein Bild angehangen wie ich es meine ( mit den Ausgabe werten) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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 by Thomas Breitkreuz