Lottoprogramm

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Lottoprogramm

    Hey Community,

    ich muss derzeit für die Schule ein Lottoprogramm schreiben, es funktioniert alles aber ich habe noch etwas Probleme mit der Ausgabe.


    Hier der Quellcode:

    //Headerdateien
    #include <iostream>
    #include <time.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    using namespace std;

    //**************************************************************************************************
    //Prototypen
    void tippen(int*);
    void ausgeben(int*);
    void ziehen(int*);
    void sortieren(int*);
    void auswerten(int*,int*);
    bool doppelt(int*,int);
    void gotoxy(int x, int y);

    //**************************************************************************************************




    //**************************************************************************************************
    //Hauptprogramm
    int main()
    {

    //Variablen und Arrays deklarieren
    int ar_tipp[6];
    int ar_ausgeben[6];
    int ar_lotto[6];
    char wiederholen;
    int zeichen;

    system("cls");



    //Funktionsaufruf "Tippen"

    for(int i=1;i<=8;i++)//Ecke Links oben
    {
    gotoxy(15,i);//position des Koersers
    zeichen= 201;
    cout<<zeichen<<"\n";
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    gotoxy(15,1);
    cout<<"xxx xxxx xxxxxxxxx xxxxxxxxx xxxx " <<endl;
    gotoxy(15,2);
    cout<<"xxx xx xx xxxxxxxxx xxxxxxxxx xx xx "<<endl;
    gotoxy(15,3);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,4);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,5);
    cout<<"xxx xx xx xx xx xx xx " <<endl;
    gotoxy(15,6);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,7);
    cout<<"xxxxxxx xx xx xx xx xx xx " <<endl;
    gotoxy(15,8);
    cout<<"xxxxxxx xxxx xx xx xxxx "<<endl;
    }
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
    gotoxy(30,11);
    cout<<"Willkommen zum Lottospiel."<<endl;
    gotoxy(25,13);
    cout<<"Bitte geben sie 6 von 49 Zahlen ein"<<endl;

    tippen (ar_tipp);


    ziehen (ar_lotto);

    auswerten (ar_tipp, ar_lotto);
    cout<<"\nMoechten sie nochmal spielen? -J/N"<<endl;
    cin>>wiederholen;
    if(wiederholen=='j')
    {

    main();
    }



    return 0;
    }


    //**************************************************************************************************
    //Unterprogramme

    //Unterprogramm "Tippen" usw.
    void tippen(int* ar_tipp)
    {





    for(int i=0; i<6; i++)
    { gotoxy(2, i+15);

    cout<<i+1<<". Tipp: ";
    cin>>ar_tipp;
    if(ar_tipp[i]<1 || ar_tipp[i]>49)
    {
    gotoxy(5,22);

    cout<<"Der gewuenschte Tipp ist nicht gueltig"<<endl;
    i--;

    }

    if(doppelt(ar_tipp,i))
    {
    gotoxy(5,22);

    cout<<"Die Zahl wurde bereits schon eingegeben! Bitte Eingabe wiederholen."<<endl;
    i--;

    }



    }



    system("cls");
    ausgeben(ar_tipp);



    }


    //**************************************************************************************************
    //Unterprogramm "Ausgeben" usw.

    void ausgeben(int* ar_ausgeben)
    {
    int temp1;
    int zeichen;

    for(int i=1;i<=8;i++)//Ecke Links oben
    {
    gotoxy(15,i);//position des Koersers
    zeichen= 201;
    cout<<zeichen<<"\n";
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    gotoxy(15,1);
    cout<<"xxx xxxx xxxxxxxxx xxxxxxxxx xxxx " <<endl;
    gotoxy(15,2);
    cout<<"xxx xx xx xxxxxxxxx xxxxxxxxx xx xx "<<endl;
    gotoxy(15,3);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,4);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,5);
    cout<<"xxx xx xx xx xx xx xx " <<endl;
    gotoxy(15,6);
    cout<<"xxx xx xx xx xx xx xx"<<endl;
    gotoxy(15,7);
    cout<<"xxxxxxx xx xx xx xx xx xx " <<endl;
    gotoxy(15,8);
    cout<<"xxxxxxx xxxx xx xx xxxx "<<endl;
    }
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14);
    gotoxy(30,11);
    cout<<"Willkommen zum Lottospiel."<<endl;
    gotoxy(25,13);
    cout<<"Bitte geben sie 6 von 49 Zahlen ein"<<endl;

    cout<<"\nIhr Tipp:"<<endl;

    for(int i=0; i<6; i++)
    {
    for(int j=0; j<6;j++)
    {
    if(ar_ausgeben[j]>ar_ausgeben[j+1])
    {
    temp1=ar_ausgeben[j];
    ar_ausgeben[j]=ar_ausgeben[j+1];
    ar_ausgeben[j+1]=temp1;
    }
    }
    }
    for(int k=0; k<6;k++)
    {
    cout<<k+1<<". Zahl= "<<ar_ausgeben[k]<<"\n"<<endl;
    }



    }


    //**************************************************************************************************
    //Unterprogramm "Ziehen" usw.
    void ziehen(int* ar_lotto)
    {


    srand((unsigned)time(NULL));//Zufallszahlengenerator starten.


    for(int i=0;i<6; i++)
    {
    ar_lotto[i]=rand()%49+1;



    if(doppelt(ar_lotto,i))
    {
    i--;
    }
    }
    sortieren(ar_lotto);

    }


    //**************************************************************************************************
    //Unterprogramm "Sortieren" usw.
    void sortieren(int* ar_lotto)
    {

    int temp;
    int zeichen;
    for(int l=0; l<1; l++)
    {




    cout<<"Lottozahlen:";
    {




    for(int i=0; i<6; i++)
    {
    for(int j=0; j<6;j++)
    {
    if(ar_lotto[j]>ar_lotto[j+1])
    {
    temp=ar_lotto[j];
    ar_lotto[j]=ar_lotto[j+1];
    ar_lotto[j+1]=temp;
    }
    }
    }
    }



    for(int k=0; k<6;k++)

    {


    cout<<"\n"<<k+1<<". Zahl= "<<ar_lotto[k]<<endl;


    }


    }
    }



    //**************************************************************************************************
    //Unterprogramm "Auswerten" usw.
    void auswerten(int* ar_tipp,int* ar_lotto)
    {

    int k=0;
    for(int i=0; i<6; i++)
    {

    for(int j=0; j<6; j++)
    {
    if(ar_tipp[i]==ar_lotto[j])
    {

    k++;
    }
    }
    }


    cout<<"\n Sie haben "<<k<<" richtige Zahlen";
    }



    //**************************************************************************************************
    //Unterprogramm "Doppelt" usw.
    bool doppelt(int* ar_zahlen ,int i)
    {
    if(i>0)
    {
    for(int j=0; j<=i-1; j++)
    {
    if(ar_zahlen[j]==ar_zahlen[i])
    {
    return(true);
    }
    }

    }
    return(false);

    }
    void gotoxy(int xpos, int ypos)
    {
    COORD scrn;
    HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
    scrn.X = xpos; scrn.Y = ypos;
    SetConsoleCursorPosition(hOuput,scrn);
    }



    //True oder false

    Es geht um diese Stelle:

    ********************
    //Unterprogramm "Sortieren" usw.
    void sortieren(int* ar_lotto)
    {

    int temp;
    int zeichen;
    for(int l=0; l<1; l++)
    {




    cout<<"Lottozahlen:";
    {




    for(int i=0; i<6; i++)
    {
    for(int j=0; j<6;j++)
    {
    if(ar_lotto[j]>ar_lotto[j+1])
    {
    temp=ar_lotto[j];
    ar_lotto[j]=ar_lotto[j+1];
    ar_lotto[j+1]=temp;
    }
    }
    }
    }



    for(int k=0; k<6;k++)

    {


    cout<<"\n"<<k+1<<". Zahl= "<<ar_lotto[k]<<endl;


    }


    }
    }


    Ich hätte gern die Lottozahlen Rechts neben den getippten Zahlen. Ich habe mir vorgestellt das dies mit gotoxy(); möglich wäre, jedoch klappt das nicht so wie ich es mir denke. Könnt ihr mir vielleicht helfen?

    Mit freundlichen Grüßen

    Manu/Explode
  • Warum weigerst du dich den Quelltext übersichtlich zu formatieren, so das wir den besser lesen und begreifen können?
    Hier ein paar Kommentare im Quelltext.

    Quellcode

    1. if(wiederholen=='j')
    2. {
    3. main(); // ISO verbietet diesen Quelltext, nutze andere Schleifen
    4. }
    5. return 0;
    6. }
    7. //**************************************************************************************************
    8. //Unterprogramme
    9. //Unterprogramm "Tippen" usw.
    10. void tippen(int* ar_tipp)
    11. {
    12. for(int i=0; i<6; i++)
    13. { gotoxy(2, i+15);
    14. cout<<i+1<<". Tipp: ";
    15. cin>>ar_tipp; // Fehler
    Alles anzeigen


    Mit welchem Compiler hast du das übersetzt?

    Die Mischung von C und C++ macht oft Probleme. Entscheide dich entweder für C oder C++ um potentielle Fehler zu verringern.
    Wenn du C++ Container nutzt, kannst du den Quelltext deutlich kürzer schreiben.
  • Hier etwas zu Compiler, damit du weisst was das ist:
    easy-coding.de/wiki/c-cpp-d/ide.html
    Also Code::Blocks ist eine IDE unter der zig verschiedene Compiler laufen können.

    Möglichkeiten zur optischen Darstellung gibt es mehrere:
    Einmal mit gotoxy

    Dann mit Zwischenspeichern der Zahlen und in
    C mit printf = formatierte Ausgabe
    C++ mit iomanip

    Oder, wenn du die Zahlen in ein Array so gross wie deine Textkonsole an den entsprechenden Positionen schreibst und das Array entsprechend ausgibst.

    Es gibt sicher noch andere Varianten. Aber kannst dich ja erst an einer der aufgeführten versuchen.
  • Lottoprogramme gibt es einige :D

    Kannst ja mal versuchen folgendes deinem Lehrer zu erklären:

    Quellcode

    1. #include <iostream>
    2. #include <set>
    3. #include <cstdlib>
    4. #include <ctime>
    5. int main()
    6. {
    7. std::set<short> tipp;
    8. std::set<short> zahlen;
    9. srand(static_cast<int>(time(NULL)));
    10. while(zahlen.size()<5)
    11. zahlen.insert(rand()%45 + 1);
    12. while(tipp.size()<5)
    13. {
    14. std::cout << "Bitte Zahl/Tip eingeben: ";
    15. short ins;
    16. std::cin >> ins;
    17. tipp.insert(ins);
    18. }
    19. for(int idx=0; idx<9; ++idx)
    20. {
    21. for(int zdx=1; zdx<6; ++zdx)
    22. {
    23. std::cout.width(2);
    24. if(zahlen.find(idx*5+zdx)!= zahlen.end())
    25. std::cout<<'X'<<' ';
    26. else
    27. std::cout<<idx*5+zdx<<' ';
    28. }
    29. std::cout<< " | ";
    30. for(int tdx=1; tdx<6; ++tdx)
    31. {
    32. std::cout.width(2);
    33. if(tipp.find(idx*5+tdx)!= tipp.end())
    34. std::cout<<'X'<<' ';
    35. else
    36. std::cout<<idx*5+tdx<<' ';
    37. }
    38. std::cout<<'\n';
    39. }
    40. return 0;
    41. }
    Alles anzeigen


    Da könnte man sicher noch die eine oder andere Optimierung vornehmen :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von bcc-fan ()

  • Keine Ahnung von welchem Quelltext du schreibst, das er fertig sei.
    Der den du oben zeigst, sollte noch mal gründlich überarbeitet werden. Einmal lässt der sich nur nach kleinen Änderungen compilieren und zweitens verstehen ich nicht alles was das Ergebnis dann auf dem Bildschirm ausgibt.

    Echt ein stramme Leistung Quelltext sehen und 10 Minuten später schon eine Antwort ;)

    Quellcode

    1. std::cout.width(2);


    Schau dir mal an was die Zeile macht.