"Routine" für Variablen?



  • Hallo!

    Ich habe folgendes Programm geschrieben:

    #include <iostream>
    #include <windows.h>
    #include <ctime>
    
    using namespace std;
    
    int main()
    {
        srand((unsigned)time(0));
        /*Variablen deklarieren-->*/
        short choice1 = 0;
        short start = 0;
        double ende = 0;
        double c1Muenze = 0;
        double c2Muenze = 0;
        double c1Wuerfel = 0;
        double c2Wuerfel = 0;
        double c3Wuerfel = 0;
        double c4Wuerfel = 0;
        double c5Wuerfel = 0;
        double c6Wuerfel = 0;
        /*<--Variablen deklarieren*/
        /*Titel festlegen und Informationen anzeigen-->*/
        SetConsoleTitle("W'keits Simulator");
        cout << "<<Dieses Programm simuliert Wahrscheinlichkeiten in verschiedenen Situationen>>\n" << endl;
        /*<--Titel festlegen und Informationen anzeigen*/
        while (1)
        {
            /*Variablen auf 0 zurücksetzten-->*/
            c1Muenze = 0;
            c2Muenze = 0;
            c1Wuerfel = 0;
            c2Wuerfel = 0;
            c3Wuerfel = 0;
            c4Wuerfel = 0;
            c5Wuerfel = 0;
            c6Wuerfel = 0;
            ende = 0;
            /*<--Variablen auf 0 zurücksetzten*/
            /*Auflisten der Möglichkeiten-->*/
            cout << "Sie koennen...\n";
            cout << "1 - Eine M\x81nze simulieren..." << endl;
            cout << "2 - Einen W\x81rfel simulieren..." << endl;
            cout << "Geben sie die Ziffer des gew\x81nschten Vorganges ein: ";
            cin >> choice1;
            /*<--*/
            /*Abfragen der Eingabe für choice1*/
            /*Die Münze wurde gewählt-->*/
            if (choice1 == 1) {
                cout << "\nSie moechten eine M\x81nze simulieren...\n" << endl;
                cout << "Wie oft soll geworfen werden?: ";
                cin >> ende;
                cout << "\nEs wird " << ende << "mal geworfen in 3...";
                Sleep(1000);
                cout << "2...";
                Sleep(1000);
                cout << "1\n\n";
                Sleep(1000);
                for (start = 0; start < ende; start++) {
                    short zMuenze = rand() % 2 + 1;
                    Sleep(10);
                    if (zMuenze == 1)
                    {
                        cout << "Kopf" << endl;
                        c1Muenze += 1;
                    }
                    if (zMuenze == 2)
                    {
                        cout << "Zahl" << endl;
                        c2Muenze += 1;
                    }
                }
                if (start == ende) {
                    cout << "Die M\x81nze wurde " << ende << "mal geworfen." << endl;
                    cout << "Ergebnis: " << endl;
                    cout << "Anzahl Kopf: " << c1Muenze << endl;
                    cout << "Anzahl Zahl: " << c2Muenze << "\n\n" << endl;
                }
            }
            /*<--Die Münze wurde gewählt*/
            /*Der Würfel wurde gewählt-->*/
            if (choice1 == 2) {
                cout << "\Sie moechten einen W\x81rfel simulieren...\n" << endl;
                cout << "Wie oft soll gew\x81rfelt werden?: ";
                cin >> ende;
                cout << "Es wird " << ende << "mal gew\x81rfelt in 3...";
                Sleep(1000);
                cout << "2...";
                Sleep(1000);
                cout << "1\n";
                Sleep(1000);
                for (start = 0; start < ende; start++) {
                    short zWuerfel = rand() % 6 + 1;
                    Sleep(10);
                    cout << zWuerfel << endl;
                    if (zWuerfel == 1)
                    {
                        c1Wuerfel += 1;
                    }
                    if (zWuerfel == 2)
                    {
                        c2Wuerfel += 1;
                    }
                    if (zWuerfel == 3)
                    {
                        c3Wuerfel += 1;
                    }
                    if (zWuerfel == 4)
                    {
                        c4Wuerfel += 1;
                    }
                    if (zWuerfel == 5)
                    {
                        c5Wuerfel += 1;
                    }
                    if (zWuerfel == 6)
                    {
                        c6Wuerfel += 1;
                    }
                }
                if (start == ende) {
                    cout << "Es wurde " << ende << "mal gew\x81rfelt." << endl;
                    Sleep(800);
                    cout << "Ergebnis: " << endl;
                    cout << "Anzahl 1: " << c1Wuerfel << endl;
                    cout << "Anzahl 2: " << c2Wuerfel << endl;
                    cout << "Anzahl 3: " << c3Wuerfel << endl;
                    cout << "Anzahl 4: " << c4Wuerfel << endl;
                    cout << "Anzahl 5: " << c5Wuerfel << endl;
                    cout << "Anzahl 6: " << c6Wuerfel << "\n\n" << endl;
                }
            }
            /*<--Der Würfel wurde gewählt*/
        }
        /*<--Abfragen der Eingabe für choice1*/
        return 0;
    }
    

    Nun möchte ich noch eine Funktion "Lottozahlen" einfügen.
    Dabei soll der User aber einstellen können, WIEVIELE Kugeln(Zahlen) es gibt.
    Bei "Münze" und "Würfel" kann ich ja von Anfang an sagen, dass es 2 bzw. 6 Möglichkeiten gibt, das geht aber mit den "Lottozahlen" nicht.
    Dazu bräuchte ich jetzt so eine Art "Routine", die für JEDE Zahl, die zwischen
    1 und der Usereingabe vorkommt ein Variable erstellt, bei der dann immer, wenn diese nocheinmal vorkommt z.B.

    253 += 1;
    

    rechnet.

    Ich denke mal, soetwas sollte möglich sein, aber wie bekomme ich das hin?



  • Das hättest du bereits von Anfang an tun sollen, selbst für die 6 Würfel:

    #include <vector>
    
    ...
    
    vector<int> nums; // verstehe nicht wieso du double als typ verwendest...
    
    ...
    
    nums.push_back(some_number); // einen mehr dranfügen
    
    ...
    
    for(int i = 0; i < nums.size(); ++i) // bin mir nicht sicher in c++ das size() heißt
    {
        int num = nums[i];
        // do sth with num
    }
    
    ...
    
    nums.clear(); // mach das wieder leer, keine zahlen mehr drin
    

    Kann noch viel mehr als das hier...

    MfG SideWinder


  • Mod

    Mit

    #include<vector>
    
    // ...
    
    vector<int> viele_ints(N);
    

    Kannst du N int-Variablen erstellen. Zugreifen kannst du auf diese mittels viele_ints[0] bis viele_ints[N-1] . Pass also unbedingt auf, dass die Zählung bei 0 beginnt.



  • Lottozahlen mit rand() sind aber etwas tricky, da ja jede Zahl nur einmal vorkommen soll. Du kannst das z.B. so lösen:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <ctime>
    
    typedef std::vector<int> IntVec;
    
    IntVec ziehung(size_t ziehung, size_t gesamt);
    
    int main()
    {
    	srand(static_cast<unsigned int>(time(NULL)));
    
    	// 6 aus 49
    	IntVec zahlen = ziehung(6, 49);
    
    	for (IntVec::iterator it = zahlen.begin(); it != zahlen.end(); ++it)
    	{
    		std::cout << *it << std::endl;
    	}
    
    	return 0;
    }
    
    IntVec ziehung(size_t ziehung, size_t gesamt)
    {
    	IntVec zahlen;
    
    	for (unsigned int i = 1; i <= gesamt; ++i)
    	{
    		zahlen.push_back(i);
    	}
    
    	std::random_shuffle(zahlen.begin(), zahlen.end());
    	zahlen.erase(zahlen.begin() + ziehung, zahlen.end());
    
    	return zahlen;
    }
    


  • Das blöde ist nur, ich kann ja jetzt mit

    vector<int>LottoZahlen;
    

    nicht mehr

    cout << "Anzahl Eingeben: ";
    cin >> LottoZahlen;
    

    verwenden...
    Bei mir wird dann immer ein Fehler ausgegeben...



  • int LottoZahlen;
    
    cout << "Anzahl Eingeben: ";
    cin >> LottoZahlen; 
    
    vector<int> zahlen(LottoZahlen);
    

Anmelden zum Antworten