Hilfe bei Consolen-Anwendung



  • Ich habe unteranderem im Studium Informatik und bräuchte mal eure fachmännische Unterstützung.
    Ich bin totaler Anfänger in Sachen programmieren.Vielleicht hat ja einer von euch ein bisschen Zeit mir hierbei weiterzuhelfen.

    Wir haben jetzt folgende Aufabe bekommen:

    ^Aufgabenstellung: Verwendung einer Array-Variablen vom Typ vector

    Ihr Programm soll in der Lage sein, Lottozahlen (6 aus 49) plus Superzahl als jeweils ein „Tipp“ zu
    erzeugen, die sechs Lottozahlen zu sortieren und den gesamten Tipp auszugeben.
    Die zentrale Datenstruktur in Ihrem Programm ist das dynamisches Integer-Array (‚lotto’) vom
    Datentyp vector mit sieben Speicherplätzen.
    Die folgenden Funktionen, deren Prototyp im Folgenden gegeben wird, sind zu erstellen:
    //Funktionsprototypen
    void tippErzeugen(vector<int>&lotto);
    void tippSortieren(vector<int>&lotto);
    void vertausche(int& a, int& b);
    void tippAusgabe(vector<int>lotto);
    Das Programm ist als Konsolen-Anwendung mit der IDE TurboC++ zu realisieren.
    Funktion main()
    • Deklaration des dynamischen Arrays ‚lotto’ vom Datentyp vector mit sieben Speicherplätzen,
    • Setzen des Startwertes für den Pseudozufallsgenerator Æ Funktion: randomize()
    • In einer do{…}while()-Schleife werden Lottozahlen erzeugt, wenn der Benutzer auf Anfrage
    die ‚j’-Taste drückt. In der Schleife werden folgende Funktionen aufgerufen:
    void tippErzeugen(vector<int>&lotto);
    void tippSortieren(vector<int>&lotto);
    void tippAusgabe(vector<int>lotto);
    • Drückt der Benutzer eine andere Taste, wird das Programm mit der return-Anweisung
    verlassen.

    Funktion tippErzeugen():
    Die Grösse des Lottozahlen-Arrays kann über die Elementfunktion size() bestimmt werden:
    int size = lotto.size();
    • Deklaration der Integer-Variablen ‚zahl’ und ‚zaehler’ und der boolschen Variable
    ‚vorhanden’
    • In einer While-Schleife werden solange Zufallszahlen erzeugt, solange der Wert der Variablen
    ‚zaehler’ kleiner als der Wert der Variablen ‚size-1’ ist.
    o Erzeugen einer Zufallszahl im Bereich 1 … 49

    o For-Schleife und Alternativanweisung zur Kontrolle, ob die gerade erzeugte
    Zufallszahl vielleicht schon im Array gespeichert wurde
    o Falls die Zahl schon vorhanden ist, wird die Variable ‚vorhanden’ auf true gesetzt
    und die For-Schleife verlassen.
    o Gibt es den neuen Zufallszahlenwert noch nicht im Array, wird dieser im Array am
    Index ‚zaehler’ gespeichert und der Zähler ‚zaehler’ wird inkrementiert.
    o Für den nächsten Zyklus der While-Schleife muss die Variable ‚vorhanden’ wieder
    zurückgesetzt werden.
    o Erzeugen der Superzahl im Bereich von 0…9 und Speichern der Zahl im Array.

    Funktion tippSortieren():
    • Implementieren Sie den Bubble-Sort-Algorithmus (s. Vorlesungsskript) für Datensätze vom
    Typ int.
    • Ermitteln Sie die Array-Grösse mit der Elementfunktion size() Æ int size =
    lotto.size();
    • Die Superzahl sollte nicht mitsortiert werden!
    • Das Vertauschen sollte ebenfalls als Funktion implementiert werden.
    Funktion tippAusgabe():
    • Ermitteln Sie die Array-Grösse mit der Elementfunktion size() Æ int size =
    lotto.size();
    • Ausgabe der sechs Lottozahlen durch einen Tabulator voneinander
    getrennt in einer Zeile
    • Ausgabe der Superzahl: cout << " Superzahl: " << lotto[size-1];^

    Die Ausgabe sollte später so aussehen :

    ^Ich bin Ihre persoenliche Lottofee !

    4 6 12 28 36 38 Superzahl: 7

    Einen neuen Tipp erzeugen [j/n]

    1 6 31 37 39 40 Superzahl: 9^



  • Hallo

    Fang doch erstmal an und versuch die einzelnen Punkte Schritt für Schritt in Quellcode umzusetzen. Wenn du dann konkrete Fragen und Probleme hast werden wir dir gerne helfen. Niemand wird hier deine Hausaufgaben machen.

    Da du offenbar ein Konsolenprogramm schreiben sollst verschieb ich dich mal.

    bis bald
    akari



  • Dieser Thread wurde von Moderator/in akari aus dem Forum VCL (C++ Builder) in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke fürs verschieben !

    Das hier habe ich bis jetzt zusammengebastelt 😉

    //---------------------------------------------------------------------------
    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <conio.h>
    #include <stdlib.h>
    //---------------------------------------------------------------------------
    using namespace std;
    //---------------------------------------------------------------------------
    void tippErzeugen (vector<int>&lotto);
    void tippSortieren (vector<int>&lotto);
    void vertausche (int& a, int &b);
    void tippAusgabe (vector<int>lotto);
    //---------------------------------------------------------------------------
    main (void)
    
    {
    char c;
    vector<int>lotto(7 , 0);
    randomize();
    
    cout<< "Ich bin ihre persoenliche Lottofee !\n\n\n";
    
    do { 
    tippErzeugen (lotto); 
    tippSortieren (lotto); 
    tippAusgabe (lotto); 
    cout << endl << "Einen neuen Tipp erzeugen? [j/n]\n"; 
    c=getch(); 
    } 
    while(c=='j'); 
    } 
    
    //--------------------------------------------------------------------------- 
    void tippErzeugen (vector<int>&lotto) 
    { 
       int size = lotto.size(); 
       int zahl=0, zaehler=0; 
       bool vorhanden; 
       while(zaehler<size-1) 
       { 
          zahl=rand()%49+1; 
          vorhanden=false; 
          for(int i=0;i<size&&!vorhanden;i++) 
          { 
             if(zahl==lotto[i]) vorhanden=true; 
          } 
          if(!vorhanden) 
          { 
             lotto[zaehler++]=zahl; 
          } 
       } 
       lotto[zaehler]=rand()%9+1; 
    		}
    

    Wäre super wenn mir einer von euch weiterhelfen könnte.

    ps jetzt auch formatiert danke für den tip Th ..

    Greez ixuss



  • Am besten, du formatierst erst mal deinen Code mittels des C/C++ Buttons (Editieren deines Beitrags).

    Du mußt halt innerhalb der while-Schleife nochmals eine Schleife setzen, welche alle vorherigen Lottozahlen mit der aktuellen vergleicht und nur, wenn keine Übereinstimmung stattfindet, den Zähler erhöhen.

    Ansonsten such mal nach anderen Lotto-Programmen hier im Forum...



  • So würde es nach der Vorgabenlösung aussehen.
    So umständlich würde man das aber niemals machen.
    Einen vector kann man über sort sortieren. Da braucht man auch keine Funktion vertauschen (swap).

    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <conio.h>
    #include <stdlib.h>
    //---------------------------------------------------------------------------
    using namespace std;
    //---------------------------------------------------------------------------
    void tippErzeugen (vector<int>&lotto);
    void tippSortieren (vector<int>&lotto);
    void vertausche (int& a, int &b);
    void tippAusgabe (vector<int>&lotto);
    //---------------------------------------------------------------------------
    int main ()
    
    {
    char c;
    vector<int>lotto(7 , 0);
    randomize();
    
    cout<< "Ich bin ihre persoenliche Lottofee !\n\n\n";
    
    do {
    tippErzeugen (lotto);
    tippSortieren (lotto);
    tippAusgabe (lotto);
    cout << endl << "Einen neuen Tipp erzeugen? [j/n]\n";
    c=getch();
    }
    while(c=='j');
    }
    
    //---------------------------------------------------------------------------
    void tippErzeugen (vector<int>&lotto)
    {
       int size = lotto.size();
       int zahl=0, zaehler=0;
       bool vorhanden;
       while(zaehler<size-1)
       {
          zahl=rand()%49+1;
          vorhanden=false;
          for(int i=0;i<size&&!vorhanden;i++)
          {
             if(zahl==lotto[i]) vorhanden=true;
          }
          if(!vorhanden)
          {
             lotto[zaehler++]=zahl;
          }
       }
       lotto[zaehler]=rand()%9+1;
    }
    void tippSortieren (vector<int>&lotto)
    {
       int size=lotto.size();
       for(int i=0;i<size-1;i++)
       {
          for(int j=0;j<size-1;j++)
          {
             if(lotto[i]<lotto[j])
             {
                vertausche(lotto[i],lotto[j]);
             }
          }
       }
    }
    void vertausche (int& a, int &b)
    {
       int c=a;
       a=b;
       b=c;
    }
    void tippAusgabe(vector<int>&lotto)
    {
       int size=lotto.size();
       for(int i=0;i<size-1;i++)
       {
          cout << lotto[i] << "\t";
       }
       cout << endl << "Superzahl: " << lotto[size-1] << endl;
    }
    


  • Hey super danke hausaufgabenmacher 😉 👍

    Aber eine Sache ist mir noch nicht ganz kla.Wie funktioniert dieser Bubble Sort. Mir kommt es so vor als würde er von hinten nach vorn sortieren.Kann man den nicht auch anders schreiben ?

    irgendwie so (fänd ich irgendwie logischer,funktioniert aber nicht)

    void tippSortieren (vector<int>&lotto)
    {
       int size=lotto.size();
       for(int i=size-1;i>0;i--)
       {  cout<<lotto[i]<<endl;
    	  for(int j=0;j<i;j++)
    	  {
    		 if(lotto[j]>lotto[j+1])
    		 {
    			vertausche(lotto[i],lotto[j]);
    		 }
    	  }
       }
    

    Greez ixuss



  • Vllt. wollte dich der 'hausaufgabenmacher' nur testen -)

    Den BubbleSort-Algortihmus gibt es in den verschiedensten Varianten, aber wenn du ihn nicht wirklich selbst erstellen mußt, dann kannst du einfach folgendes benutzen (so wie 'hausaufgabenmacher' ja auch vorgeschlagen hat):

    #include <algorithm>
    
    void TippSortieren(vector<int> &v)
    {
      std::sort(v.begin(), v.end());
    }
    


  • #include <vector>
    #include <algorithm>
    #include <iostream>
    #include <iterator>
    
    using namespace std;
    
    int main()
    {
        srand(time(0));
        char c;
        vector<int> v(49);
        // Lotto Zahlen einfüllen
        for(int i = 0; i < v.size(); ++i) v[i] = i + 1;
    
        do{
            // schüttel ... schüttel ... schüttel
            random_shuffle(v.begin(), v.end());
            // sortieren
            sort(v.begin(), v.begin() + 6);
            copy(v.begin(), v.begin() + 6, ostream_iterator<int>(cout, " "));
            // und noch die Zusatzzahl
            cout << "   " << rand()%9+1 << endl;
            cout << "Einen neuen Tipp erzeugen? [j/n] "; 
            cin >> c;
        }while(c == 'j');
    }
    

    :xmas1: :xmas1:



  • @hausaufgabenmacher:

    #include <iostream>
    #include <vector>
    #include <cstdlib>
    #include <conio.h>
    #include <stdlib.h>
    

    gesehen und aufgehört deinen Code zu lesen. Scheinst 0 peil zu haben was du da machst ^^ Das einzige was mich noch wundert, dass er nicht Namensdoppelungen hat, da du den namespace std ja used. (std::rand, rand)


Anmelden zum Antworten