Entwickler-Ecke
Sonstiges (Delphi) - würfelprogramm+ ausgabe der häufigkeit der zahlen 1 bis 6
GothicSoldier - Mo 06.06.05 17:26
Titel: würfelprogramm+ ausgabe der häufigkeit der zahlen 1 bis 6
1000 zahlen von 1 bis 6 würfelt und anschließend die absoluten und relativen Häufigkeiten für die Zahlen 1 bis 6 ausgibt.
hinweis: würfelt man eine 3, so ist die anzahl der 3-en um 1 zu vergrößern
würfelt man eine x, so ist die anzahl der x-en um 1 zu vergrößern
--> anzahl[x]:=anzahl[x]+1
Random(n) liefert Zahlen von 0 bis n-1
Kann mir irgendjemand weiterhelfen wie ich rangehen muss um das hinzubekommen?
hallo - Mo 06.06.05 17:43
Du machst einfach ein Array[1..6] of strings und würfle: Wenn du eine 1 Würfelst: inc(arrayname[1])
Das ganze Würfeln packst du in eine Schleife rein: for i:=1 to 1000 do
Danach berechnest du noch die Warscheinlichkeit. Die jeweiligen Anzahlen von 1 steht in arrayname[1] usw. drin.
Wichtig: Wenn du mit random arbeitest, bau nach möglichkeit eine variable Verzögerung (min. 1ms) zwischen dem einzelnen Würfeln ein um Verschiedene Werte zu erhalten!
Neidhard von Reuental - Mo 06.06.05 17:46
wenn du ein array of string machst kannste das nicht im 1 erhöhen.nimm integer dafür ^^
hallo - Mo 06.06.05 17:54
Ohhh!!!! :oops: :oops: :oops: Hatte mal wieder nicht richtig aufgepasst!
F34r0fTh3D4rk - Mo 06.06.05 17:59
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var wuerfel: array [1..6] of integer; i: integer; begin randomize; for i := 1 to 1000 do inc(wuerfel[random(6) + 1]); end; |
wenns mit inc net funzt dann mach das so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var wuerfel: array [1..6] of integer; i, c: integer; begin randomize; for i := 1 to 1000 do begin c := random(6) + 1; wuerfel[c] := wuerfel[c] + 1; end; end; |
UGrohne - Mo 06.06.05 18:03
Hallo,
der Titel Deines Beitrages ist nicht aussagekräftigt genug. Man weiß nicht genau, um was es geht. Bitte ändere ihn entsprechend!
Dies kannst Du tun, indem Du in Deinem ersten Beitrag auf "Edit" klickst und den Titel dort änderst.
Dazu hier auch noch der Auszug aus den Richtlinien:
Richtlinien hat folgendes geschrieben: |
1.2 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. Eine Pseudocodezeile oder die Nennung des Objektes, um welches es sich in dem Beitrag handelt, helfen da schon mehr weiter. Wenn Du beispielsweise wissen möchtest, wie es möglich ist, eine Integer-Variable in das String-Format zu konvertieren, würde ein Beitrag wie etwa "Integer zu String" oder "Integerkonvertierung" anderen Forenmitgliedern einen kurzen Überblick über die eigentliche Fragestellung verschaffen. So ist es möglich gezielter Lösungen für Probleme zu finden. Zudem solltest du immer daran denken: Der Fragesteller möchte etwas von den anderen Usern - nicht umgekehrt. |
Vielen Dank
Gruß,
Uwe
GothicSoldier - Mo 06.06.05 18:44
Hey, danke für eure hilfe ; )
Ihr seid die Besten ^_^
MarkusZi - Mo 06.06.05 19:00
Insgesamt denke ich brauchst du das, oder?
GothicSoldier - Mo 06.06.05 19:04
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject); var wuerfel: array [1..6] of integer; i, c: integer; begin randomize; for i := 1 to 1000 do begin c := random(6) + 1; wuerfel[c] := wuerfel[c] + 1; end; end; |
wenn ich mich nach dem quellcode richte, ist denn da ein edit1 feld noch notwendig?
ich komm mit der Ein und Ausgabe nicht klar :(
GothicSoldier - Mo 06.06.05 19:05
boah.....du bist ja super, konntest meine gedanken lesen *G*
dankeschön =)
GothicSoldier - Mo 06.06.05 19:10
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:
| procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject); var i, c, anzahl: integer; wuerfel : array [1..6] of integer; begin anzahl := StrToInt(Edit1.Text); for i := 1 to 6 do wuerfel[i] := 0; randomize; for i := 1 to anzahl do begin c := random(6) + 1; wuerfel[c] := wuerfel[c] + 1; end; abs1.Caption := IntToStr(wuerfel[1]); abs2.Caption := IntToStr(wuerfel[2]); abs3.Caption := IntToStr(wuerfel[3]); abs4.Caption := IntToStr(wuerfel[4]); abs5.Caption := IntToStr(wuerfel[5]); abs6.Caption := IntToStr(wuerfel[6]); rel1.Caption := FloatToStr(wuerfel[1]/anzahl); rel2.Caption := FloatToStr(wuerfel[2]/anzahl); rel3.Caption := FloatToStr(wuerfel[3]/anzahl); rel4.Caption := FloatToStr(wuerfel[4]/anzahl); rel5.Caption := FloatToStr(wuerfel[5]/anzahl); rel6.Caption := FloatToStr(wuerfel[6]/anzahl); ProgressBar1.Position := Round((wuerfel[1]/anzahl)*100); ProgressBar2.Position := Round((wuerfel[2]/anzahl)*100); ProgressBar3.Position := Round((wuerfel[3]/anzahl)*100); ProgressBar4.Position := Round((wuerfel[4]/anzahl)*100); ProgressBar5.Position := Round((wuerfel[5]/anzahl)*100); ProgressBar6.Position := Round((wuerfel[6]/anzahl)*100);
end;
end. |
wärs möglich, dass du mir einiges erklärst damit ich das vollkommen verstehe?
will das ja nicht nur so übernehmen, sondern auch gern verstehen =)
Delphi-Quelltext
1:
| ProgressBar1.Position := Round((wuerfel[1]/anzahl)*100); |
was sagt der befehl aus?
Delphi-Quelltext
1:
| rel1.Caption := FloatToStr(wuerfel[1]/anzahl); |
wieso muss ich durch die anzahl teilen?
ich nehm gerne jede erläuterung entgegen :)
F34r0fTh3D4rk - Mo 06.06.05 19:18
Delphi-Quelltext
1: 2:
| ProgressBar1.Position := Round((wuerfel[1]/anzahl)*100); |
setzt die position der progressbar auf den umgerechneten wert
und das mim teilen ist die relative wahrscheinlichkeit :wink:
MarkusZi - Mo 06.06.05 19:23
Also die ProgressBar hab ich genommen, weil man damit relativ schnell und einfach Balken darstellen kann. Man stellt sie nur auf Orientation := pbVertical (im Ojektinspektor) und auf Smooth := TRUE, so dass keine Abstufungen drin sind.
Die Labels Rel1 bis Rel6 sind also die relativen Häufigkeiten, Abs1 bis Abs6 die absoluten....
reicht das?
Ich denke alles andere ist ziemlich selbsterklärend!
GothicSoldier - Mo 06.06.05 19:23
soo und da habe ich noch eine frage:
sind solche 'speziellen' labels nötig? gehen denn nicht auch 'normale' labels?
uuund wie kann ich machen, dass nicht 0,165 angezeigt wird, sondern 16,5% meinetwegen?
*liebschau* danke vielmals :)
MarkusZi - Mo 06.06.05 19:27
Ich hab die Labels nur umbenannt, damit man sie besser auseinanderhalten kann!
Also:
Quelltext
1:
| rel1.Caption := FloatToStr((wuerfel[1]/anzahl)*100)+'%'; |
GothicSoldier - Mo 06.06.05 19:33
gut. danke. nun sind alle fragen geklärt =)
ich bedanke mich bei ALLEN. (:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!