Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Taschenrechner mit Random-Rechenoperation


Delete - Sa 11.07.09 17:51
Titel: Taschenrechner mit Random-Rechenoperation
Hallo Leute,

ich bin gerade dabei einen Taschenrechner zu programmieren, der zusätzlich zu den üblichen "+,-,*,/" auch noch eine zufällig generierte Rechenoperation ausführen soll.
Dazu habe ich einen array gebastelt, in dem alle oben genannten Operationen drin stehen.

Weiter geht's dann damit:

Delphi-Quelltext
1:
2:
3:
4:
5:
zahl1 := edit1.Text;
zahl2 := edit2.Text;
rechnung := strtofloaT(zahl1+rechenoperationen[random(3)]+zahl2);

label1.Caption := floattostr(rechnung);


Allerdings gibt's da ne Inkompatibilitäts-Fehlermeldung, wegen Real und String.

Meine Frage nun: Gibt es etwas wie die eval-Funktion in PHP, die dafür sorgt, dass "rechnung" zu einem richtigen Float-Wert wird, also dass das Teil funktioniert?

Gr33tZ
Rn


jakobwenzel - Sa 11.07.09 17:55

Nein, sowas wie eval gibts nicht, da Delphi eine kompilierte Sprache ist.
Warum lässt du dir nicht einfach eine zufällige Zahl zwischen 0 und 3 erzeugen und machst dann je nach Zahl eine Rechenoperation?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
operation:=random(4);
if operation = 0 then
  {Addieren}
else if operation = 1 then
  {Subtrahieren}
[...]

Oder besser:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
operation:=random(4);
case operation of
  0{Addieren};
  1{Subtrahieren};
  2: ...
  3: ...
end;


Delete - Sa 11.07.09 18:11

Ja mittlerweile mache ich das ja auch so ähnlich.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
var
 zufallszahl : integer;
begin
randomize;

zufallszahl := random(3);

if zufallszahl = 0 then
button2click(self);
...


Wozu ist eingentlich dieser "Sender" da? Ich hab da jetzt nur "self" reingeschrieben, weil es funktioniert hat ^^


jakobwenzel - Sa 11.07.09 18:20

Man kann mehreren Buttons den gleichen Ereignisbehandler zuordnen und dann mittels Sender unterscheiden welcher gedrückt wurde.

Randomize sollte nur einmal beim Programmstart, zB in FormCreate aufgerufen werden und nicht bei jeder Zufallszahl.


Delete - Sa 11.07.09 18:43

Okay. Dann hab ich da ja genau richtig gedacht, also was den Sender angeht ^^

Danke für die Info ^^


Jakob_Ullmann - Sa 11.07.09 18:54

user profile iconjakobwenzel hat folgendes geschrieben Zum zitierten Posting springen:
Nein, sowas wie eval gibts nicht, da Delphi eine kompilierte Sprache ist.


Was hat das eine damit zu tun? Eine Interpreter muss nicht zwangsläufig einen Parser bereistellen, und ein Compiler kann dies durchaus aufgrund des geringen Arbeitsaufwands tun.