Autor Beitrag
Kiwibanana
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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!
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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','')); //Die Anzahl der Versuche(als ein Versuch wird gezählt, wenn alle Zahlen von 1- 6 einmal vorkamen) soll eingegeben werden
  gesamtanzahl := 0;
  for i := 1 to anzahl do //Der Versuch soll so oft simuliert werden wie es der Nutzer eingibt
    z := 0// Die Variable z wird mit 0 belegt - es soll die Anzahl der nötigen Würfe addiert werden
    eins := false; //die Variablen 1 - 6 sollen mit false belegt werden, da man so am Ende prüfen kann, wenn alle Werte true sind, ob alle Zahlen einmal gewürfelt worden
    zwei := false;
    drei := false;
    vier := false;
    fuenf := false;
    sechs := false;
   
   repeat               //Das Geschriebene soll so lang wiederholt werden, bis jede Zahl von 1- 6 einmal vorkam

    w := random(6) + 1;   //hier wird eine Zufallszahl ausgegeben von 1- 6
    z := z+1          ;   //Die Variable Z wird + 1 addiert
    inc(z);

     case w of            //ich wollte einen langen Code umgehen

    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);  // die Bedingung die erfüllt sein muss


  gesamtanzahl := gesamtanzahl + z;      // Der Durchschnitt soll berechnet werden
  durchschnitt := gesamtanzahl/anzahl ;
  showmessage(floattostr(durchschnitt));

end;

end.


Danke !!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.10.10 19:06 
Hallo und :welcome: in der Entwickler-Ecke,

Eine Case-Of-Struktur muss mit einem End abgeschlossen werden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
case w of            //ich wollte einen langen Code umgehen
    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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 29.10.10 19:23 
Btw:

ausblenden Delphi-Quelltext
1:
Until (eins and zwei and drei and vier and fuenf and sechs);  // die Bedingung die erfüllt sein muss					

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 29.10.10 19:34 
Da ist auch noch mehr drin. z.B.
ausblenden Delphi-Quelltext
1:
2:
z := z+1          ;   //Die Variable Z wird + 1 addiert
inc(z);

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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:

ausblenden 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','')); //Die Anzahl der Versuche(als ein Versuch wird gezählt, wenn alle Zahlen von 1- 6 einmal vorkamen) soll eingegeben werden
  gesamtanzahl := 0;
  for i := 1 to anzahl do //Der Versuch soll so oft simuliert werden wie es der Nutzer eingibt
  begin
    z := 0// Die Variable z wird mit 0 belegt - es soll die Anzahl der nötigen Würfe addiert werden
    eins := false; //die Variablen 1 - 6 sollen mit false belegt werden, da man so am Ende prüfen kann, wenn alle Werte true sind, ob alle Zahlen einmal gewürfelt worden
    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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
gesamtanzahl := gesamtanzahl + z;      // Der Durchschnitt soll berechnet werden
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 Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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.
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 31.10.10 16:15 
Da fehlt ein Semikolon:
ausblenden Delphi-Quelltext
1:
durchschnitt := gesamtanzahl/anzahl;					

_________________
We are, we were and will not be.
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: So 31.10.10 16:17 
user profile iconKiwibanana hat folgendes geschrieben Zum zitierten Posting springen:
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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: So 31.10.10 16:18 
ausblenden 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:

Für diesen Beitrag haben gedankt: der organist
Kiwibanana Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 31.10.10 17:25 
Ahso, durchschnitt ist ein Integer-Typ. Dann muss das so
ausblenden Delphi-Quelltext
1:
2:
3:
durchschnitt := Round(gesamtanzahl/anzahl);
// oder
durchschnitt := gesamtanzahl Div anzahl;

Das Semikolon muss da aber auf jeden Fall hin. ;-)

_________________
We are, we were and will not be.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 31.10.10 18:48 
user profile iconKiwibanana hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
     case w of            //ich wollte einen langen Code umgehen

    1 : eins := true;
    2 : zwei := true;
    3 : drei := true;
    4 : vier := true;
    5 : fuenf:= true;
    6 : sechs:= true;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  zahlen: array[1..6of integer;
begin
  // ...
  zahlen[w] := true;
  // ...
end;