C# :: Aufgabe #201
4 Lösungen

kleine simulation zweier zufallsereignisse
Anfänger - C#
von hollst
- 21.03.2018 um 21:25 Uhr
Gegeben seien zwei unabhängige Zufallsereignisse A und B, wobei A mit einer
Wahrscheinlichkeit von 70 % eintritt und B mit eine Wahrescheinlichkeit von 10 %.
Durch (MontoCarlo-) Simulation schätze man ab, mit welchen Wahrscheinlichkeiten das Doppelereignis (A, B)
vorkommt für die Fälle
a) weder A noch B sind eingetreten,
b) entweder A oder B (oder beide) ist (sind) eingetreten.
Man kann das natürlich auch ausrechnen, aber grau ist bekanntlich alle Theorie.
Wahrscheinlichkeit von 70 % eintritt und B mit eine Wahrescheinlichkeit von 10 %.
Durch (MontoCarlo-) Simulation schätze man ab, mit welchen Wahrscheinlichkeiten das Doppelereignis (A, B)
vorkommt für die Fälle
a) weder A noch B sind eingetreten,
b) entweder A oder B (oder beide) ist (sind) eingetreten.
Man kann das natürlich auch ausrechnen, aber grau ist bekanntlich alle Theorie.
Lösungen:

using System; namespace ConsoleSimulationZweierZufallsereignisse { class Program { //Vierfeldertafel /* A !A B 0.07 0.03 0.1 !B 0.63 0.27 0.9 0.7 0.3 1 */ static readonly Random rnd = new Random(); static void Main(string[] args) { double ereignisA = 0.7; double ereignisB = 0.1; int n = 10000000; int fallA = 0;//weder A noch B sind eingetreten, => !a && !b = !(a | b) //int fallB = 0;//entweder A oder B (oder beide) ist (sind) eingetreten => a | b //fallB ist die Gegenwahrscheinlichkeit von fallA Console.WriteLine($"Ereignis A tritt mit einer Wahrscheinlichkeit von {ereignisA * 100} % auf.\r\nEreignis B tritt mit einer Wahrscheinlichkeit von {ereignisB * 100} % auf.\r\n"); Console.WriteLine("Diese Simulation schätzt ab, mit welcher Wahrscheinlichkeit folgende Fälle auftreten:"); Console.WriteLine("a) weder A noch B sind eingetreten,"); Console.WriteLine("b) entweder A oder B (oder beide) ist (sind) eingetreten.\r\n"); for (int i = 0; i < n; i++) { bool a = rnd.NextDouble() <= ereignisA; bool b = rnd.NextDouble() <= ereignisB; if (!a && !b) { fallA++; } } double pA = fallA / (double)n; double pB = 1 - pA; Console.WriteLine($"Fall A tritt mit einer Wahrscheinlichkeit von {pA * 100} % auf."); Console.WriteLine($"Fall B tritt mit einer Wahrscheinlichkeit von {pB * 100} % auf."); Console.ReadLine(); } } }

class MonteCarloSimulation { private int AnzahlEreignisA = 0; private int AnzahlEreignisB = 0; private int AnzahlEreignisNichtAOderB = 0; private int GesamtDurchlaeufe = 0; private Random random; public MonteCarloSimulation() { random = new Random(DateTime.Now.Millisecond); } public void start(int AnzahlDurchlaeufe) { this.GesamtDurchlaeufe = AnzahlDurchlaeufe; for (int i=0;i<=AnzahlDurchlaeufe;i++) { int result = random.Next(100); WerteResultAus(result); } } public String getAusgabeString() { string AusgabeString = "Ergebnis der monte-Carlo Simulation\n"; AusgabeString += "Ergeinis A : " + getProzentNachSimulation(AnzahlEreignisA).ToString()+"%\n"; AusgabeString += "Ergeinis B : " + getProzentNachSimulation(AnzahlEreignisB).ToString() + "%\n"; AusgabeString += "Ergeinis weder A noch B : " + getProzentNachSimulation(AnzahlEreignisNichtAOderB).ToString() + "%\n"; return AusgabeString; } private void WerteResultAus(int result) { if (result < 70) { AnzahlEreignisA++; return; } if(result<80) { AnzahlEreignisB++; return; } AnzahlEreignisNichtAOderB++; } private float getProzentNachSimulation(int Wert) { return 100 * Wert / GesamtDurchlaeufe; } }

class Program { static void Main(string[] args) { MonteCarloSimulation dieSimulation=new MonteCarloSimulation(); dieSimulation.start(1000000); Console.WriteLine(dieSimulation.getAusgabeString()); Console.ReadLine(); } }

/* 23.04.2018 * Author: art1808 * * Wahrscheinlichkeit von A = 70% * Wahrscheinlichkeit von B = 10% * Ausgabe des Ergebnisses * */ using System; namespace kleine_simulation_zweier_zufallsereignisse { class Program { static void Main() { Random rnd = new Random(); Helper help = new Helper(); do { int a = rnd.Next(1, 100); int b = rnd.Next(1, 100); if (a <= 70 && b <= 10) help.Output("A & B"); //a und b else if (a <= 70 && b > 10) help.Output("A");//nur a else if (b <= 10 && a > 70) help.Output("B");//nur b else help.Output("Weder noch");//gar nichts Console.ReadLine(); } while (true); } } class Helper { public void Output(string x) => Console.WriteLine(x); } }

using static System.Console; namespace aufgabe_201 { class Program { static void Main() { int trails_max = (int)1E+8; System.Random rand = new System.Random(); int counter_Case_a = 0; //weder A noch B sind eingetreten int counter_Case_b = 0; //entweder A oder B (oder beide) ist (sind) eingetreten. double a = 0.7, b = 0.1; for (var i = 0; i < trails_max; i++) { double xa = rand.NextDouble(); double xb = rand.NextDouble(); if ((xa >= a) && (xb >= b)) counter_Case_a++; if ((xa < a) || (xb < b)) counter_Case_b++; } WriteLine($"case_a: {((double)counter_Case_a / trails_max).ToString("p")}"); WriteLine($"case_b: {((double)counter_Case_b / trails_max).ToString("p")} ready"); ReadKey(); } } }