Entwickler-Ecke

Basistechnologien - Bearbeiten eines Arrays mit Zufallsverteilung


Magiehammer - Di 15.05.18 18:19
Titel: Bearbeiten eines Arrays mit Zufallsverteilung
Moin allerseits!

Ich bin dabei für eine Aufgabe im Studium ein Programm zu schreiben, bei dem ich jetzt vor folgendem Problem stehe:

Ich habe ein zweidimensionales Array, mit 8 Spalten und einer beliebigen Anzahl an Zeilen, je nach dem was der Benutzer eingibt.
Dieses Array wird komplett mit einsen gefüllt.

Nun sollen in diesem Array irgendwelche einsen zu Nullen werden, dabei soll jede eins zufällig (aber mit einem bestimmten Verhältnis) auf 0 gesetzt werden.
Also konkret bastel ich eine Schleife, die jede eins durch geht, und diese dann entweder zu einer null macht, oder eben nicht.

Und am Ende wird dann das Ergebnis ausgegeben, aber das ist kein Problem.

Jetzt weiß ich leider nicht, wie ich das schreiben soll. Ich habe die Stelle, an der die Bearbeitung passieren soll mit "//Hier wird das Array bearbeitet..." markiert.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
            for (int sti = 1; sti != st+1; ++sti)
            {
                Console.WriteLine("{0}. Strahlteiler:", sti);   //Sagt dem Nutzer, welcher Strahlteiler berechnet wird
                //Es folgt: Bearbeitung des Arrays, nach dem Verhältnis der Eingabe.
                {
                    for (int yi = 0; yi < pzahl; yi++)
                    {
                        for (int xi = 0; xi < izahl; xi++)
                        {
                            //Hier wird das Array bearbeitet...
                        }
                    }
                    //Ausgabe des Ergebnisses nach dem ersten Strahlteiler
                    for (int yi = 0; yi < pzahl; yi++)
                    {
                        for (int xi = 0; xi < izahl; xi++)
                        {
                            Console.Write("{0}", Photonen[xi, yi]);
                        }
                        Console.WriteLine();
                    }

                }

Leider funktioniert es nicht den Code hier richtig formatiert einzufügen, d.h. hier als Bild: http://prntscr.com/ji8bro

Die Ausgabe funktioniert soweit, aber halt natürlich unbearbeitet.
Könntet ihr mir da helfen, zu schreiben wie diese Zufallsverteilung geschrieben werden muss?
Das Programm sieht angewandt aktuell so aus: http://prntscr.com/ji8arz

Ich habe schon im Programm weiter oben das Verhältnis vom User eingeben lassen, und dass entgegengesetzte Verhältnis berechnet.
Konkret sieht das Verhältnis so aus: Variable pv1 zu Variable pv2 mit einem Wert von 0,irgendwas. Also im Bereich von 0 bis 1.

Mit freundlichen Grüßen,
Magiehammer

Moderiert von user profile iconTh69: C#-Tags hinzugefügt


Th69 - Di 15.05.18 18:47

Hallo und :welcome:

kennst du schon die Klasse Random [https://msdn.microsoft.com/de-de/library/system.random(v=vs.110).aspx]?

Mittels NextDouble() kannst du dir eine Zufallszahl im Bereich von 0 bis 1 liefern lassen und diese dann mit deinem 'Verhältnis der Eingabe' vergleichen und so entsprechend die Nullen setzen.

PS: Ich habe den Code für dich nacheditiert: [cs]...[/cs]


Magiehammer - Di 15.05.18 18:58

Moinsen und Danke :D

Ja, ich hatte bereits damit ein wenig experimentiert, aber nicht so ganz was rausbekommen, was Zweckmäßig ist, evt. hilft da NextDouble(), dass schau ich mir nachher an.
Danke fürs nacheditieren, [cs] war mir so bislang nicht untergekommen :D

Werd heut Abend noch anderweitig beschäftigt sein, melde mich aber spätestens morgen wieder :)

Mit freundlichen Grüßen,
Magiehammer


Magiehammer - Di 15.05.18 22:12

Jawoll, habs hinbekommen :)

Ich danke vielmals, das "NextDouble()" war tatsächlich der Schlüssel :)
Komplett sieht es nun so aus: http://prntscr.com/jibj49

Im Quellcode (für evt. spätere Leser):


C#-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:
            Random Zufall = new Random();

            for (int sti = 1; sti != st+1; ++sti)
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine("\n{0}. Strahlteiler:", sti);   //Sagt dem Nutzer, welcher Strahlteiler berechnet wird
                Console.ForegroundColor = ConsoleColor.White;
                //Code von Magiehammer :)
                //Es folgt: Bearbeitung des Arrays, nach dem Verhältnis der Eingabe.
                {
                    for (int yi = 0; yi < pzahl; yi++)
                    {
                        for (int xi = 0; xi < izahl; xi++)
                        {
                            //Hier wird das Array bearbeitet...
                            if (Photonen[xi,yi] == 1//Ist dort ein Photon vorhanden?
                            {
                                double ZW = Zufall.NextDouble();

                                if (ZW <= pv2) //Ist der Zufallswert kleiner als das Verteilerverhältnis?
                                {
                                    Photonen[xi, yi] = 0//Dann setze Photon auf Null.
                                }   //Wenn ZW größer, dann bleibt die Zahl auf 1.
                            }       //Wenn kein Photon da ist, braucht keine weitere Prüfung gemacht werden. Es bleibt Null.              
                        }
                    }

                    //Ausgabe des Ergebnisses nach dem x. Strahlteiler
                    for (int yi = 0; yi < pzahl; yi++)
                    {
                        for (int xi = 0; xi < izahl; xi++)
                        {
                            Console.Write("{0}", Photonen[xi, yi]);
                        }
                        Console.WriteLine();
                    }

                }

                //Random Zufall = new Random();
                //int DP = Zufall.Next(0, pzahl);
                //Console.WriteLine("Es sind {0} Photonen durch den ersten Strahlteiler gekommen.", DP);

            }



Noch die Auswertung einbauen, und dann hab ichs schon geschafft.
3 Wochen vor Abgabe XD

Mit freundlichen Grüßen,
Magiehammer


Th69 - Mi 16.05.18 08:15

Ja, sieht gut aus. :zustimm: