Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Aufsummieren mehrerer Würfe eines Würfels


maxrus - Sa 08.10.11 18:06
Titel: Aufsummieren mehrerer Würfe eines Würfels
Hallo,

ich wollte ma ein Programm "Würfelsimulator" programmieren, wo es zwei Zahlen ausgegeben werden sollen, die Zahl der erfolgten Würfe und und die Summe der Augen.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.FormCreate(Sender: TObject);

begin
  randomize;

end;

procedure TForm1.Button1Click(Sender: TObject);
var Anzahl_der_Wurfe,Summe,k,w:integer;
begin
  Summe:=0;
  Anzahl_der_Wurfe:=0;
  k:=Anzahl_der_Wurfe+1;


  w:=Random(6)+1;
  label1.caption:='Wurf Nr'+'  '+inttostr(k)+'   :  ' + inttostr(w);

das Programm ist noch nicht zu ende geschrieben, aber ich wollte zwischendurch ausprobieren wie das programm denkt, und irgendwie zählt das Programm meine würfe nicht, muss ich dafür eine schleife machen????????

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Windows API verschoben am Sa 08.10.2011 um 18:31


Horschdware - Sa 08.10.11 18:41

Anzahl der Würfe ist bei dir in der ButtonClick-Methode deklariert. Sobald diese Methode mit der Verarbeitung fertig ist, get der Wert in der Variable verloren.

(Stichwort: Lebensdauer einer Variablen)

Für deine Zwecke müsste die Variable für die Anzahl der Würfe etwa als Element des Formulars oder gar als globale Variable deklariert werden.

Die Forensuche hilft hier gerne weiter :-)


platzwart - Sa 08.10.11 18:57

Naja, schau dir halt an, was du dem Computer sagst - deine Anweisung für den Fall, dass der Button gedrückt wird, lautet: "Setze die Variablen 'Summe' und 'Anzahl_der_Wurfe' auf den Wert '0'". Und nun fragst du, warum der Computer nicht hochzählt. Die Antwort kannst du dir nun selber geben ;)


maxrus - Sa 08.10.11 19:01

user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Anzahl der Würfe ist bei dir in der ButtonClick-Methode deklariert. Sobald diese Methode mit der Verarbeitung fertig ist, get der Wert in der Variable verloren.

(Stichwort: Lebensdauer einer Variablen)

Für deine Zwecke müsste die Variable für die Anzahl der Würfe etwa als Element des Formulars oder gar als globale Variable deklariert werden.

Die Forensuche hilft hier gerne weiter :-)

Anzahl der Würfe muss man echt global deklarieren, das hat jetzt geklappt, Danke

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconplatzwart hat folgendes geschrieben Zum zitierten Posting springen:
Naja, schau dir halt an, was du dem Computer sagst - deine Anweisung für den Fall, dass der Button gedrückt wird, lautet: "Setze die Variablen 'Summe' und 'Anzahl_der_Wurfe' auf den Wert '0'". Und nun fragst du, warum der Computer nicht hochzählt. Die Antwort kannst du dir nun selber geben ;)

bin noch Anfänger,ich weiss ja noch nicht so genau wie das Programm denkt, gibts vllt gute Seiten wo man Delphi Schritt für Schritt kennelernen kann, momentan lerne ich das mit Delphi for Kids, aber ich find das Buch ist nicht wirklich für Kids, die ersten paar Seiten vllt für Kids aber dann ... :(

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Fertiges Programm:

Delphi-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:
var
  Form1: TForm1;
  Summe, Anzahl_der_Wurfe:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);

begin
  randomize;
  Summe:=0;
  Anzahl_der_Wurfe:=0;


end;

procedure TForm1.Button1Click(Sender: TObject);
var w:integer;
begin
  Anzahl_der_Wurfe:=Anzahl_der_Wurfe+1;
  w:=Random(20)+1;
  Summe:=Summe+w;
  label1.caption:='Wurf Nr'+'  '+inttostr(Anzahl_der_Wurfe)+'   :  ' + inttostr(w);
  label2.caption:='Summe'+'   '+inttostr(Summe);

end;

// jetzt möchte ich z.B die Werte die ich raus gekriegt habe auf Null setzen, wie mach ich das???

procedure TForm1.Button2Click(Sender: TObject);
begin
?????
end;

end.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Horschdware - Sa 08.10.11 21:05

user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:
------->>>>>>>> jetzt möchte ich z.B die Werte die ich raus gekriegt habe auf Null setzen, wie mach ich das???

procedure TForm1.Button2Click(Sender: TObject);
begin
?????
end;

end.

Anzahl_Wuerfe = 0;

vielleicht?


maxrus - Sa 08.10.11 21:35

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

