![]() |
Delphi-Version: 5
Bruchrechenprogramm mit Selbsteingabe
Hallo,
ich habe mal wieder ein Problem. Ich möchte ein Bruchrechenprogramm mit Selbsteingabe schreiben. Habe schon die Randomize-Ausgabe von Brüchen. Nun möchte ich, das man die Lösung selbst eingeben kann und das Programm dann nur noch überprüft. Zerbreche mir seit Tagen den Kopf darüber, wie das gehen soll. Also wende ich mich an euch. Wie geht das? Gruß und im Hoffen auf eine Antwort timmy19 PS: Hier mal mein bisheriger Quelltext:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,f, gggt : integer ; begin a:= IntEdit1.Value ; b:= IntEdit2.Value ; c:=IntEdit3.value ; d:= IntEdit4.Value ; e:= IntEdit5.Value ; f:= IntEdit6.Value ; randomize ; a:=random(10) ; IntEdit1.Value:= a ; randomize; b:= random(10) ; IntEdit2.Value:= b ; randomize; c:= random(6) ; IntEdit3.Value:= c ; randomize; d:= random(10) ; IntEdit4.Value:= d ; ggT(c,d, gggT) ; IntEdit6.Value:= gggt ; IntEdit5.Value := IntEdit1.Value + IntEdit2.Value; end; procedure TForm1.ggT(c,d:integer; var ggTeiler: integer) ; var merk :integer; begin repeat merk:= c mod d ; c:= d ; d:=merk until d= 0 ; ggTeiler:=c end; {of ggT} end. |
AW: Bruchrechenprogramm mit Selbsteingabe
Hab ich jetzt nicht ganz verstanden. Du gibst die Rechenaufgabe vor, der Benutzer gibt seine Lösung ein, und Du überprüfst die dann auf richtig oder falsch? Übrigens sollte man Randomize einmalig im Programm aufrufen.
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Genau! Kannst du mir da weiterhelfen? OK, ich lösch die anderen randomize! |
AW: Bruchrechenprogramm mit Selbsteingabe
Definiere die beiden Zahlen als Felder Deines Formulars und stelle sie in der Aufgabe dar. Bei der Lösung errechenst Du das Ergebnis und vergleichst mit der Eingabe... fertig.
Delphi-Quellcode:
type
TDeinForm = class(TForm) private Zahl1, Zahl2: integer; ... end; procedure TDeinForm.NeueAufgabe; begin Zahl1 := Random(...); Zahl2 := Random(...); EditZahl1.Text := IntToStr(Zahl1); EditZahl2.Text := IntToStr(Zahl2); end; procedure TDeinForm.ButtonLoesungClick(Sender: TObject); var Ergebnis: integer; begin Ergebnis := Berechnung_mit_Zahl1_und_Zahl2; if IntToStr(Ergebnis) = EditLoesung.Text then Applaus; end; |
AW: Bruchrechenprogramm mit Selbsteingabe
OK, soweit bin ich jetzt. Nun:
Wie überprüfe ich dann das Ergebnis eines Bruchs? Weil der Besteht ja aus 2 Editfeldern... |
AW: Bruchrechenprogramm mit Selbsteingabe
Ich kann Dir nicht folgen. Du hast doch beide Zahlen selbst zugewiesen, da musst Du doch nur das Ergebnis errechnen und mit der Eingabe vergleichen.
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Delphi-Quellcode:
In Zeile 74, "ggT(c,d,gggT)" zeigt er mir noch die Fehler "Operator oder Semikolon fehlt" und "Anweisung erforderlich, aber Ausdruck vom Typ 'Integer" gefunden an.
procedure TForm1.Button1Click(Sender: TObject);
begin randomize; Zahl1:= random(10) ; Zahl2:= random(10) ; Zahl3:=random(6) ; Zahl4:=random(6) ; EditZahl1.Text:= IntToStr(Zahl1) ; EditZahl2.Text:= IntToStr(Zahl2) ; EditZahl3.Text:= IntToStr(Zahl3) ; EditZahl4.Text:= IntToStr(Zahl4) ; end; procedure TForm1.Button2Click(Sender: TObject); var Ergebnis, ggT :integer ; begin Ergebnis:= Zahl1 + Zahl2 ; ggT(c,d, gggT) ; EditZahl6.Text:= gggt ; If IntToStr(Ergebnis) = EditZahl5.Text and InttoStr(ggT) = EditZahl6.Text then Showmessage('Sehr gut gemacht, weiter so!!!') ; end; procedure TForm1.ggT(c,d:integer; var ggTeiler: integer); var merk: integer; begin repeat merk:= c mod d ; c:= d ; d:=merk until d= 0 ; ggTeiler:=c end; {of ggT} end. Und wie siehts aus mit dem Vergleich der Ergbnisse, geht das so? |
AW: Bruchrechenprogramm mit Selbsteingabe
Delphi-Quellcode:
Bei mehreren Vergleichen mit Operatoren musst Du die Einzelvergleiche in Klammern setzen.
If (IntToStr(Ergebnis) = EditZahl5.Text) and (InttoStr(ggT) = EditZahl6.Text) then
[edit] Schlecht ausgedrückt. Besser: bei Verknüpfung mehrerer Bedingungen musst Du mindestens diejenigen, die Vergleichsoperatoren verwenden, in Klammern setzen.
Delphi-Quellcode:
[/edit]
if Bedingung1 and Bedingung2 then //geht
if Wert = 1 then //geht if Wert1 = 1 and Wert 2 = 42 then //geht nicht if (Wert1 = 1) and (Wert2 = 42) then //geht if Bedingung1 and (Wert1 = 100) then //geht if (Bedingung1) and (Wert1 = 100) then //geht |
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Danke. Trotzdem werden nun noch 3 Fehler angezeigt, welche wären: -Weiterhin "Operator oder Semikolon fehlt" und "Anweisung erforderlich,aber Ausdruck vom Typ Integer gefunden" bei "ggTeiler(c,d,gggT)" - "Nicht genügend wirkliche Parameter" beim Vergleich. danke, das du mir so hilfst! :) |
AW: Bruchrechenprogramm mit Selbsteingabe
Delphi-Quellcode:
ist eine Funktion oder Prozedur?
ggT(c,d, gggT) ;
Grüße Klaus |
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
|
AW: Bruchrechenprogramm mit Selbsteingabe
Delphi-Quellcode:
ggT heißt Deine Prozedur, gggT der damit ermittelte Wert, daher musst Du Letzteres übergeben.
If (IntToStr(Ergebnis) = EditZahl5.Text) and (InttoStr(gggT) = EditZahl6.Text) then
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Trotzdem zeigt er mir noch den "Anweisung erforderlich, aber "Integer" gefunden" -Fehler an. Und der "Operator oder Semikolon fehlt"-Fehler bei "ggTeiler(c,d,gggT)" auch. |
AW: Bruchrechenprogramm mit Selbsteingabe
procedure TForm1.Button2Click(Sender: TObject);
var Ergebnis, ggT :integer ; procedure TForm1.ggT(c,d:integer; var ggTeiler: integer); |
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Beide Probleme weiterhin da. :( |
AW: Bruchrechenprogramm mit Selbsteingabe
das ist zumindest eines der Problem die Du zu lösen hast ....
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
|
AW: Bruchrechenprogramm mit Selbsteingabe
Wie sieht denn der aktuelle Quälcode aus?
|
AW: Bruchrechenprogramm mit Selbsteingabe
Delphi-Quellcode:
So sieht er aus. Bei "ggT(c,d,gggT)"zeigt er mir noch die zwei schon bekannten Fehler an!
procedure TForm1.Button1Click(Sender: TObject);
begin randomize; Zahl1:= random(10) ; Zahl2:= random(10) ; Zahl3:=random(6) ; Zahl4:=random(6) ; EditZahl1.Text:= IntToStr(Zahl1) ; EditZahl2.Text:= IntToStr(Zahl2) ; EditZahl3.Text:= IntToStr(Zahl3) ; EditZahl4.Text:= IntToStr(Zahl4) ; end; procedure TForm1.Button2Click(Sender: TObject); var Ergebnis,c,d,ggT, gggT,ggTeiler :integer ; begin Ergebnis:= Zahl1 + Zahl2 ; ggT(c,d, gggT) ; If (IntToStr(Ergebnis) = EditZahl5.Text) and (InttoStr(gggT) = EditZahl6.Text) then Showmessage('Sehr gut gemacht, weiter so!!!') ; end; procedure TForm1.ggT(c,d:integer; var ggTeiler: integer); var merk: integer; begin repeat merk:= c mod d ; c:= d ; d:=merk until d= 0 ; ggTeiler:=c end; {of ggT} end. Also: -Operator oder Semikolon fehlt -Anweisung erforderlich, aber Ausdruck vom Typ 'Integer' gefunden Kann mir da jemand helfen? |
AW: Bruchrechenprogramm mit Selbsteingabe
wenn es nicht schon gesagt wurde..
Du solltest keine Variable und Methode in einem Gültigkeitsbereich gleich benennen. Grüße Klaus |
AW: Bruchrechenprogramm mit Selbsteingabe
Ich habe lange gebraucht, um das zu sehen, aber Du hast eine Variable namens ggT deklariert, die Du gar nicht benutzt. Außerdem werden c und d nicht initialisiert, daher kannst Du auch auf sie verzichten und gleich Zahl1 und Zahl2 übergeben.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Ergebnis, gggT:integer ; begin Ergebnis:= Zahl1 + Zahl2 ; ggT(Zahl1, Zahl2, gggT) ; If (IntToStr(Ergebnis) = EditZahl5.Text) and (InttoStr(gggT) = EditZahl6.Text) then Showmessage('Sehr gut gemacht, weiter so!!!') ; end; |
AW: Bruchrechenprogramm mit Selbsteingabe
Jetzt läuft das Programm zwar, aber es wird mir nicht die Rückmeldung gegeben ob das Ergebnis richtig war. Was ist da jetzt wieder falsch?
Und wie stellt man Randomize so ein, das es z.B. nur die Zahlen 2-10 ausgibt? |
AW: Bruchrechenprogramm mit Selbsteingabe
Du meinst, die beiden Vergleiche getrennt auswerten?
[edit]
Delphi-Quellcode:
Und zum Randomize: nimm doch Random(9) und addiere 2 dazu ;) [/edit]
if Bedingung1 then
begin if Bedingung2 then //beide Bedingungen treffen zu else //nur Bedingung1 ist richtig end else if Bedingung2 then //nur Bedingung2 trifft zu else //komplett falsch; |
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Zudem gibt er mir nicht gerade gar keine Showmessage aus auch wenn das Ergebnis richtig ist... |
AW: Bruchrechenprogramm mit Selbsteingabe
Siehe mein Edit im letzten Post.
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
|
AW: Bruchrechenprogramm mit Selbsteingabe
|
AW: Bruchrechenprogramm mit Selbsteingabe
Und nochmal anders formatiert:
Delphi-Quellcode:
if Bedingung1 then
//Bedingung1 trifft schonmal zu begin if Bedingung2 then //beide Bedingungen treffen zu else //nur Bedingung1 ist richtig end else //Bedingung1 triff nicht zu begin if Bedingung2 then //nur Bedingung2 trifft zu else //komplett falsch; end; |
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
|
AW: Bruchrechenprogramm mit Selbsteingabe
Woher soll ich das wissen, ich weiß doch nicht, was Du geschrieben hast?
|
AW: Bruchrechenprogramm mit Selbsteingabe
Zitat:
Delphi-Quellcode:
if IntToStr(Ergebnis) = EditZahl5.Text then
begin if InttoStr(gggT) = EditZahl6.Text then Showmessage('Sehr gut gemacht, weiter so!!!') else showmessage('Das war nicht richtig, versuch es noch einmal!') ; end else showmessage('Fast richtig, probier es noch einmal!') ; begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Der Nenner ist richtig, nur der Zähler ist falsch!') else showmessage ('Das war nicht richtig, versuch es noch einmal!') ; end; |
AW: Bruchrechenprogramm mit Selbsteingabe
Nee, nicht ganz. Nochmal:
Delphi-Quellcode:
if Bedingung1 then
begin if Bedingung2 then //beides richtig else //nur Bedingung1 richtig, Bedingung2 falsch end else begin if Bedingung2 then //Bedingung1 falsch, Bedingung2 richtig else //komplett falsch end; |
AW: Bruchrechenprogramm mit Selbsteingabe
Zumindest gibt er mir jetzt nur eine showmessage aus. Aber die "komplett richtig" showmessage will er mir immer noch nicht ausgeben. :(
Delphi-Quellcode:
if IntToStr(Ergebnis) = EditZahl5.Text then
begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Sehr gut gemacht!') else showmessage('Das ist nicht ganz richtig, versuch es noch einmal') end else begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Das ist nicht ganz ricthig, versuch es noch einmal') else showmessage('Das ist leider falsch, versuch es doch noch einmal') end; end; |
AW: Bruchrechenprogramm mit Selbsteingabe
Dann musst Du einmal die Werte im Debugger vergleichen, logisch ist das zumindest korrekt so.
|
AW: Bruchrechenprogramm mit Selbsteingabe
Jetzt komm ich nochmal mit dem Programm.
Möchte das Programm erweitern mit Subtraktion und Muliplikation. Habe das MainMenu auch schon erstellt. Aber wie mach ich es jetzt, das dich die Vorzeichen ändern und man dann das jeweilige rechnen kann, wenn ich auf den Teil im MainMenu drücke. Habe es bisher so:
Delphi-Quellcode:
Ist wahrscheinlich viel zu aufwendig gemacht, vllt. könnt ihr mir ja weiterhelfen...
procedure TForm1.Addition1Click(Sender: TObject);
begin Label5.Enabled:= true ; Label6.Enabled:= false; Label7.Enabled:= false; procedure TForm1.Button1Click(Sender: TObject); begin randomize; Zahl1:= random(9)+1 ; Zahl2:= random(9)+1 ; Zahl3:=random(4) +2 ; Zahl4:=random(4) +2 ; EditZahl1.Text:= IntToStr(Zahl1) ; EditZahl2.Text:= IntToStr(Zahl2) ; EditZahl3.Text:= IntToStr(Zahl3) ; EditZahl4.Text:= IntToStr(Zahl4) ; end; procedure TForm1.Button2Click(Sender: TObject); var Ergebnis, gggT:integer ; begin Ergebnis:= Zahl1 + Zahl2 ; ggT(Zahl1, Zahl2, gggT) ; if IntToStr(Ergebnis) = EditZahl5.Text then begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Sehr gut gemacht!') else showmessage('Das ist nicht ganz richtig, versuch es noch einmal!') end else begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Das ist nicht ganz richtig, versuch es noch einmal!') else showmessage('Das ist leider falsch, versuch es doch noch einmal!') end; end; procedure TForm1.Subtraktion1Click(Sender: TObject); begin Label5.Enabled:= false; Label6.Enabled:= True ; Label7.Enabled:= false; procedure TForm1.Button1Click(Sender: TObject); begin randomize; Zahl1:= random(9)+1 ; Zahl2:= random(9)+1 ; Zahl3:=random(4) +2 ; Zahl4:=random(4) +2 ; EditZahl1.Text:= IntToStr(Zahl1) ; EditZahl2.Text:= IntToStr(Zahl2) ; EditZahl3.Text:= IntToStr(Zahl3) ; EditZahl4.Text:= IntToStr(Zahl4) ; end; procedure TForm1.Button2Click(Sender: TObject); var Ergebnis, gggT:integer ; begin Ergebnis:= Zahl1 + Zahl2 ; ggT(Zahl1, Zahl2, gggT) ; if IntToStr(Ergebnis) = EditZahl5.Text then begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Sehr gut gemacht!') else showmessage('Das ist nicht ganz richtig, versuch es noch einmal!') end else begin if InttoStr(gggT) = EditZahl6.Text then showmessage('Das ist nicht ganz richtig, versuch es noch einmal!') else showmessage('Das ist leider falsch, versuch es doch noch einmal!') end; procedure TForm1.ggT(c,d:integer; var ggTeiler: integer); var merk: integer; begin repeat merk:= c mod d ; c:= d ; d:=merk until d= 0 ; ggTeiler:=c end; {of ggT} end; end. |
AW: Bruchrechenprogramm mit Selbsteingabe
![]() Zitat:
Zitat:
Insgesammt ist vorallem die Codeeinrückung grauenhaft. Es würde dann sogar auffallen, daß da so Einiges nicht stimmt. (z.B. mehrere fehlende ENDs) Laut deiner Beschreibung klingt es so, als wenn das Ganze erstmal funktioniert, bzw sich winigstens kompilieren ließe. Von einer Fehlerbeschreibung ist nichts zu finden oder zu erahnen. (aber auf den ersten Blick müßte da sofort der Compiler aufgeben) Vorallem daß einige Dinge doppelt vorhanden sind (z.B. die komplette Button1-Klickmethode), das kann nicht ganz richtig sein. Zitat:
Delphi-Quellcode:
, denn du willst ja eigentlich den Wert der Zahl vergleichen und nicht die Darstellung der Zahl.
if gggT = StrToInt(EditZahl6.Text) then
|
AW: Bruchrechenprogramm mit Selbsteingabe
der link geht vermutlich über die Anfrage hinaus , trotzdem .....
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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