C# :: Aufgabe #84 :: Lösung #2
9 Lösungen

#84
Verteilung beim Würfeln mit zwei Würfeln
Anfänger - C#
von Alucard1766
- 11.02.2015 um 13:59 Uhr
Angenommen du wirfst sehr viel mal mit zwei Würfeln. Wie sieht die Verteilung der Summe der geworfenen Würfelzahlen aus?
Vorgaben:
Simuliere möglichst zufällig sehr viele Würfe mit zwei Standardwürfel(=1-6).
Mindestens 100'000 Würfe, je mehr desto besser. -> Performanter Code
Gib aus, wie die Verteilung der Summe der beiden Würfeln prozentual/im Verhältnis aussehen
Du musst in der Lösung auf dieser Seite eine gut sicht- und interpretierbare Darstellung der Verteilung haben, damit wir die Ergebnisse vergleichen können
Beispiel:
Vorgaben:
Simuliere möglichst zufällig sehr viele Würfe mit zwei Standardwürfel(=1-6).
Mindestens 100'000 Würfe, je mehr desto besser. -> Performanter Code
Gib aus, wie die Verteilung der Summe der beiden Würfeln prozentual/im Verhältnis aussehen
Du musst in der Lösung auf dieser Seite eine gut sicht- und interpretierbare Darstellung der Verteilung haben, damit wir die Ergebnisse vergleichen können
Beispiel:
Konsolenausgabe:
1. Wurf: 1 und 5 - Summe 6
2. Wurf: 4 und 2 - Summe 6
...
100000. Wurf: 3 und 1 - Summe 4
Ergebnis:
1 - 5%
2 - 7%
12 - 6%
#2

von DBqFetti (2480 Punkte)
- 11.02.2015 um 22:24 Uhr
Auf vier Threads parallelisiert, auch wenn ich nicht glaube dass das wirklich einen Unterschied macht. Die Ausgabe auf der Konsole killt dann eh wieder alles weil die viel zu langsam ist. Ist auf 1 Mio. eingestellt, kann aber ganz leicht in int würfegesamt geändert werden.
Wie kam der Ersteller eigentlich auf 1 - 5 Prozent ? Eine 1 dürfte nie rauskommen, bei zwei Würfeln.
C#-Code
Wie kam der Ersteller eigentlich auf 1 - 5 Prozent ? Eine 1 dürfte nie rauskommen, bei zwei Würfeln.

using System; using System.Collections.Generic; namespace Würfel { class Program { static int würfegesamt = 1000000; static void Main(string[] args) { Console.Write("{0:#,#} mal würfeln lassen?", würfegesamt); Console.ReadKey(true); List<Würfe> Threads = new List<Würfe>(); for (int i = 0; i < 4; i++) Threads.Add(new Würfe()); System.Threading.Tasks.Parallel.ForEach(Threads, x => x.Würfeln()); Console.WriteLine("\n\nWürfeln abgeschlossen, Ausgabe?\n-Überspringen mit Esc"); if (((ConsoleKeyInfo)Console.ReadKey(true)).Key != ConsoleKey.Escape) { for (int i = 0; i < Threads.Count; i++) for (int j = 0; j < Threads[i].AlleWürfe.Count; j++) Console.WriteLine("{0,9:#,#}. Wurf: {1} und {2} - Summe {3,2}", (i * (würfegesamt / 4)) + (j + 1), Threads[i].AlleWürfe[j].Wurf[0], Threads[i].AlleWürfe[j].Wurf[1], Threads[i].AlleWürfe[j].Summe); } Console.WriteLine("\nDurchschnitt berechnen!"); Console.ReadKey(false); int[] anteile = new int[11]; for (int i = 0; i < anteile.Length; i++) anteile[i] = 0; for (int i = 0; i < Threads.Count; i++) for (int j = 0; j < Threads[i].AlleWürfe.Count; j++) anteile[Threads[i].AlleWürfe[j].Summe - 2]++; for (int i = 0; i < anteile.Length; i++) Console.WriteLine("{0,2} - {1,3:0.0}%", i + 2, (100 / (double)würfegesamt) * anteile[i]); Console.ReadKey(true); } class Würfe { public List<EinWurf> AlleWürfe = new List<EinWurf>(); public void Würfeln() { Random rnd = new Random(); for (int i = 0; i < würfegesamt / 4; i++) this.AlleWürfe.Add(new EinWurf(rnd.Next(1, 7), rnd.Next(1, 7))); } } class EinWurf { byte[] wurf = new byte[2]; public byte[] Wurf { get { return wurf; } set { wurf = value; } } byte summe; public byte Summe { get { return summe; } set { summe = value; } } public EinWurf(int wurf1, int wurf2) { wurf[0] = (byte)wurf1; wurf[1] = (byte)wurf2; summe = (byte)(wurf1 + wurf2); } } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1