Autor |
Beitrag |
SLickG
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 24.10.05 18:13
hallo,
wir sollen in der schule einen 'matheprofessor' programieren..
also ein program das aus 2 zufallszahlen eine rechenaufgabe erstellt die man lösen soll...
im prinzip funktioniert auch alles allerdings fehlen mir 1,2 extras^^
wie schaffe ich es das delphi keine aufgaben erstellt die ein negatives ergebnis haben und
wie kann ich angeben das delphi beim dividieren nur 2 zahlen nimmt die auch 'normal' durcheinander teilbar sind...also das keine kommazahl rauskommt..?
zur zeit sieht meine funktion so aus :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Button2Click(Sender: TObject); begin randomize; zahl1:=random(stufe)+1; zahl2:=random(stufe)+1; label1.caption:=FloatToStr(Zahl1); label2.caption:=FloatToStr(Zahl2); edit1.Text:=''; if RZ='plus' then Ergebnis:=zahl1+zahl2; if RZ='minus' then Ergebnis:=zahl1-zahl2; if RZ='mal' then Ergebnis:=zahl1*zahl2; if RZ='durch' then Ergebnis:=zahl1/zahl2; if RZ2=false then edit1.text:='Bitte Rechenart wählen!'; end;
ich dachte mir das erste problem könnte man durch eine Fehler variable vom typ boolean beheben.. also :
if Ergebnis>0 then Fehler:=true; if Fehler=true Zahl1:=random(stufe)+1; if Fehler=true Zahl2:=random(stufe)+1; |
aber irgendwie will das trotzdem nicht  ...
naja würde mich über jede hilfe freuen das muss doch zu machen sein und ich verzweifle grade...
mfg SlickG
Moderiert von Gausi: Delphi-Tags hinzugefügt.
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Mo 24.10.05 18:30
Hy,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| if RZ2=false then begin edit1.text:='Bitte Rechenart wählen!'; exit; end;
Repeat zahl1:=random(stufe)+1; zahl2:=random(stufe)+1; if RZ='plus' then Ergebnis:=zahl1+zahl2; if RZ='minus' then Ergebnis:=zahl1-zahl2; if RZ='mal' then Ergebnis:=zahl1*zahl2; if RZ='durch' then Ergebnis:=zahl1/zahl2; Until (Ergebnis >= 0) Or Pos(',', FloatToStr(Ergenibs)) = 0; |
So müsste eigentlich Funktionieren, das Pos sucht im Ergebnis ein Komma wenn eins enthalten ist gibt es den Wert zurück von der Stelle an dem sich das Komma befindet (z.b. 15,3 gibt eine 3 zurück) wenn es eine null zurück gibt dann ist kein komma vorhanden...
Moderiert von raziel: Code- durch Delphi-Tags ersetzt
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mo 24.10.05 18:57
Hallo,
oder so
Delphi-Quelltext 1:
| Until Trunc(Ergebnis) <> Ergebnis; |
//Edit: als Ersatz für Pos(',', FloatToStr(Ergebnis)) = 0
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Mo 24.10.05 19:03
das find ich aber nich so gut, da ja der benutzer die aufgaben nachrechnen soll und wenn man dann die kommas wegschneidet kommt ja wieder was andres raus und führt somit bestimmt zur verwirrung bei dem ders rechnet
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mo 24.10.05 20:49
Hallo,
Ironwulf hat folgendes geschrieben: | das find ich aber nich so gut, da ja der benutzer die aufgaben nachrechnen soll und wenn man dann die kommas wegschneidet kommt ja wieder was andres raus und führt somit bestimmt zur verwirrung bei dem ders rechnet |
wo schneide ich denn was ab?
hier wird nur ein Vergleich angestellt, ich verändere keine Variable
Delphi-Quelltext 1:
| Until Trunc(Ergebnis) <> Ergebnis; |
damit würde eine Variable geändert:
Delphi-Quelltext 1:
| Ergebnis := Trunc(Ergebnis); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Mo 24.10.05 21:12
hrmpf das kommt davon wenn man nur eine zeile mal flüchtig überfliegt und eigentlich nur das trunc() dabei liest...
|
|
SLickG 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 25.10.05 15:46
danke für die hilfe...
also der erste typ funktioniert bei mir wunderbar das mit dem trunc leider nicht aber auch egal hauptsache aufgabe gelöst...
mhmm..so jetz hab ich aber noch eine frage:
da man in der ersten klassse ja z.b.: nur die zahlen von 1-20 beherscht darf das ergebnis natürlich nicht größer sein...
was allerdings bei einer multiplikation von 9*9 nicht mehr stimmen würde...
wie kann man also das noch für jede klasse einschränken?
aktueller quellcode:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| begin if RZ2=false then edit1.text:='Bitte Rechenart wählen!';
Repeat randomize; zahl1:=random(stufe)+1; zahl2:=random(stufe)+1; label1.caption:=FloatToStr(Zahl1); label2.caption:=FloatToStr(Zahl2); edit1.Text:=''; if RZ='plus' then Ergebnis:=zahl1+zahl2; if RZ='minus' then Ergebnis:=zahl1-zahl2; if RZ='mal' then Ergebnis:=zahl1*zahl2; if RZ='durch' then Ergebnis:=zahl1/zahl2; Until (Ergebnis >= 0) and (Pos(',', FloatToStr(Ergebnis)) = 0);
end; |
dazu sollte man das hier vllt auch noch wissen :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.ScrollBar1Change(Sender: TObject); begin if scrollbar1.position=1 then stufe:=20; if scrollbar1.position=2 then stufe:=100; if scrollbar1.position=3 then stufe:=1000; if scrollbar1.position=4 then stufe:=1000000; if scrollbar1.position=1 then label7.caption:='Klasse 1'; if scrollbar1.position=2 then label7.caption:='Klasse 2'; if scrollbar1.position=3 then label7.caption:='Klasse 3'; if scrollbar1.position=4 then label7.caption:='Klasse 4'; end; |
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Di 25.10.05 16:38
Hallo,
SLickG hat folgendes geschrieben: | danke für die hilfe...
also der erste typ funktioniert bei mir wunderbar das mit dem trunc leider nicht |
wenn Du es so in deine Bedingung einbaust funktioniert es:
Delphi-Quelltext 1:
| Until (Ergebnis >= 0) and (Trunc(Ergebnis) = Ergebnis); |
Sorry mein fehler, das mit <> und =
SLickG hat folgendes geschrieben: | ...ersten klassse ja z.b.: nur die zahlen von 1-20 beherscht darf das ergebnis natürlich nicht größer sein... |
halt die Bedingung erweitern:
Delphi-Quelltext 1:
| Until (Ergebnis >= 0) and (Ergebnis <= stufe) and (Trunc(Ergebnis) = Ergebnis); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
MSCH
      
