Jump to content

Zwiebug
 Share

Recommended Posts

Mir war gerade langweilig, daher habe ich ein einfaches Prgramm geschrieben, mit welchem man ausgedehnte Proben testen kann. Weiter unten steht eine Anleitung für Leute, die soetwas noch nie benutzt haben. Es werden Startpool und Schwellenwert eingegeben. Dann muss man eingeben, wie oft die gesamte ausgedehnte Probe gerechnet werden soll.

Das Programm würfelt diese dann durch und gibt deren Ergebnisse aus. (sowie eine Meldung bei (kritischen) Patzern)

 

Es kann ganz nützlich sein, um die Risiken einer Probe abzuschätzen. Es ist, schätze ich, ziemlich amateurhaft gecodet, aber das ist ja eigentlich egal. Ich hatte nur Schulinformatik und an der Uni ein Modul Informatik, das reicht zumindest für ein paar Basics.

Ich habe das vor Allem geschrieben, weil ich mal schauen wollte, ab wann Sprengstoffherstellung (KF, S. 192) sicher wird. Die ganzen Formeln per Hand aufzustellen wäre sicherlich auch gegangen, aber dazu war ich nicht motiviert genug.

 

Anleitung für Dummies, ohne C++ Compiler:

 

Das Programm steht im Text, weil in manchen Foren Anhänge nach einiger Zeit wieder gelöscht werden.

 

1) Öffnet die Website cpp.sh

2) löscht alles, was in dem großen Textfeld steht

3) kopiert folgenden kursiven Code ins Textfeld (vergesst nicht, die geschweifte Klammer am Schluss mitzukopieren!):

 

#include <iostream>
#include <string>
using namespace std;

int main()
{
    float Iterationscounter = 0;
    float Erfolgscounter = 0;
    float Patzeranteil = 0;
    float kritPatzeranteil = 0;
    float IterationenmitPatzer = 0;
    float IterationenmitkritPatzer = 0;
    
    int Wuerfelpool = 0;
    int Schwellenwert = 0;
    int AnzahlIterationen = 0;
    
    cout << "Dieses Programm berechnet ausgedehnte Proben bei Shadowrun 5. Es rechnet eine gegebene Anzahl" << endl;
    cout << "(Anzahl Iterationen) von Proben aus, und gibt zum Schluss Erfolgs- und Patzerwerte aus." << endl << endl;

    cout << "Würfelpool eingeben [int]: " << endl;
    cin >> Wuerfelpool;
    cout << "Schwellenwert angeben [int]: " << endl;
    cin >> Schwellenwert;
    cout << "Anzahl an Iterationen angeben [int]: " << endl;
    cin >> AnzahlIterationen;
    int Wuerfelpoolz = Wuerfelpool;
    int counter;
    int Wuerfelergebnis;
    int Patzer;
    int Patzercounter;
    int kritPatzercounter;
    for(; Iterationscounter < AnzahlIterationen ; Iterationscounter++){
        
    Wuerfelpoolz = Wuerfelpool;;
    counter = 0;
    Wuerfelergebnis = 0;
    Patzer = 0;
    Patzercounter = 0;
    kritPatzercounter = 0;
    
    for(; Wuerfelpoolz > 0 && counter < Schwellenwert ; Wuerfelpoolz--){
        cout << "Probe: " << Wuerfelpool - Wuerfelpoolz + 1 << " ; Wuerfelpool: " << Wuerfelpoolz << " ; Ergebnis: ";
        int Differenz = counter;
        for(int Wurfzahl = Wuerfelpoolz ; Wurfzahl >0 ; Wurfzahl--){
                
                Wuerfelergebnis = rand() % 6 + 1;
                cout << Wuerfelergebnis << ", ";
                if (Wuerfelergebnis>=5){ counter++;}
                if (Wuerfelergebnis == 1){ Patzer++; };
                
            }
            cout << "; Darunter waren " << counter - Differenz << " Erfolge. ";
            if(Wuerfelpoolz - Patzer <= Patzer){
                Patzercounter++;
                
                if(counter - Differenz == 0){
                kritPatzercounter++;
                    cout << "!!! Kritischer Patzer!!!" << endl;
                }
                else{
                    cout << "!!! Patzer!!!" << endl;
                }
            }
            else{cout << endl;}
            Patzer = 0;
            
    }
    if(counter < Schwellenwert){
        cout << "Der Schwellenwert von " << Schwellenwert << " wurde um " << Schwellenwert - counter << " verfehlt." << endl;
    }
    else{
    Wuerfelpoolz = Wuerfelpool - Wuerfelpoolz;
    Erfolgscounter++;
    cout << "Nach " << Wuerfelpoolz << " Proben wurde der Schwellenwert von " << Schwellenwert << " erreicht." << endl;
    }
    
    Patzeranteil += Patzercounter;
    kritPatzeranteil += kritPatzercounter;
    if(Patzercounter > 0){IterationenmitPatzer++;}
    if(kritPatzercounter > 0){IterationenmitkritPatzer++;}
    
    cout << "Es wurden " << Patzercounter << " Patzer gewuerfelt. Davon waren " << kritPatzercounter << " kritische Patzer." << endl;

    }
    cout << endl;
    cout << "Von " << Iterationscounter << " Iterationen waren " << Erfolgscounter << " (" << Erfolgscounter / Iterationscounter * 100 << "%) erfolgreich." << endl;
    cout << "Ausserdem wurden " << Patzeranteil << " Patzer und " << kritPatzeranteil << " kritische Patzer geworfen." << endl;
    cout << "In " << IterationenmitPatzer << " (" << IterationenmitPatzer / Iterationscounter * 100 << "%) Faellen wurde ein Patzer geworfen." << endl;
    cout << "In " << IterationenmitkritPatzer << " (" << IterationenmitkritPatzer / Iterationscounter * 100 << "%) Faellen wurde ein kritischer Patzer geworfen." << endl;
}


