Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Würfelsimulator
Kiwibanana - Fr 29.10.10 19:00
Titel: Würfelsimulator
Hallo,
wir müssen in der Schule ein Programm programmieren, welches die Würfe berechnet, die man braucht, dass jede Zahl beim Werfen einmal vorgekomen ist.
Wir haben zusammen mit dem Lehrer ein Struktugram ausgearbeitet, ich habe den Code eingefügt, doch bekomme beim Until immer Fehlermeldungen.
Bitte um Hilfe!
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: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79:
| unit wuerfel_u;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) bt_ende: TButton; bt_simulation: TButton; procedure bt_endeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure bt_simulationClick(Sender: TObject); private public end;
var Form1: TForm1; eins,zwei,drei,vier,fuenf,sechs : boolean; w,z,anzahl, gesamtanzahl, i : longint;
implementation
{$R *.dfm}
procedure TForm1.bt_endeClick(Sender: TObject); begin close end;
procedure TForm1.FormCreate(Sender: TObject); begin randomize; end;
procedure TForm1.bt_simulationClick(Sender: TObject); begin anzahl := strtoint(inputbox('Wie oft?','Eingabe','')); gesamtanzahl := 0; for i := 1 to anzahl do z := 0; eins := false; zwei := false; drei := false; vier := false; fuenf := false; sechs := false; repeat w := random(6) + 1; z := z+1 ; inc(z);
case w of 1 : eins := true; 2 : zwei := true; 3 : drei := true; 4 : vier := true; 5 : fuenf:= true; 6 : sechs:= true;
Until (eins = true) and (zwei = true) and (drei = true) and (vier = true) and (fuenf = true) and (sechs = true);
gesamtanzahl := gesamtanzahl + z; durchschnitt := gesamtanzahl/anzahl ; showmessage(floattostr(durchschnitt));
end;
end. |
Danke !!
Gausi - Fr 29.10.10 19:06
Hallo und :welcome: in der Entwickler-Ecke,
Eine Case-Of-Struktur muss mit einem End abgeschlossen werden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| case w of 1 : eins := true; 2 : zwei := true; 3 : drei := true; 4 : vier := true; 5 : fuenf:= true; 6 : sechs:= true; end; |
platzwart - Fr 29.10.10 19:23
Btw:
Delphi-Quelltext
1:
| Until (eins and zwei and drei and vier and fuenf and sechs); |
Gausi - Fr 29.10.10 19:34
Da ist auch noch mehr drin. z.B.
Doppelt gemoppelt hält zwar besser, ist aber nicht immer das, was man will. ;-)
Aber in der Frage ging es ja nur um den Fehler beim Until.
Bergmann89 - Fr 29.10.10 19:37
Hey,
aus dem Einrücken des Codes schließe ich, das du hier alles in der Schleife ausführen willst. Also musst du dort auch einen
begin-
end-Block setzen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.bt_simulationClick(Sender: TObject); begin anzahl := strtoint(inputbox('Wie oft?','Eingabe','')); gesamtanzahl := 0; for i := 1 to anzahl do begin z := 0; eins := false; zwei := false; end; |
MfG Bergmann.
ps: wie konnte man die Startnummer der Zeilen mit Hilfe der delphi-Tags setzen?!
platzwart - Fr 29.10.10 19:45
@Bergmann: Sorry, aber dein Schleifenkonstrukt macht gar keinen Sinn?
Und weil das hier ohne Schleife auch keinen Sinn machen dürfte, war wohl eher beabsichtigt, das alles in die Schleife reinzupacken:
Delphi-Quelltext
1: 2: 3:
| gesamtanzahl := gesamtanzahl + z; durchschnitt := gesamtanzahl/anzahl ; showmessage(floattostr(durchschnitt)); |
EDIT:
Sorry, hatte dein [...] übersehen. ;)
Kiwibanana - So 31.10.10 16:11
Danke für die Hilfe
nun habe ich noch ein Problem
und zwar gibt mir Delphi bei der MessageBox ne Fehlermeldung aus.
ich will das am Ende des Programms bei Klick auf den Button ausgerechnet wird wie viele Versuche man braucht um alle 6 Zahlen des Würfels einmal zu haben.
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: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
| unit wuerfel_u;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) bt_ende: TButton; bt_simulation: TButton; procedure bt_endeClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure bt_simulationClick(Sender: TObject); private public end;
var Form1: TForm1; eins,zwei,drei,vier,fuenf,sechs : boolean; w,z,anzahl, gesamtanzahl, i,durchschnitt : longint;
implementation
{$R *.dfm}
procedure TForm1.bt_endeClick(Sender: TObject); begin close end;
procedure TForm1.FormCreate(Sender: TObject); begin randomize; end;
procedure TForm1.bt_simulationClick(Sender: TObject); begin anzahl := strtoint(inputbox('Wie oft?','Eingabe','')); gesamtanzahl := 0;
for i := 1 to anzahl do begin z := 0; eins := false; zwei := false; drei := false; vier := false; fuenf := false; sechs := false; repeat w := random(6) + 1; z := z+1 ; inc(z); case w of 1 : eins := true; 2 : zwei := true; 3 : drei := true; 4 : vier := true; 5 : fuenf:= true; 6 : sechs:= true;
end;
Until (eins = true) and (zwei = true) and (drei = true) and (vier = true) and (fuenf = true) and (sechs = true);
gesamtanzahl := gesamtanzahl + z ; durchschnitt := gesamtanzahl/anzahl showmessage(floattostr(durchschnitt)); end; end;
end. |
Gausi - So 31.10.10 16:15
Da fehlt ein Semikolon:
Delphi-Quelltext
1:
| durchschnitt := gesamtanzahl/anzahl; |
Jakob_Ullmann - So 31.10.10 16:17
Kiwibanana hat folgendes geschrieben : |
| wir müssen in der Schule ein Programm programmieren, welches die Würfe berechnet, die man braucht, dass jede Zahl beim Werfen einmal vorgekomen ist. |
Eine sinnlosere Aufgabenstellung ist dem Lehrer wohl nicht eingefallen. Entweder ist die Antwort 6 oder es gibt nicht einmal eine absolute Sicherheit, dass in hundert-tausenden Würfen auch nur einmal eine eins dabei ist. So wie sie jetzt ist, ist die Aufgabenstellung sinnlos.
Marc. - So 31.10.10 16:18
Delphi-Quelltext
77: 78:
| { ... } durchschnitt := gesamtanzahl/anzahl showmessage(floattostr(durchschnitt)); |
Lass mich raten,
E2066 Missing operator or semicolon. Zu Deutsch, es fehlt ein Semikolon.
Zeigt Dir Dein Compiler keine Fehlermeldungen an? :gruebel:
Kiwibanana - So 31.10.10 17:22
Doch am Semikolon lag es nicht,
hatte das vorher auch drinne
nur mal kurz rausgenommen, wegen der Fehlermeldung
als Fehlermeldung zeigt er mir an
inkompatible typen integer und extendet
diese Fehlermeldung verstehe ich aber leider nich ganz
Gausi - So 31.10.10 17:25
Ahso, durchschnitt ist ein Integer-Typ. Dann muss das so
Delphi-Quelltext
1: 2: 3:
| durchschnitt := Round(gesamtanzahl/anzahl); durchschnitt := gesamtanzahl Div anzahl; |
Das Semikolon muss da aber auf jeden Fall hin. ;-)
F34r0fTh3D4rk - So 31.10.10 18:48
Kiwibanana hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| case w of 1 : eins := true; 2 : zwei := true; 3 : drei := true; 4 : vier := true; 5 : fuenf:= true; 6 : sechs:= true; |
|
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var zahlen: array[1..6] of integer; begin zahlen[w] := true; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!