Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Viele Bedingungen mit Checkboxes und Randomize


dunkles_etwas - Mo 23.10.06 22:28
Titel: Viele Bedingungen mit Checkboxes und Randomize
hallo zusammen,
ich möchte bei einem rechenprogramm per checkbox aktivieren könenen, welche grundrechenarten bei der zufallsgenerierten aufgabenstellung verwendet werden



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm1.NeueAufgabeButtonClick(Sender: TObject);
begin

ErgebnisLabel.visible:=false;

randomize;
Zahl1:=random(20)+1;
Zahl2:=random(20)+1;

//das wäre nun für eine stinknormale aufgabenstellung,
  bei der alle 4 grundrechenarten verwendet werden

randomize;
Vorzeichen:=random(4)+1;

LabelZahl1.caption:=IntToStr(a);
LAbelZahl2.caption:=IntToStr(b);



if Vorzeichen=1 then VorzeichenLabel.caption:='+';
if Vorzeichen=2 then VorzeichenLLabel.caption:='-';
if Vorzeichen=3 then VorzeichenLLabel.caption:='*';
if Vorzeichen=4 then VorzeichenLLabel.caption:='/';

//"Zahl1" und "Zahl2" werden 
  dann eben zusammen mit dem "Vorzeichen"
  mit einem klick auf den lösungs-button 
  ausgerechnet und in ein ErgebnisLabel eingetragen

procedure TForm1.loesungClick(Sender: TObject);
begin
ErgebnisLabel.visible:=true;
if e=1 then
ErgebnisLabel.caption:=intToStr(a+b);
if e=2 then
ErgebnisLabel.caption:=intToStr(a-b);
if e=3 then
ErgebnisLabel.caption:=intToStr(a*b);
if e=4 then
ErgebnisLabel.caption:=FloatToStr(a/b);

end;
 
end;


ich möchte jetzt allerdings, dass der benutzer selbst auswählen kann, welche rechenarten er benutzen möchte.
also müsste ich für jede kombination der 4 checkboxes dann einen neuen randomize-befehl schreiben und das wird sehr sehr viel.
mit "if-then" bedingungen wird das absolut nichts, denke ich.
wie bekomme ich es dennoch hin, ohne mich totzutippen.
habe in der hilfe in delphi zu "case" nachgelesen, nur bringt mich das nicht besonders weiter...
wer weiß rat oder kann erläutern ? :)

gruß


Narses - Mo 23.10.06 23:05

Moin und :welcome: im Forum!

2 Sachen zu Anfang:
a) nimm doch bitte die Delphi-Tags für den Code, dann haben wir auch das Syntax-Highlighting. ;)
b) das ist kein "Vorzeichen", sondern ein "Rechenzeichen" oder "Operator", von dem du da sprichst. :D

user profile icondunkles_etwas hat folgendes geschrieben:
ich möchte bei einem rechenprogramm per checkbox aktivieren könenen, welche grundrechenarten bei der zufallsgenerierten aufgabenstellung verwendet werden
[...]

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
Rechenzeichen := Random(4)+1;
[...]
if (Rechenzeichen = 1then VorzeichenLabel.Caption := '+';
if (Rechenzeichen = 2then VorzeichenLabel.Caption:='-';
if (Rechenzeichen = 3then VorzeichenLabel.Caption:='*';
if (Rechenzeichen = 4then VorzeichenLabel.Caption:='/';

ich möchte jetzt allerdings, dass der benutzer selbst auswählen kann, welche rechenarten er benutzen möchte.
also müsste ich für jede kombination der 4 checkboxes dann einen neuen randomize-befehl schreiben

Wenn ich das richtig sehe, dann gibt es da keine Kombinationen, sondern nur eine Auswahl, oder? ;) Du bestimmst zwei Zahlen, einen Operator (aus einer Menge von 4) und machst daraus eine Aufgabe. Wenn du jetzt nicht alle Operatoren zulassen willst, dann mach eine Schleife drum und verlasse diese erst, wenn du einen "gültigen" Operator "gezogen" hast. ;)

Ach ja, und das case benutzt man z.B. so:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
case Rechenzeichen of
  1: VorzeichenLabel.Caption := '+';
  2: VorzeichenLabel.Caption := '-';
  3: VorzeichenLabel.Caption := '*';
  4: VorzeichenLabel.Caption := '/';
end;

cu
Narses


dunkles_etwas - Mo 23.10.06 23:29
Titel: danke!
hallo, danke erstmal :)

a) jep, hab auf die schnelle nur CODE gesehn, sorry ;)
b) auch das hab ich verplant. mathe ist nicht meine stärke und es ist so spät...*tütütü*

ansonsten case bringts ja echt den quelltext zu komprimieren, hab dauernd mit den "if's" gekämpft.
nunja, ansonsten sollte mich noch etwas mehr auskennen. hab noch nie schleifen verwendet *blöd*
ich meld mich dann sobald ich weiter weiss und frag dann noch etwas konkreter.
danke !