Autor |
Beitrag |
sharky1000us
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
|
Verfasst: Mi 04.12.02 20:40
Schön.
Und wo ist die jetzt die Frage, die du so großspurig angekündigt hast?
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. 
|
|
sharky1000us 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
|
Verfasst: Mi 04.12.02 21:26
Hab sie aus Langerweile gemacht. Allerdings werden hier 1, 1, 1, 1 als zwei dreier Eins'en angesehen:
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 04.12.02 21:32
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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: Fr 13.12.02 18:22
Oder so:
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
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: 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: 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
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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:
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:
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
      
Beiträge: 302
Erhaltene Danke: 1
WinXP home
D6 Prof
|
Verfasst: So 15.12.02 15:22
Ääähmmm, smiegel: Fehlt da nicht 'ne gewisse Zeile? 
_________________ "Der Mensch ist nicht was er sich vorstellt oder wünscht zu sein, sondern das was andere in ihm sehen."
|
|
smiegel
      
Beiträge: 992
Erhaltene Danke: 1
WIN 7
D7 Prof., C#, RAD XE Prof.
|
Verfasst: 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:
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)
|
|