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



BeitragVerfasst: Mi 04.12.02 20:34 
habe eine frage.
Die aufgabe lautet:

Schreibe einen Programmteil, mit dem ein 1000-maliger Würfelwurf simuliert wird.
Dabei soll gezählt werden, wie oft die "1" dreimal hintereinandr auftrat.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.12.02 20:40 
Schön.

Und wo ist die jetzt die Frage, die du so großspurig angekündigt hast? :roll:

P.S.: Klingt ziemlich nach einer Schulaufgabe. Und die mußt du schon selber machen. Bei konkreten Fragen wird gerne geholfen. Aber bei "Kann mir mal einer ... machen." Sehe ich rot. :evil:
sharky1000us Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 04.12.02 20:53 
alos nur zur info, ich frage hier, weil ich´s nicht kapier und nicht weil ich kein bock habe das zumachen. ;-) ich habe alle 8 aufgaben selber gemacht auf dem blatt nur kapier ich einfach nicht wie diese hier gehen soll. Dazu nur das ;-)
deshalb poste ich hier rein in der hoffnung, das mir irgendjemand erklärt wie das geht
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.12.02 21:05 
Imnmer noch schön. Und wann stellst du nun endlich deine Frage oder erklärst uns wie wir dir helfen können?
"Ich kapier es nicht." ist etwas schammig. Du kapierts was nicht? Wie man Zufallszahlen erzeugt. Wie man zwei Zahlen vergleicht. Wie man einen Zähler baut.
So wie du bisher fragst (bzw. nicht fragst) läuft das immer noch daraufhinaus, dass man dir das Programm schreiben soll.
sharky1000us Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mi 04.12.02 21:14 
och mensch, ich will wissen wie ich das mache, dass ich die zahlen 3 mal hintereinander vergleiche, das ist das einzigste problem, und nun ist di frage wie ich die 3 Zahlen hintereinander vergleiche?!
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Mi 04.12.02 21:26 
Hab sie aus Langerweile gemacht. Allerdings werden hier 1, 1, 1, 1 als zwei dreier Eins'en angesehen:

ausblenden 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:
procedure TForm1.Button1Click(Sender: TObject);
var
  w, k: Word;
begin
  Randomize;
  with ListBox1 do begin
    Clear;

    for w := 0 to 999 do Items.Add(IntToStr(Random(6) + 1));

    k := 0;
    for w := 0 to Items.Count - 3 do begin
      if Items[w] = '1' then
        if Items[w + 1] = '1' then
          if Items[w + 2] = '1' then //Inc(k);
          begin //Etwas Show
            Inc(k);
            TopIndex := w;
            Sleep(1000);
            Application.ProcessMessages;
          end;
    end;
  end;
  ShowMessage(IntToStr( k ));
end;


Umsetzen muß du es aber selber.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 04.12.02 21:32 
ausblenden 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:
procedure TForm1.Button1Click(Sender: TObject);
VAR werte : ARRAY[0..1] OF Integer;
    aktuell, i, anzahl, gesucht : Integer;
    tripel : Boolean;
begin
  tripel := True;
  gesucht:=1;
  anzahl:=0;
  aktuell:=0;
  werte[0]:=0;
  werte[1]:=0;
  for i:=1 TO 1000 DO
  begin
    aktuell:=random(6)+1; //würfeln
    if (not tripel) and (aktuell=gesucht) and (werte[0]=gesucht) and (werte[1]=gesucht) then
    //  es gab nicht schon ein Tripel (wäre also die vierte Zahl in Folge)
    // +die vorigen zwei und die aktuelle Zahl sind gleich der Gesuchten
      begin
        inc(anzahl);
        tripel:=true; //merken, dass es jetzt ein Tripel gab
      end;
    if (tripel) and (aktuell<>gesucht) then tripel:=false;
    werte[0]:=werte[1]; //Das Gedächtnis aktualsieren
    werte[1]:=aktuell;
  end;
  Label1.Caption:=IntToStr(anzahl);
