C# :: Aufgabe #84 :: Lösung #3

9 Lösungen Lösungen öffentlich
#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:

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%
#3
2 Kommentare
vote_ok
von SymTech (1060 Punkte) - 12.02.2015 um 22:10 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;

namespace SymTech
{
    class Program
    {
        static Random r = new Random();
        static void Main(string[] args)
        {
            List<int> summen = new List<int>();
            int würfel1 = 0;
            int würfel2 = 0;
            float durchläufe = 1000000;
            for (int i = 0; i < durchläufe; i++)
            {
                würfel1 = r.Next(1, 7);
                würfel2 = r.Next(1, 7);
                summen.Add(würfel1 + würfel2);
                Console.WriteLine((i + 1) + ". Wurf: " + würfel1 + " und " + würfel2 + " - Summe " + summen[i]);
            }

            Console.WriteLine();
            Console.WriteLine("Ergebnis:");
            for (int i = 1; i <= 12; i++)
            {
                Console.WriteLine(i.ToString().PadRight(3) + "- " + ((summen.Count(p => p == i) * 100) / durchläufe).ToString("0.000").PadLeft(6) + "%");
            }

            Console.ReadKey();
        }
    }
}

Kommentare:

hillerl

Punkte: 40


2 Lösungen
1 Kommentare

#1
19.02.2015 um 10:51 Uhr
Hallo SymTech,
könntest du mir vielleicht erklären, was dieser Codeausschnitt von dir bedeutet: summen.Count(p => p == i) * 100) ?
Ich verstehe nicht, was die Zuweisung in der Klammer bedeutet, bzw habe ein "=>" noch nie in einem Programm gesehen. Habe aber auch erst frisch mit dem Programmieren begonnen.

Gruß hillerl
post_arrow
79 0

SymTech

Punkte: 1060

31 Aufgaben
11 Lösungen
13 Kommentare

#2
19.02.2015 um 14:53 Uhr
Hallo hillerl

In "summen" stehen 1 Mio. Zahlen zwischen 2 und 12.
Mit der Methode "summen.Count()" bekomme ich die Anzahl der Elemente in dieser Liste also 1 Mio.
Um jetzt herauszufinden wie oft jetzt nur die 2 in der Liste "summen" vor kommt benutzt man diese mini Abfrage.

Quellcode ausblenden C#-Code

   Console.WriteLine(summen.Count(p => p == 2 /* oder halt ne Variable in einer for schleife wie bei mir mit "i" */))



summen.Count() zählt jetzt nur dann eins hoch wenn die Abfrage "true" ergibt.
Das sieht folgendermaßen aus:
Der Counter nimmt das erste Element der Liste und weist es der Variable "p" zu.
Dann Frage ich ob p == 2 ist.
Wenn ja steigt der Counter, wenn nicht dann nicht.

Das funktioniert unter dem "using System.Linq;"

Lässt sich auch prima auf andere Listen umsetzen.

Quellcode ausblenden C#-Code
String str = "Lässt sich auch prima auf andere Listen umsetzen."
Console.WriteLine(str.Count(p => p == 's')) //Zählt das vorkommen des Buchstaben "s" im String "str"
post_arrow
82 0
Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben