Aufgaben für C++



  • Hey Leute,
    ich programmiere bzw lerne jetzt schon ne zeit lang c++.
    hab mir auch schon zum beispiel ein Schiffe versenken oder Taschenrechner oder Geldautomat in der Konsole geschrieben.
    Fang jetzt auch mit dem Buch Qt 4.6 GUI Entwicklung mit C++ an Qt zu lernen.
    Jetzt wollte ich mal Fragen ob ihr Seiten geht oder einfach selber gute Übungsaufgaben bzw Programme kennt die ich mir noch Programmieren könnte als Übung.
    Darf auch ruhig was aufwändigeres sein.
    Dann würde ich nämlich sowas noch gern in der Konsole machen als Übung.

    Schonmal vielen Dank=)



  • fr33g schrieb:

    Jetzt wollte ich mal Fragen ob ihr Seiten geht oder einfach selber gute Übungsaufgaben bzw Programme kennt die ich mir noch Programmieren könnte als Übung.

    Schiffe versenken, Taschenrechner, Geldautomat mit Gui :p


  • Administrator

    Überleg dir was du brauchst und programmier es dir. Einmal halt nicht ins Inet gehen und was bereits fertiges runterladen 😉

    Ich habe mir zum Beispiel mal vor langem einen Terminplaner gebaut mit allem drum und dran. Hab den verwendet, bis ich dann von Outlook Express auf Thunderbird & Lightning umgestiegen bin 🙂

    Grüssli



  • Oki doki, dann überleg ich mir mal was, bzw verinnerliche erst mal Qt richtig und erstelle dann eine sinvolle anwendung=)

    Hab jetzt mal noch eben kurz Tic Tac Toe in der Konsole gemacht:-P



  • Ich bevorzuge immer kleine Spiel, um den Spaß nach einiger Zeit net zu verlieren.
    Es gibt ja 1000'de Pausenspiele wie "4 gewinnt" oder irgendwelche Klickspiele, wo man ne kleine Highscore hat.



  • Tolles Projekt hierfür: http://projecteuler.net



  • ok dankeschön, werds mir mal anschauen;-)



  • phor schrieb:

    Tolles Projekt hierfür: http://projecteuler.net

    Mit GUI-Programmierung haben die Aufgaben da aber nichts zu tun.
    Aber sonst eine nette Herausforderung für den Informatiker und Mathematiker.



  • ja und ich bleib schon bei dem ersten problem hängen, mein ergebnis stimmt nieee=(

    ja es müssen ja auch nicht umbedingt gui aufgaben oder projekte sein, können auch ruhig für die konsole sein um sich weiter zu entwickeln;-)



  • fr33g schrieb:

    Oki doki, dann überleg ich mir mal was, bzw verinnerliche erst mal Qt richtig und erstelle dann eine sinvolle anwendung=)

    Hab jetzt mal noch eben kurz Tic Tac Toe in der Konsole gemacht:-P

    Mal eben kurz gemacht?
    Kann ich mal einen Screenshot sehen oder sogar den Code.

    Gruß,

    Fred



  • Du kannst auch eine Adressenverwaltung schreiben. Also verschiedene Leute speichern (mit Namen, Strasse, PLZ, Wohnort, Telefonnummer, E-Mail, ...). Dann Funktionalität hinzufügen wie Einträge suchen, nach einem Kriterium sortieren, Einträge löschen, etc.

    Dabei hast du eine gute Gelegenheit, dich mit der STL auseinanderzusetzen. Du kannst verschiedene Komponenten davon einsetzen: Container für die Speicherung, Iteratoren zur Ausgabe von allen Adressen, Algorithmen für Dinge wie Sortieren oder Suchen. Ausserdem kannst du später leicht GUI hinzufügen. Schau einfach, dass du die Logik unabhängig von irgendwelchen GUI-Elementen schreibst.



  • Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was 😃



  • snake_game schrieb:

    Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was 😃

    Dann aber wenigstens mit der SDL... Konsole wäre ja voll wuäh 😃



  • Erst mal Danke für die Ideen;-)

    Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
    Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.

    Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:

    main.cpp

    #include <string>
    #include <iostream>
    #include <iomanip>
    #include <vector>
    #include "classFeld.h"
    #include "funktionen.h"
    
    using namespace std;
    
    int main()
    {
        cout << setw(60) << "Herzlich Willkommen zu Tic Tac Toe\n";
        cout << setw(56) << "Enter druecken zum Starten!";
        cin.get();
    
        vector<Feld> Felder(9);
    
        int x = 1;
        int y = 1;
        int k = 0;
        for ( int i = 0; i < 3; ++i )
        {
            x = 1;
            for ( int j = 0; j < 3; ++j )
            {
                Felder[k] = Feld(x,y);
                ++x;
                ++k;
            }
            ++y;
        }
    
        ausgabe(Felder);
    
        while(true)
        {
            setP1(Felder);
            ausgabe(Felder);
            if ( checkP1(Felder) )
                break;
            if ( draw(Felder) )
                break;
            setP2(Felder);
            ausgabe(Felder);
            if ( checkP2(Felder) )
                break;
            if ( draw(Felder) )
                break;
        }
    }
    

    funktionen.h

    #ifndef FUNTKIONEN_H_INCLUDED
    #define FUNTKIONEN_H_INCLUDED
    
    #include <vector>
    #include "classFeld.h"
    
     void ausgabe(std::vector<Feld>);
     void setP1(std::vector<Feld>&);
     void setP2(std::vector<Feld>&);
     bool checkP1(std::vector<Feld>);
     bool checkP2(std::vector<Feld>);
     bool draw(std::vector<Feld>);
    
    #endif // FUNTKIONEN_H_INCLUDED
    

    funktionen.cpp

    #include "classFeld.h"
    #include "funktionen.h"
    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    void ausgabe(vector<Feld> Felder)
    {
        int k = 0;
        for ( int i = 0; i < 3; ++i )
        {
            cout.width(41);
            for ( int j = 0; j < 3; ++j )
            {
                cout << Felder[k].getZeichen();
                ++k;
            }
            cout << "\n";
        }
    }
    
    void setP1(vector<Feld>& Felder)
    {
        cout << "Geben sie(P1) die x und y Achse an(1-3)\n";
        int x;
        int y;
        cin >> x;
        cin >> y;
    
        if ( ( x < 1) || ( x > 3 ) || ( y < 1 ) || ( y > 3 ) )
        {
            cout << "Ungueltige Eingabe!\n";
            setP1(Felder);
        }
    
        bool treffer = true;
        string zeichen = "X ";
        int i = 0;
    
        while  (true)
        {
            if ( ( Felder[i].getX() == x ) && ( Felder[i].getY() == y ) )
            {
                if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) )
                {
                    cout << "Dort wurde schon hingeschossen\n";
                    setP1(Felder);
                }
    
                Felder[i].setXX(treffer);
                Felder[i].setZeichen(zeichen);
                break;
            }
            ++i;
        }
    }
    
    void setP2(vector<Feld>& Felder)
    {
        cout << "Geben sie(P2) die x und y Achse an(1-3)\n";
        int x;
        int y;
        cin >> x;
        cin >> y;
    
        if ( ( x < 1) || ( x > 3 ) || ( y < 1 ) || ( y > 3 ) )
        {
            cout << "Ungueltige Eingabe!\n";
            setP1(Felder);
        }
    
        bool treffer = true;
        string zeichen = "O ";
        int i = 0;
    
        while  (true)
        {
            if ( ( Felder[i].getX() == x ) && ( Felder[i].getY() == y ) )
            {
                if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) )
                {
                    cout << "Dort wurde schon hingeschossen\n";
                    setP2(Felder);
                }
    
                Felder[i].setOO(treffer);
                Felder[i].setZeichen(zeichen);
                break;
            }
            ++i;
        }
    }
    
    bool checkP1(vector<Feld> Felder)
    {
        if ( ( Felder[0].getXX() == true ) && ( Felder[1].getXX() == true ) && ( Felder[2].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[3].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[5].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[6].getXX() == true ) && ( Felder[7].getXX() == true ) && ( Felder[8].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[0].getXX() == true ) && ( Felder[3].getXX() == true ) && ( Felder[6].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[1].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[7].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[2].getXX() == true ) && ( Felder[5].getXX() == true ) && ( Felder[8].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[0].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[8].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[2].getXX() == true ) && ( Felder[4].getXX() == true ) && ( Felder[6].getXX() == true ) )
        {
            cout << "P1 hat gewonnen!\n";
            return true;
        }
        return false;
    }
    
    bool checkP2(vector<Feld> Felder)
    {
        if ( ( Felder[0].getOO() == true ) && ( Felder[1].getOO() == true ) && ( Felder[2].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[3].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[5].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[6].getOO() == true ) && ( Felder[7].getOO() == true ) && ( Felder[8].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[0].getOO() == true ) && ( Felder[3].getOO() == true ) && ( Felder[6].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[1].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[7].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[2].getOO() == true ) && ( Felder[5].getOO() == true ) && ( Felder[8].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[0].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[8].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        else if ( ( Felder[2].getOO() == true ) && ( Felder[4].getOO() == true ) && ( Felder[6].getOO() == true ) )
        {
            cout << "P2 hat gewonnen!\n";
            return true;
        }
        return false;
    }
    
    bool draw(vector<Feld> Felder)
    {
        int check = 0;
        for ( int i = 0; i < 9; ++i )
        {
                if ( ( Felder[i].getXX() == true ) || ( Felder[i].getOO() == true ) )
                    ++check;
    
        }
        if ( check == 9 )
        {
            cout << "Unentschieden!\n";
            return true;
        }
        return false;
    }
    

    classFeld.h

    #ifndef CLASSFELD_H_INCLUDED
    #define CLASSFELD_H_INCLUDED
    
    #include <string>
    
    class Feld
    {
        public:
            // Konstruktoren und Destruktor
            Feld();
            Feld(int x, int y);
            ~Feld();
            // Zugriffsfunktionen
            int getX() const { return itsX; }
            void setX(int x);
            int getY() const { return itsY; }
            void setY(int y);
            bool getXX() const { return itsXX; }
            void setXX(bool XX);
            bool getOO() const { return itsOO; }
            void setOO(bool OO);
            std::string getZeichen()const { return itsZeichen; }
            void setZeichen(std::string zeichen);
    
        private:
            int itsX;
            int itsY;
            bool itsXX;
            bool itsOO;
            std::string itsZeichen;
    };
    
    #endif // CLASSFELD_H_INCLUDED
    

    classFeld.cpp

    #include "classFeld.h"
    #include <string>
    
    using namespace std;
    
    Feld::Feld()
    {
    }
    
    Feld::Feld(int x, int y):
    itsX(x), itsY(y)
    {
        itsXX = false;
        itsOO = false;
        itsZeichen = ". ";
    }
    
    Feld::~Feld()
    {
    }
    
    void Feld::setX(int x)
    {
        itsX = x;
    }
    
    void Feld::setY(int y)
    {
        itsY = y;
    }
    
    void Feld::setXX(bool XX)
    {
        itsXX = XX;
    }
    
    void Feld::setOO(bool OO)
    {
        itsOO = OO;
    }
    
    void Feld::setZeichen(string zeichen)
    {
        itsZeichen = zeichen;
    }
    

    Glaubst dus jetzt 😉
    Gut ich weiß die Funktion zum prüfen ob einer gewonnen hat hätte ich besser aufsetzen können:D


  • Administrator

    Kóyaánasqatsi schrieb:

    snake_game schrieb:

    Ein kleines snakegame wäre auch nicht schlecht, da bewegt sich auch was 😃

    Dann aber wenigstens mit der SDL... Konsole wäre ja voll wuäh 😃

    Lieber mit SFML, da hat man zumindest C++ und die Bibliothek ist einfacher zu verwenden 😉
    Kann man allerdings auch gut über Qt oder ein solches Framework machen. Einen Timer setzen und bei jedem Tick halt die Logik berechnen und zeichnen.

    Grüssli



  • @Dravere
    Ich habe extra SDL gesagt, weil ich finde, dass die SDL einfach einfacher ist... Ich finde das man als Anfänger dort die Abläufe schneller versteht 🙂


  • Administrator

    Kóyaánasqatsi schrieb:

    @Dravere
    Ich habe extra SDL gesagt, weil ich finde, dass die SDL einfach einfacher ist... Ich finde das man als Anfänger dort die Abläufe schneller versteht 🙂

    Man versteht vielleicht schneller, wie es hinter der Bibliothek aussieht, aber die Verwendung der Bibliothek ist bei weitem nicht einfacher. Siehe zum Beispiel auch hier:
    http://www.sfml-dev.org/forum/viewtopic.php?p=11355#11355
    (auch die Beiträge davor und danach, war nur eine der guten Antworten auf den SDL Code)

    Die Frage ist nun:
    1. Will man die Bibliothek verwenden oder verstehen wie sie funktioniert? Normalerweise will ich sie in erster Linie verwenden 😉
    2. Was heisst "schneller"? Gut, du verstehst schneller wie die SDL Bibliothek funktioniert, dass geht aber immer noch deutlich länger, bis du mit SFML bereits schon gut funktionierende aktzeptable Ergebnisse hast. Zudem musst du bei SDL lernen, wie sie funktioniert, sonst kannst du mit SDL nicht umgehen, während bei SFML dir alles schön verborgen bleibt, du die Bibliothek aber trotzdem prima verwenden kannst.

    Hmm, wird nun aber sehr Off-Topic ... und ist natürlich vielleicht auch etwas subjektiv *g*

    Grüssli



  • Alleine schon weil SFML in modernem C++ und SDL in C geschrieben ist, würde ich mir wenn schon ersteres anschauen. Der Threadtitel heisst ja "Aufgaben für C++". Von den anderen Vorteilen von SFML mal ganz abgesehen...

    Aber um sich in C++ weiterzubilden, kommt man meines Erachtens schneller zu Resultaten, wenn man sich auf die Sprache konzentriert und Grafik oder GUI vorerst beiseite lässt.



  • fr33g schrieb:

    Erst mal Danke für die Ideen;-)

    Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
    Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.

    Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:

    Und den Code hast Du mal eben geschrieben?
    Du verarscht uns hier, ich glaube Du willst Dich hier nur feiern lassen.
    In meinen Augen bist Du ein Voll-Spinner.
    Och man, ich weiß nicht mehr was ich programmieren soll, heute Vormittag habe ich SP3 programmiert jetzt bin ich an Windows 7 dran, nur was soll ich morgen machen?
    Du hast doch einen an der Waffel.



  • Fred Marder schrieb:

    fr33g schrieb:

    Erst mal Danke für die Ideen;-)

    Ich hab mir schonmal so ein kleines Adressbuch geschrieben.
    Jedoch könnt ich das natürlich noch um die Sachen erweitern die du gesagt hast, sprich die Daten dann natürlich in ner Datei speichern, und nicht nur nach Name suchen, sondern auch nach den anderen Kritieren, und eine geordnete Ausgabe.

    Also wenn dus nicht glaubst, hier ist der Code von Tic Tac Toe:

    Und den Code hast Du mal eben geschrieben?
    Du verarscht uns hier, ich glaube Du willst Dich hier nur feiern lassen.
    In meinen Augen bist Du ein Voll-Spinner.
    Och man, ich weiß nicht mehr was ich programmieren soll, heute Vormittag habe ich SP3 programmiert jetzt bin ich an Windows 7 dran, nur was soll ich morgen machen?
    Du hast doch einen an der Waffel.

    Aber sonst gehts noch 😮
    Natürlich hab ich das selber geschrieben, in ner kurzen Zeit.
    Was ist eigentlich dein Problem, du wolltest doch das ich den Code reinschreib und dass habe ich jetzt gemacht, wenn du es mir net glaubst kann ich auch nichts dafür.
    Brauchst mich hier aber net dumm anmachen und beleidigen, nur weil du vll probleme mit dir selber hast.
    Also bitte 👍

    Edit:
    Wenn mir sagst wo ich screenshots hochladen kann, kann ich dir gern von jeder einzelnen datei n screenshot machen, wo steht wann die datei erstellt wurde und dann das letzte mal geändert.
    Hat genau 1 Stunde und 21 Minuten gedauert!

    So:
    http://img99.imageshack.us/img99/271/bitteschn.png

    Wenn es mir jetzt immer noch net glaubst ist es mir auch egal....
    Ich weiß ja das es stimmt, außerdem machst du so als wie ich mich hier aufspielen will, ich hab legidlich nach Programmideen gefragt und du wolltest doch den Code sehen.
    Komm erst mal mit dir selber klar 🙂 😃

    Ich weiß ja nicht warum du hier im Forum unterwegs bist, aber ich bin hier um was zu lernen und meine Programmierkentnisse zu verbessern, um Hilfe zu bekommen wenn man nicht mehr weiter weiß.
    Klar freut man sich wenn jemand sagt, der Code ist gut oder so, aber ich bin nicht hier um Anerkennung zu bekommen, dafür hab ich eine Freundin, Familie und Freunde im echten Leben.
    Weiß ja nicht vielleicht hast du keine Freunde oder so und suchst nur hier Aufmerksamkeit 😉 ich auf jeden Fall nicht.

    SO aber nun reicht es auch wieder, ist schon genug of Topic:-P

    Gruß fr33g


Anmelden zum Antworten