Autor Beitrag
SLickG
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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 :

ausblenden 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 user profile iconGausi: Delphi-Tags hinzugefügt.
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: Mo 24.10.05 18:30 
Hy,
ausblenden 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 >= 0Or 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 user profile iconraziel: Code- durch Delphi-Tags ersetzt
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 24.10.05 18:57 
Hallo,
oder so :wink:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Mo 24.10.05 20:49 
Hallo,
user profile iconIronwulf 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
ausblenden Delphi-Quelltext
1:
Until Trunc(Ergebnis) <> Ergebnis;					

damit würde eine Variable geändert: :wink:
ausblenden Delphi-Quelltext
1:
Ergebnis := Trunc(Ergebnis);					

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Ironwulf
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:
ausblenden 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 >= 0and (Pos(',', FloatToStr(Ergebnis)) = 0);

end;


dazu sollte man das hier vllt auch noch wissen :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 25.10.05 16:38 
Hallo,
user profile iconSLickG 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:
ausblenden Delphi-Quelltext
1:
Until (Ergebnis >= 0and (Trunc(Ergebnis) = Ergebnis);					

Sorry mein fehler, das mit <> und = :autsch:

user profile iconSLickG 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:
ausblenden Delphi-Quelltext
1:
Until (Ergebnis >= 0and (Ergebnis <= stufe) and (Trunc(Ergebnis) = Ergebnis);					

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Di 25.10.05 16:42 
user profile iconSLickG 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 733
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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...