end;


Hi! Es treten keine Programmfehler auf, aber ich weiß nicht, ob es wirklich funktioniert. Das müsstest Du noch einmal ausprobieren. Folgendes noch zu sagen: "gesucht" enthält die Zahl, die drei mal vorkommen soll. Das Array "Werte" enthält die letzten beiden Zahlen. Der Rest ist erklärt oder logisch.

Hoffe, ich habe Dir geholfen,
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 04.12.02 21:34 
Da war ja einer schneller!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Fr 13.12.02 18:22 
Oder so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function CountEinser:Integer;
var i, eins:Integer;
begin
  Randomize;
  eins:=0; Result:=0;
  for i:=0 to 999 do
  begin
    if (Random(6)+1 = 1) then Inc(eins);
    if (eins=3) then
    begin
      eins:=0;
      Inc(Result);
    end;
  end; // for i
end; // CountEinser

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: Fr 13.12.02 18:35 
@smiegel: Du kannst statt dessen auch einfach die Anzahl einsen am Ende durch 3 Teilen. Deinem Alghi isses nämlich egal, ob die einsen hintereinander stehen...

Wenn, dann solltest Du eins bei jeder anderen Zahl auch auf 0 setzen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function CountEinser:Integer; 
var i, eins:Integer; 
begin 
  Randomize; 
  eins:=0; Result:=0; 
  for i:=0 to 999 do 
  begin 
    if (Random(6)+1 = 1) then Inc(eins)
      else eins:=0; //Diese Zeile hattest vergessen
    if (eins=3) then 
    begin 
      eins:=0; 
      Inc(Result); 
    end; 
  end; // for i 
end; // CountEinser
Ansonsten: Hübsch, klein, effektiv.

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Sa 14.12.02 23:39 
@Wolff68: Du hast recht. Hab den Algo on the fly hingeschrieben und dann kann das schon mal vorkommen.

Um das ganze auf die Spitze zu trieben, noch eine kleine Änderung, damit kann man dann jede Ziffer auf x-beliebige-Wiederholungen prüfen:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function CountFolgen(Auge, wieOft, Wuerfe:Integer):Integer; 
var i, treffer:Integer; 
begin 
  Randomize; 
  treffer:=0; Result:=0; 
  for i:=0 to Wuerfe-1 do 
  begin 
    if (Random(6)+1 = Auge) then Inc(treffer); 
    if (treffer=wieOft) then 
    begin 
      treffer:=0; 
      Inc(Result); 
    end; 
  end; // for i 
end; // CountFolgen


Aufgerufen wird sie dann folgendermaßen:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
  ...  
  // in Anlehnung an obiges Problem
  Loesung:=CountFolgen(1, 3, 1000);
  ...
  // wie oft kommen 5 Sechsen hintereinander in 10.000 Würfern vor
  Loesung:=CountFolgen(6, 5, 10000);
  ...

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
Wolff68
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 302
Erhaltene Danke: 1

WinXP home
D6 Prof
BeitragVerfasst: So 15.12.02 15:22 
Ääähmmm, smiegel: Fehlt da nicht 'ne gewisse Zeile? :wink: :twisted:

_________________
"Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: So 15.12.02 22:18 
Hallo Wolff68, Du hast schon wieder recht. Asche auf mein Haupt :(

So, das letzte Mal, aber (hoffentlich) ohne Fehler:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function CountFolgen(Auge, wieOft, Wuerfe:Integer):Integer; 
var i, treffer:Integer; 
begin 
  Randomize; 
  treffer:=0; Result:=0; 
  for i:=0 to Wuerfe-1 do 
  begin 
    if (Random(6)+1 = Auge) then Inc(treffer)
     else treffer:=0;
    if (treffer=wieOft) then
    begin 
      treffer:=0; 
      Inc(Result); 
    end; 
  end; // for i 
end; // CountFolgen

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)