Beiträge: 1448
Erhaltene Danke: 3
W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
|
Verfasst: Di 25.10.05 16:42
SLickG hat folgendes geschrieben: | so jetz hab ich aber noch eine frage:
da man in der ersten klassse ja z.b.: nur die zahlen von 1-20 beherscht darf das ergebnis natürlich nicht größer sein...?
|
hmmm, kleine Ironie am Ende - passt zwar nicht zum Thema,
aber jetzt versteh ich die Pisa-Studien.
ohne jetzt deinen Quelltext zu studieren, eine Einschränkung auf das Ergebnis
ist irgentwie sinnlos, da, nicht nur 9*9>20 sondern auch 19+2, 3+10+10 u.s.w.
du müsstest die Einschränkungen in der Eingabe bereits einbauen und via Zwischenergebnisse das Ergebnis abfragen>20.
grez
msch
_________________ ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
|
|
Ironwulf
      
Beiträge: 733
Erhaltene Danke: 2
|
Verfasst: Di 25.10.05 16:45
Ja ne das passt schon so, es wird ja das ergebnis überprüft ob das größer is...
@Lannes ich find da hätt er auch selbst drauf komm könn, denn im grunde hat er ja schon alles gehabt was er dafür braucht, und mal 5 min den code anguggen is ja nich zu viel verlangt
|
|
SLickG 
Hält's aus hier
Beiträge: 3
|
Verfasst: Di 25.10.05 17:01
okay da hätte ich echt selber drauf kommen können hab das aber echt nicht gesehen...
naja danke trotzdem...
|
|