Autor Beitrag
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.07.09 18:51 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 11.07.09 18: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?

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

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

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.07.09 19:11 
Ja mittlerweile mache ich das ja auch so ähnlich.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Sa 11.07.09 19: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.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
regsnerven
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 11.07.09 19:43 
Okay. Dann hab ich da ja genau richtig gedacht, also was den Sender angeht ^^

Danke für die Info ^^
Jakob_Ullmann
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1747
Erhaltene Danke: 15

Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
BeitragVerfasst: Sa 11.07.09 19: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.