ne das geht leider nicht :(


Delete - Sa 08.10.11 22:10

user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:
ne das geht leider nicht :(

Umwerfende Fehlerbeschreibung. :roll: Was sagt der Compiler dazu? Und dann guck dir mal an, wie man eine Zuweisung macht und was ein Vergleich ist. Bitte auch bei Copy and paste den Kopf benutzen.


maxrus - Sa 08.10.11 22:33

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

es gibt kein Fehler, der setzt die Werte einfach nicht auf Null :(


Delete - Sa 08.10.11 22:40

Das muss eine Fehler geben! Das dürfte sich noch nicht mal übersetzen lassen, wenn es genauso in deinem Quelltext steht.


maxrus - Sa 08.10.11 23:20

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Das muss eine Fehler geben! Das dürfte sich noch nicht mal übersetzen lassen, wenn es genauso in deinem Quelltext steht.


Delphi-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:
var
  Form1: TForm1;
  Summe,w, Anzahl_der_Wurfe:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  randomize;
  Summe:=0;
  Anzahl_der_Wurfe:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
var w:integer;
begin
  Anzahl_der_Wurfe:=Anzahl_der_Wurfe+1;
  w:=Random(20)+1;
  Summe:=Summe+w;
  label1.caption:='Wurf Nr'+'  '+inttostr(Anzahl_der_Wurfe)+'   :  ' + inttostr(w);
  label2.caption:='Summe'+'   '+inttostr(Summe);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Anzahl_der_Wurfe:=0;
end;

end.

es gibt kein fehler, ich drücke button2 , und es passiert nichts

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Horschdware - Sa 08.10.11 23:53

Vergisst du etwa, den für "Anzahl_der_Wuerfe" neu gesetzen Wert auch anzuzeigen?


Delete - So 09.10.11 03:56

Dann vergleiche mal, was jetzt in Zeile 30 steht und was du vorher gepostet hast.


maxrus - So 09.10.11 10:59

user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Dann vergleiche mal, was jetzt in Zeile 30 steht und was du vorher gepostet hast.


---->>> Das war meine Frage, ich wollte mit Button2 alle werte auf Null setzen, mir wurde gesagt probiere es mit Anzahl_der_Wurfe:=0;

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button2Click(Sender: TObject);
begin
?????
end;

end.

----->>>> hier hab ich das gemacht!!!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Anzahl_der_Wurfe:=0;
end;

end.


---->>>> Verstehe nicht was du meinst!?!??!

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Vergisst du etwa, den für "Anzahl_der_Wuerfe" neu gesetzen Wert auch anzuzeigen?


aso ja, upssss....ma probieren

joa hat alles geklappt, Danke


platzwart - So 09.10.11 13:08

user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:

bin noch Anfänger,ich weiss ja noch nicht so genau wie das Programm denkt, gibts vllt gute Seiten wo man Delphi Schritt für Schritt kennelernen kann, momentan lerne ich das mit Delphi for Kids, aber ich find das Buch ist nicht wirklich für Kids, die ersten paar Seiten vllt für Kids aber dann ... :(


>>> http://www.delphi-library.de/viewtopic.php?t=37446&start=0&postorder=asc&highlight=crashkurs


der organist - So 09.10.11 13:45

user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:
------->>>>>>>> jetzt möchte ich z.B die Werte die ich raus gekriegt habe auf Null setzen, wie mach ich das???

procedure TForm1.Button2Click(Sender: TObject);
begin
?????
end;

end.

Anzahl_Wuerfe = 0;

vielleicht?



user profile iconmaxrus hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconLuckie hat folgendes geschrieben Zum zitierten Posting springen:
Dann vergleiche mal, was jetzt in Zeile 30 steht und was du vorher gepostet hast.


---->>> Das war meine Frage, ich wollte mit Button2 alle werte auf Null setzen, mir wurde gesagt probiere es mit Anzahl_der_Wurfe:=0;
procedure TForm1.Button2Click(Sender: TObject);
begin
?????
end;

end.


----->>>> hier hab ich das gemacht!!!
procedure TForm1.Button2Click(Sender: TObject);
begin
Anzahl_der_Wurfe:=0;
end;

end.



---->>>> Verstehe nicht was du meinst!?!??!


Der kleine aber feine Unterschied liegt bei dem Doppelpunkt ohne den es einen Fehler geben muss (!)...

Nebenbei vermute ich mal, dass du in deiner Button2.Click-Prozedur nicht nur die Anzahl der Würfe auf Null setzen solltest, sonder auch die Summe. Denn sonst könnte es dir passieren, dass du nach dem Reset (Button2.Click-Prozedur) einmal neu würfelst, aber schon eine Summe von 23498175872938478732498112400987123467827364 hast. ;)