| Autor |
Beitrag |
Kiwibanana
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 29.10.10 19:00
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!
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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 29.10.10 19:06
Hallo und  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; |
_________________ We are, we were and will not be.
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Fr 29.10.10 19:23
Btw:
Delphi-Quelltext 1:
| Until (eins and zwei and drei and vier and fuenf and sechs); |
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 29.10.10 19:34
Da ist auch noch mehr drin. z.B.
Delphi-Quelltext
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.
_________________ We are, we were and will not be.
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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?!
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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. 
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Kiwibanana 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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. 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 31.10.10 16:15
Da fehlt ein Semikolon:
Delphi-Quelltext 1:
| durchschnitt := gesamtanzahl/anzahl; |
_________________ We are, we were and will not be.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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? 
Für diesen Beitrag haben gedankt: der organist
|
|
Kiwibanana 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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. 
_________________ We are, we were and will not be.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: 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; |
|
|
|