4) Klickt auf "Run"

5) Gebt als Erstes in das unten angezeigte Eingabefeld euren Würfelpool ein.

6)Drückt [Enter]

7) Gebt den Schwellenwert ein

8) Drückt [Enter]

9) Gebt ein, wie oft das Programm die Probe testen soll

10) Drückt [Enter]

 

Nun wird das Programm die Proben für euch rechnen.

 

Wenn ihr alles richtig gemacht habt, erscheinen die Angaben zu den einzelnen Proben im Textfeld.

Ganz am Ende stehen dann ein paar Gesamtwerte, nämlich die Gesamtzahlen an Proben, erfolgreichen Proben, Patzern und kritischen Patzern. Außerdem die Anzah an ausgedehnten Proben, bei denen mindestens ein (kritischer) Patzer vorkam, sowie deren Anteil an den Proben.

 

Wenn ihr genauere Prozentangaben wollt, nehmt einfach in Schritt 9 Werte wie 10000. Die Werte sollten aber nicht zu hoch sein, denn jede Null mehr verzehnfacht die Zeit, die das Programm benötigt!

 

Die angegebene Website benutzt für Zufall scheinbar eine Tabelle mit vorgenerierten Zufallswerten. Das ist ausreichend, um bei hohen Werten in Schritt 9 die Wahrscheinlichkeiten hinreichend genau zu berechnen, aber für einzlne Proben reicht das nicht. Wenn ihr eine einzelne Probe wollt, gebt eine beliebige Zahl in Schritt n eun ein, die ihr vorher verwendet habt, und nehmt die Letzte. Alle vorherigen sind, bei gleichem Pool und gleichem Schwellenwert, immer gleich. Ob die Zufallsfunktion in normalen Compilern besser funktioniert, weiß ich nicht, da ich momentan keinen auf dem Rechner habe und das Programm selbst auf der Website schreiben musste.

 

Falls jemand einen Fehler findet, melde ihn mir bitte!

 

Viel Spaß damit!

Edited by Zwiebug
  • Like 2
Link to comment
Share on other sites

 Share

×
×
  • Create New...