Entwickler-Ecke

Sonstiges (Delphi) - Keine negativen oder komma ergebnisse...aber wie?


SLickG - Mo 24.10.05 18:13
Titel: Keine negativen oder komma ergebnisse...aber wie?
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 user profile iconGausi: Delphi-Tags hinzugefügt.


Ironwulf - 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 >= 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 - Mo 24.10.05 18:57

Hallo,
oder so :wink:

Delphi-Quelltext
1:
Until Trunc(Ergebnis) <> Ergebnis;                    


//Edit: als Ersatz für Pos(',', FloatToStr(Ergebnis)) = 0


Ironwulf - 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 - 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

Delphi-Quelltext
1:
Until Trunc(Ergebnis) <> Ergebnis;                    

damit würde eine Variable geändert: :wink:

Delphi-Quelltext
1:
Ergebnis := Trunc(Ergebnis);                    


Ironwulf - 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 - 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 >= 0and (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 - 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:

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:

Delphi-Quelltext
1:
Until (Ergebnis >= 0and (Ergebnis <= stufe) and (Trunc(Ergebnis) = Ergebnis);                    


MSCH - 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


Ironwulf - 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 - 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...