Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Exercices] Venez vous entraîner !

(v2)

    9 octobre 2011 à 13:19:19

    J'ai pas dû comprendre ta phrase alors :p
    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2011 à 11:50:07

      Edit de mon code sur l'exercice Biblio++.

      J'ai rajouté une classe qui "gère" l'application (saisie utilisateur et lancement des actions correspondantes).
      J'ai aussi changé l'utilisation de std::vector en std::list, ce qui m'a valu un peu de reflexion sur les itérateurs, mais rien d'insurmontable.

      Voili voilou, je m'attaque desormais au niveau 3 ^^
      • Partager sur Facebook
      • Partager sur Twitter
        11 octobre 2011 à 19:10:54

        Pas mal du tout ! Bon courage pour le niveau 3 :)
        • Partager sur Facebook
        • Partager sur Twitter
          12 octobre 2011 à 16:33:56

          Bonjour,
          Je voulais vous montrer mon code pour l'exo "Site Du Zero" de Nanoc :

          Main.cpp


          <secret>
          #include <iostream>
          #include <cstdlib>
          #include "TutoLib.hpp"
          
          using namespace std;
          
          int main()
          {
              //L'ensemble des tutos
              VosTutos sdz;
          
              //Un Big-Tuto
              BigTuto Big("Le C++ pour les nuls"); //Nom : "Le C++ pour les nuls"
          
              MiniTuto Chap1("Les bases", 5); //Nom : "Les bases", Nb de parties : 5
              MiniTuto Chap2("Notions Avancées", 6);
              MiniTuto Chap3("Index", 10);
          
              Big.AddChapter(Chap1);
              Big.AddChapter(Chap2);  //On insert les 3 mini-tutos dans le big-tuto
              Big.AddChapter(Chap3);
          
              //Mini-Tutos
              MiniTuto Mini1("[C++] Les templates", 7);
              MiniTuto Mini2("[C++] Les TP concrets", 4);
          
              //Articles
              Article Boost("Boost", "www.boost.org");  //Nom : "Boost", Lien : "www.boost.org"
              Article SFML("SFML", "www.sfml-dev.org");
          
              //A enlever/modifier si vous n'etes pas sous windows
              system("Pause");
              cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
          
              //SDZ
              sdz.Add(Big); //On ajoute le Big-Tuto grâce à "Add()"
              sdz + Mini1;  //On ajoute le Mini-Tuto grâce à "+"
              sdz + Mini2;  //(Juste pour ecrire plus vite  )
              sdz.Add(Boost);
              sdz.Add(SFML);
          
              //Affichage des tutos
              sdz.Afficher();
          
              //Suppression des tutos
              sdz.Sup(1); // Supprimme le Tuto n°1 (Le BigTuto) grâce à "Sup()"
              sdz - 3; // Suppression les 3 derniers tutos (Mini1, Mini2, Boost)
              sdz --; //Supprimme le dernier tuto(SFML)
              sdz - 100; //Vide les tutos 
          
              //A enlever/modifier si vous n'etes pas sous windows
              system("Pause");
              cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
              return 0;
          }
          
          </secret>

          Tutos.hpp :


          <secret>
          #ifndef TUTOS_HPP_INCLUDED
          #define TUTOS_HPP_INCLUDED
          
          #include <string>
          #include <vector>
          
          class Tuto;
          class BigTuto;
          class MiniTuto;
          class Article;
          
          class Tuto
          {
              public :
              Tuto(std::string _name);
              virtual ~Tuto()=0;
              std::string Name();
              virtual void Display();
          
              protected :
              void Creation();
              void Destruction();
              std::string mName;
          };
          
          class BigTuto : public Tuto
          {
              public :
              BigTuto(std::string _name);
              ~BigTuto();
              void AddChapter(MiniTuto & _Chap);
              void Display();
          
              protected :
              std::vector<MiniTuto> mChapter;
          };
          
          class MiniTuto : public Tuto
          {
              public :
              MiniTuto(std::string _name, unsigned int _numberOfChap);
              ~MiniTuto();
              void Display();
              void DisplayForBigTuto();
          
              protected :
              unsigned int mNumberOfChapter;
          };
          
          class Article : public Tuto
          {
              public :
              Article(std::string _name, std::string _link);
              ~Article();
              void Display();
          
              protected :
              std::string mLink;
          };
          
          #endif // TUTOS_HPP_INCLUDED
          
          </secret>

          Tutos.cpp :


          <secret>
          #include "Tutos.hpp"
          
          #include <iostream>
          
          Tuto::Tuto(std::string _name) : mName(_name)
          {}
          Tuto::~Tuto()
          {}
          std::string Tuto::Name()
          {return mName;}
          void Tuto::Creation()
          {
              std::cout << " '" << mName << "' : Creation" << std::endl;
          }
          void Tuto::Destruction()
          {
              std::cout << " '" << mName << "' : Destruction" << std::endl;
          }
          void Tuto::Display()
          {
              std::cout << "TITRE : " << mName << std::endl;
          }
          
          BigTuto::BigTuto(std::string _name) : Tuto(_name)
          {
              std::cout << "Big-Tuto"; Tuto::Creation();
          }
          BigTuto::~BigTuto()
          {
              std::cout << "Big-Tuto"; Tuto::Destruction();
          }
          void BigTuto::AddChapter(MiniTuto & _chap)
          {
              mChapter.push_back(_chap);
              std::cout << "Big-Tuto '" << mName << "' : Ajout de chapitre '"
                      << _chap.Name() << "'" << std::endl;
          }
          void BigTuto::Display()
          {
              std::cout << "Big-Tuto" << std::endl;
              Tuto::Display();
              std::cout << "+\tNombre de chapitre : " << mChapter.size() << std::endl;
              for(size_t i(0); i < mChapter.size(); ++i)
                  mChapter.at(i).DisplayForBigTuto();
          }
          
          MiniTuto::MiniTuto(std::string _name, unsigned int _numberOfChap) :
                  Tuto(_name), mNumberOfChapter(_numberOfChap)
          {
              std::cout << "Mini-Tuto"; Tuto::Creation();
          }
          MiniTuto::~MiniTuto()
          {
              std::cout << "Mini-Tuto"; Tuto::Destruction();
          }
          void MiniTuto::Display()
          {
              std::cout << "Mini-Tuto" << std::endl;
              Tuto::Display();
              std::cout << "+\tNombre de sous-parties : " << mNumberOfChapter << std::endl;
          }
          void MiniTuto::DisplayForBigTuto()
          {
              std::cout << "+\tMini-Tuto" << std::endl << "\t";
              Tuto::Display();
              std::cout << "+\t+\tNombre de sous-parties : " << mNumberOfChapter << std::endl;
          }
          
          Article::Article(std::string _name, std::string _link) :
                  Tuto(_name), mLink(_link)
          {
              std::cout << "Article"; Tuto::Creation();
          }
          Article::~Article()
          {
              std::cout << "Article"; Tuto::Destruction();
          }
          void Article::Display()
          {
              std::cout << "Article" << std::endl;
              Tuto::Display();
              std::cout << "+\tLien : " << mLink << std::endl;
          }
          
          </secret>

          VosTutos.hpp :


          <secret>
          #ifndef TUTOLIB_HPP_INCLUDED
          #define TUTOLIB_HPP_INCLUDED
          
          #include "Tutos.hpp"
          
          class VosTutos
          {
              public :
              VosTutos();
              ~VosTutos();
              void Add(Tuto& tuto);
              void operator+(Tuto& tuto);
              void Sup(int index);
              void operator-(unsigned int index);
              void operator--(int);
              void Afficher();
          
              protected:
              std::vector<Tuto*> mTutos;
          };
          
          #endif // TUTOLIB_HPP_INCLUDED
          
          </secret>

          Et enfin

          VosTutos.cpp :


          <secret>
          #include "TutoLib.hpp"
          
          #include <iostream>
          
          VosTutos::VosTutos()
          {}
          VosTutos::~VosTutos()
          {}
          void VosTutos::Add(Tuto& tuto)
          {
              *this + tuto;
          }
          void VosTutos::operator+(Tuto& tuto)
          {
              mTutos.push_back(&tuto);
              std::cout << "Vos Tutos : Ajout du tuto '" << tuto.Name() << "'" << std::endl;;
          }
          void VosTutos::Sup(int index)
          {
              try
              {
                  std::cout << "Le tuto '" << mTutos.at(index-1)->Name() << "' a bien ete supprime" << std::endl;
                  mTutos.erase(mTutos.begin() + index-1);
              }
              catch(...)
              {
                  std::cout << "Pas de tuto a cet emplacement" << std::endl;
              }
          }
          void VosTutos::operator-(unsigned int index)
          {
              if(index > mTutos.size())
                  index = mTutos.size();
              int diff = mTutos.size() - (index);
              for(unsigned int i(mTutos.size()); i > diff; --i)
                  Sup(i);
          }
          void VosTutos::operator--(int)
          {
              if(!mTutos.empty())
                  mTutos.erase(mTutos.end()-1);
          }
          void VosTutos::Afficher()
          {
              for(unsigned int j(0); j < mTutos.size(); ++j)
              {
                  std::cout<< j+1 << ") ";
                  mTutos.at(j)->Display();
              }
          }
          
          </secret>


          Voila, il est facile à utiliser, pas mal de solutions pour une même action (cf. : Supprimmer/Ajouter des tutos)
          Je pense rajouter une base de donnée, mais j'ai pas forcement le temps/envie de le faire ^^ Alors je verrais.

          Toutes critiques sont acceptées et seront prisent en compte ;)
          Merci d'avance.
          Et merci à Nanoc pour l'exo :p
          • Partager sur Facebook
          • Partager sur Twitter
            24 octobre 2011 à 13:47:54

            J'ai aussi un code pour le Javaquarium. Vous le voulez?
            C'est une des solutions possible, pas la meilleure, pas la pire ^^
            Je la poste?
            • Partager sur Facebook
            • Partager sur Twitter
              24 octobre 2011 à 15:47:33

              On est avide de la lire :miam: ;)
              • Partager sur Facebook
              • Partager sur Twitter
                24 octobre 2011 à 16:06:10

                Ah ok, faut juste que je la retrouve (c'est vieux ^^ )

                EDIT : Voila!

                Main.cpp:


                #include <iostream>
                #include <iomanip>
                #include "Fish.hpp"
                
                using namespace std;
                
                void wait(int seconds);
                void clean();
                
                int main()
                {
                    srand(time(NULL));
                
                    vector<Seaweed> seaweed;
                    seaweed.resize(10, Seaweed());
                    vector<Fish> fish;
                    fish.push_back(Fish("Number1", "Thon", Fish::MALE, Fish::CARNIVOROUS));
                    fish.push_back(Fish("Frank", "Thon", Fish::HERMAPHRODITE, Fish::HERBIVOROUS));
                    fish.push_back(Fish("Hellena", "Thon", Fish::FEMALE, Fish::OMNIVOROUS));
                
                    bool loop = true;
                    int numberOfLaps = 0;
                    while(loop)
                    {
                        clean();
                
                        //Killing Seaweeds
                        for(unsigned int i = 0; i < seaweed.size(); ++i)
                        {
                            if(!seaweed.at(i).Alive())
                                seaweed.erase(seaweed.begin() + i);
                        }
                
                        if(numberOfLaps >= 30)
                            loop = false;
                
                        //Fishes are eating and reproducing
                        for(unsigned int i = 0; i < fish.size(); ++i)
                        {
                            for(unsigned int j = 0; j < seaweed.size(); ++j)
                            {
                                if(!seaweed.at(j).Alive())
                                    seaweed.erase(seaweed.begin() + j);
                            }
                            if(fish.at(i).GetLife() <= 5)
                            {
                                fish[i].Eat(fish, seaweed);
                            }
                            else
                            {
                                unsigned int index;
                                do
                                {
                                    index = rand()/(double)RAND_MAX * fish.size();
                                }while(index == i);
                                try
                                {
                                    fish.push_back(fish.at(i).MakeKid(fish.at(index)));
                                }
                                catch(std::string)
                                {
                                }
                            }
                        }
                        //Displaying Fishes
                        for(unsigned int i = 0; i < fish.size(); ++i)
                        {
                            if(fish.at(i).Alive())
                                fish.at(i).Display();
                            else
                            {
                                fish.erase(fish.begin() + i);
                                --i;
                            }
                        }
                        //make evolutions on fishes (-life, +age)
                        for(unsigned int i = 0; i < fish.size(); ++i)
                        {
                            fish.at(i).Next();
                        }
                        wait(1);
                        clean();
                        //erasing and create seaweeds and display
                        for(unsigned int i = 0; i < seaweed.size(); ++i)
                        {
                            if(!seaweed.at(i).Alive())
                            {
                                seaweed.erase(seaweed.begin() + i);
                            }
                            else
                            {
                                cout << "Seaweed no. " << setw(4) << i+1 << setw(3) << " : " << setw(10) << seaweed[i].GetLife()
                                        << " HP" << setw(10) << seaweed[i].GetAge() << " YO" << endl;
                                seaweed.at(i).Next();
                                try
                                {
                                    seaweed.push_back(seaweed.at(i).MakeKid());
                                }
                                catch(std::string)
                                {
                                }
                            }
                        }
                        wait(1);
                        numberOfLaps++;
                    }
                    return 0;
                }
                void wait ( int seconds )
                {
                  clock_t endwait;
                  endwait = clock () + seconds * CLOCKS_PER_SEC ;
                  while (clock() < endwait) {}
                }
                void clean()
                {
                    cout << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" << endl;
                }
                

                Fish.hpp:


                #ifndef FISH_HPP_INCLUDED
                #define FISH_HPP_INCLUDED
                
                #include <iostream>
                #include <vector>
                #include <string>
                #include <cstdlib>
                #include <ctime>
                #include <iomanip>
                
                class WaterElement;
                class Fish;
                class Seaweed;
                
                class WaterElement
                {
                    public :
                    WaterElement();
                    virtual ~WaterElement();
                
                    virtual bool Alive()=0;
                
                    int GetLife() const;
                    int GetAge() const;
                    void LooseLife(int);
                
                    void GrowAge();
                    void AddLife();
                    void SetMaxAge(int);
                    void SetMaxLife(int);
                
                    virtual void Next()=0;
                
                    virtual void Display();
                
                    protected:
                    int mLife;
                    int mMaxLife;
                    int mAge;
                    int mMaxAge;
                    bool mAlive;
                
                };
                
                class Fish : public WaterElement
                {
                    public :
                    enum FISH_TYPE{CARNIVOROUS, HERBIVOROUS, OMNIVOROUS};
                    enum FISH_SEX{MALE, FEMALE, HERMAPHRODITE, HERMAPHRODITE_WITH_AGE};
                
                    Fish(std::string const& = "Fish", std::string const& = "Unknown",
                         FISH_SEX const& = HERMAPHRODITE, FISH_TYPE const& =OMNIVOROUS);
                    virtual ~Fish();
                    void Eat(std::vector<Fish> &, std::vector<Seaweed> &);
                    FISH_SEX GetSex() const;
                    FISH_TYPE GetType() const;
                    std::string GetName() const;
                    void LooseLife(int);
                    Fish MakeKid(Fish &) throw(std::string);
                    virtual void Display();
                    virtual void Next();
                
                    virtual bool Alive();
                
                    protected:
                    void Eat(std::vector<Fish> &);
                    void Eat(std::vector<Seaweed> &);
                    FISH_TYPE mType;
                    FISH_SEX mSex;
                    std::string mName;
                    std::string mSpecies;
                    int mTurnBeforeSex;
                };
                
                class Seaweed : public WaterElement
                {
                    public :
                    Seaweed();
                    virtual ~Seaweed();
                
                    virtual bool Alive();
                    Seaweed MakeKid() throw(std::string);
                    virtual void Next();
                
                    protected :
                    bool mMadeKid;
                };
                
                
                #endif // FISH_HPP_INCLUDED
                

                Fish.cpp:


                #include "Fish.hpp"
                
                WaterElement::WaterElement() : mLife(10), mMaxLife(10), mAge(0), mMaxAge(20), mAlive(true)
                {
                
                }
                WaterElement::~WaterElement()
                {
                
                }
                void WaterElement::AddLife()
                {mLife++;}
                bool WaterElement::Alive()
                {return false;}
                int WaterElement::GetLife() const
                {return mLife;}
                void WaterElement::LooseLife(int x)
                {mLife -= x;}
                void WaterElement::GrowAge()
                {++mAge;}
                void WaterElement::SetMaxAge(int x)
                {mMaxAge = x;}
                void WaterElement::SetMaxLife(int x)
                {mMaxLife = x;}
                int WaterElement::GetAge() const
                {return mAge;}
                void WaterElement::Display()
                {
                }
                
                
                Fish::Fish(std::string const& _name, std::string const& _species, FISH_SEX const& _sex, FISH_TYPE const& _type) :
                         WaterElement(), mType(_type), mSex(_sex), mName(_name), mSpecies(_species), mTurnBeforeSex(2)
                {
                    if(mName.size() > 12)
                        mName = mName.substr(0, 12) + "...";
                }
                Fish::~Fish()
                {
                
                }
                void Fish::Eat(std::vector<Fish> & fish)
                {
                    unsigned int index;
                    do
                    {
                        index = (rand()/(double)RAND_MAX) * fish.size();
                    }while(!fish[index].mAlive && fish[index].mSpecies != this->mSpecies);
                    fish.at(index).LooseLife(4);
                    mLife += 5;
                    std::cout << mName << " is eating " << fish[index].mName << "..." << std::endl;
                }
                void Fish::Eat(std::vector<Seaweed> & seaweed)
                {
                    unsigned int index;
                    do
                    {
                        if(seaweed.empty())
                            return;
                        index = (rand()/(double)RAND_MAX) * seaweed.size()-1;
                    }while(!seaweed.at(index).Alive());
                    seaweed.at(index).LooseLife(2);
                    mLife += 3;
                    std::cout << mName << " is eating a seaweed..." << std::endl;
                }
                void Fish::Eat(std::vector<Fish> & fish, std::vector<Seaweed> & seaweed)
                {
                    if(Alive())
                    {
                        if(mType == CARNIVOROUS)
                        {
                            if(!fish.empty())
                                Eat(fish);
                        }
                        else if(mType == HERBIVOROUS)
                        {
                            if(!seaweed.empty())
                                Eat(seaweed);
                        }
                        else
                        {
                            unsigned int index = (rand()/(double)RAND_MAX) * (fish.size() + seaweed.size());
                            if(index <= fish.size() && !fish.empty())
                                Eat(fish);
                            else
                            {
                                if(!seaweed.empty())
                                    Eat(seaweed);
                            }
                        }
                    }
                    Alive();
                }
                std::string Fish::GetName() const
                {return mName;}
                Fish::FISH_SEX Fish::GetSex() const
                {return mSex;}
                Fish::FISH_TYPE Fish::GetType() const
                {return mType;}
                bool Fish::Alive()
                {
                    if(mLife <= 0)
                    {
                        mLife = 0;
                        mAlive = false;
                        return false;
                    }
                    if(mLife > mMaxLife)
                    {
                        mLife = mMaxLife;
                        mAlive = false;
                        return false;
                    }
                    if(mAge > mMaxAge)
                    {
                        mAlive = false;
                        mLife = 0;
                        mAge = mMaxAge;
                        return false;
                    }
                    return true;
                }
                void Fish::LooseLife(int x)
                {
                    mLife -= x;
                    Alive();
                }
                Fish Fish::MakeKid(Fish & fish) throw(std::string)
                {
                    try
                    {
                        int Sex = rand()/(double)RAND_MAX * 4;
                        int Alimentation = rand()/(double)RAND_MAX * 3;
                        if(fish.mSpecies == mSpecies && mTurnBeforeSex <= 0 && fish.mTurnBeforeSex <= 0)
                        {
                            mTurnBeforeSex = 2;
                            fish.mTurnBeforeSex = 2;
                            if(fish.mSex == HERMAPHRODITE || mSex == HERMAPHRODITE)
                            {
                                return Fish("Kid_" + fish.mName + mName, fish.mSpecies, (FISH_SEX)Sex, (FISH_TYPE)Alimentation);
                            }
                            if((fish.mSex == MALE || (fish.mSex == HERMAPHRODITE_WITH_AGE && fish.mAge < 10)) &&
                                (mSex == FEMALE || (mSex == HERMAPHRODITE_WITH_AGE && mAge >= 10)))
                            {
                                return Fish("Kid_" + fish.mName + mName, fish.mSpecies, (FISH_SEX)Sex, (FISH_TYPE)Alimentation);
                            }
                            if((fish.mSex == FEMALE || (fish.mSex == HERMAPHRODITE_WITH_AGE && fish.mAge >= 10)) &&
                                (mSex == MALE || (mSex == HERMAPHRODITE_WITH_AGE && mAge < 10)))
                            {
                                return Fish("Kid_" + mName + fish.mName, fish.mSpecies, (FISH_SEX)Sex, (FISH_TYPE)Alimentation);
                            }
                            else
                            {
                                throw std::string("Not good... !");
                            }
                        }
                        else
                        {
                            throw std::string("Too Young...");
                        }
                    }
                    catch(std::string x)
                    {
                        //std::cerr << x << std::endl;
                        throw x;
                    }
                }
                void Fish::Display()
                {
                    std::string Name = mName;
                    if(mName.size() > 12)
                        Name = mName.substr(0, 12) + "...";
                    std::cout << "Fish  " << std::setw(15) << Name << std::flush;
                    std::cout << std::setw(3) << " : " << std::setw(6) << mLife << "HP" << std::flush;
                    std::cout << std::setw(6) << mAge << " YO" << std::setw(15) << mSpecies << std::endl;
                }
                void Fish::Next()
                {
                    ++mAge;
                    --mLife;
                    --mTurnBeforeSex;
                    Alive();
                }
                
                Seaweed::Seaweed() : WaterElement(), mMadeKid(false)
                {
                }
                Seaweed::~Seaweed()
                {
                }
                bool Seaweed::Alive()
                {
                    mAlive = true;
                    if(mLife <= 0)
                    {
                        mLife = 0;
                        mAlive = false;
                    }
                    if(mAge > mMaxAge)
                    {
                        mAge = mMaxAge;
                        mAlive = false;
                    }
                    return mAlive;
                }
                Seaweed Seaweed::MakeKid() throw(std::string)
                {
                    try
                    {
                        if(Alive() && mLife >= 10 && !mMadeKid)
                        {
                            mLife /= 2;
                            Seaweed sea;
                            sea.mLife = 5;
                            mMadeKid = true;
                            return sea;
                        }
                        throw std::string("No Seaweeds...");
                    }
                    catch(std::string x)
                    {
                        throw x;
                    }
                
                }
                void Seaweed::Next()
                {
                    ++mLife;
                    ++mAge;
                }
                

                Les poissons peuvent etre de n'importe quelle race ;)

                Je vous avoue le seul défaut, c'est la reproduction d'algues. Je modifirai... un jour :p
                • Partager sur Facebook
                • Partager sur Twitter
                  24 octobre 2011 à 17:54:11

                  Euh, manquerait pas un cout ou 2 pour afficher les erreurs ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 octobre 2011 à 18:18:11

                    En fait non. C'était pour débugger, j'ai oublier d'enlever. Faut enlever les try et catch, et remplacer par des return si tu veux.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      7 mars 2012 à 0:17:08

                      y a t-il d'autres exos à venir ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        7 mars 2012 à 0:41:06

                        As-tu déjà réussi tous les exercices proposés dans les deux threads ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
                        Anonyme
                          7 mars 2012 à 1:05:43

                          Citation : Nanoc

                          As-tu déjà réussi tous les exercices proposés dans les deux threads ?


                          non, c'était juste par curiosité ^^
                          mais je me met au boulot :)
                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 mars 2012 à 17:42:12

                            Si des auteurs sont motivés, oui, c'est possible.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 avril 2012 à 23:22:36

                              Ce message pour signaler que ce topic est toujours maintenu. Si vous avez des questions, des exercices ou des solutions n'hésitez pas ;) !
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                16 avril 2012 à 23:26:37

                                Si c'est toujours maintenu ... je vais commencer à participer à ce topic alors :)

                                Par contre un petit point que je ne comprend pas dans le topic de présentation.
                                Dans la section Je souhaite proposer une solution, comment faire ? vous dîtes :

                                Citation


                                des conseils pédagogiques;



                                Qu'est-ce que ça signifie ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 avril 2012 à 23:45:19

                                  Hum. Bonne question.

                                  Au hasard de donner une démarche qui a permis d'aboutir à la solution. Ou alors d'expliquer pourquoi cette solution est intéressante.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
                                  Anonyme
                                    16 avril 2012 à 23:47:14

                                    D'accord. Je suis en train de faire le programme de cowsay et je vous envoie ma solution rédigé dès que j'en aurais terminé avec cet exo.

                                    EDIT;

                                    Le Cowsay



                                    C++11 non utilisé


                                    Lien de l'exercice

                                    Voici mon code source :

                                    #include <iostream>
                                    #include <cstdlib>
                                    #include <vector>
                                    #include <string>
                                    using namespace std;
                                    
                                    // Fonction qui retourne une chaîne d'un même char (passé en second paramètre)
                                    string line(int nbr, char x)
                                    {
                                    	string line;
                                    	for(int i = 0; i < nbr; i++)
                                    		line += x;
                                    	return line;
                                    }
                                    
                                    // Fonction qui retourne une chaîne d'espaces
                                    string spaces(int nbr)
                                    {
                                    	string line;
                                    	for(int i = 0; i < nbr; i++)
                                    		line += " ";
                                    	return line;
                                    }
                                    
                                    int main(int argc, char * argv[])
                                    {
                                    	// On récupère les arguments de la ligne de commande
                                    	vector<string> args;
                                    	for(int i = 1; i < argc; i++)
                                    		args.push_back(argv[i]);
                                    
                                    	// On vérifie que seule la chaîne à afficher a été donné
                                    	if(args.size() != 1)
                                    		return EXIT_FAILURE;
                                    
                                    	unsigned int maxSizeLine(30);
                                    	vector<string> lines;
                                    	string sentence(args[0]);
                                    
                                    	// Découpage des lignes
                                    	while(sentence.size() > maxSizeLine)
                                    	{
                                    		int indice(maxSizeLine - 1);
                                    
                                    		for(int i = indice; i >= 0; --i)
                                    		{
                                    			if(sentence[i] == ' ')
                                    			{
                                    				indice = i;
                                    				break;
                                    			}
                                    		}
                                    
                                    		lines.push_back(sentence.substr(0, indice));
                                    		sentence = sentence.substr(indice);
                                    	}
                                    
                                    	lines.push_back(sentence);
                                    
                                    	// Affichage de la bulle
                                            if(lines.size() == 1)
                                    	{    
                                    		cout << "  " << line(lines[0].size(), '_') << endl;
                                    		cout << " < " << lines[0] << " > " << endl;
                                    		cout << "  " << line(lines[0].size(), '-') << endl;
                                    	}
                                    	else
                                    	{
                                    		cout << "  " << line(30, '_') << endl;
                                    		for(int i = 0; i < lines.size(); i++)
                                    			cout << " < " << lines[i] << spaces(29 - lines[i].size()) << "> " << endl;
                                    		cout << "  " << line(30, '-') << endl;
                                    	}
                                    
                                    	// Affichage de la jolie petite vache !
                                            cout << "          ^__^               " << endl;
                                            cout << "          (oo)________       " << endl;
                                            cout << "          (__)        )/     " << endl;
                                            cout << "             ||----w |       " << endl;
                                            cout << "             ||     ||       " << endl;
                                    
                                    	return EXIT_SUCCESS;
                                    }
                                    



                                    Le code est surement horrible et le sujet n'est pas fignolé (problème d'espaces au niveau du découpage des lignes par exemple) mais j'ai passé beaucoup de temps sur cet exercice (surement un peu sous-estimé le sujet).
                                    Désolé de rendre un tel code mais je n'ai plus le temps de le continuer donc j'ai quand même décidé de le poster ici.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 avril 2012 à 11:53:26

                                      Merci pour ta participation :)
                                      Le code est plutôt bien commenté donc il aurra sa place sur le premier post ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        18 avril 2012 à 11:58:47

                                        Dans le premier post ? Malgré mes commentaires comme tu dis, mon code est horrible (et même pas fignolé) !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 avril 2012 à 12:01:41

                                          On n'a pas dit que les solutions devaient être parfaites ;)
                                          Par contre, si tu veux améliorer ton code, je t'en prie :) ! (le bouton edit est très pratique !)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            18 avril 2012 à 12:08:16

                                            Je n'ai pas le temps aujourd'hui mais je pense l'améliorer une fois que j'aurais finis d'apprendre la STL. C'est dans ma TODO List ^^

                                            Je t'enverrais un MP pour t'avertir et te filer le nouveau code pour que tu puisse éditer le premier post.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              18 avril 2012 à 12:10:19

                                              Édite simplement ton premier post et ajoute un message au sujet ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                18 avril 2012 à 14:45:35

                                                Trois petites remarques :
                                                inline string line(int n, char c) { return string(n, c); }
                                                inline string spaces(int n) { return line(n, ' '); }
                                                


                                                Et un cas d'échec (en considérant une longueur maximale de ligne de 10) : cowsay "aaaaaa aaaaaa aaaaaa aaaaaa" (l'affichage pourrait être réduit en largeur).

                                                Ah, et une dernière : tu définis maxSizeLine, mais ne l'utilises pas partout ... ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  18 avril 2012 à 14:51:09

                                                  Merci pour tes remarques :) Je met dans ma todo
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    18 avril 2012 à 14:59:13

                                                    Je sais vraiment pas si vous devriez vraiment mettre ce code en référence ^^"
                                                    Il ne coupe pas au bonne endroit, il ne récupère qu'un argument du main, il n'y a aucune option de gérer, le cadre est totalement différent, la vache est également différente, ...
                                                    Bref, vous faites ce que vous voulez ... Après, je suis peut-être un peu dur ...
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                                                      18 avril 2012 à 16:11:07

                                                      Bon bon, je vais attendre de voir ce qui va advenir ^^
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        25 avril 2012 à 14:59:48

                                                        Hello les zeros :D
                                                        Il y a peux j'ai codé un démineur car je me fessait grave chi*r, et je voulais un peu comparé les codes sachant que je code toujours avec un code clair et simple donc histoire de trouver un peu plus optimisé :p

                                                        Donc je propose dans la catégorie jeu, le célèbre démineur.



                                                        L’exercice va se divisé en 3 partie (car moi il m'en a fallut 3 ;) )
                                                        • Création du plateau de jeu
                                                        • Les fonction de jeu (creuser et drapeau)
                                                        • Le creusage automatique


                                                        Création du plateau de jeu


                                                        A cette étape; il vous faudra créer un tableau (réelle, en prog c'est vous qui voyez :p ) qui va contenir les mines. Il existe différente version avec des propriété différente, pour ma part le mien est en 9x9 avec 10mines.
                                                        Je vous conseil de "cacher" les mines après avoir vérifier que toutes les mines sont la.

                                                        Les fonction de jeu (creuser et drapeau)


                                                        Ici il vous faudra créer une fonction qui permettra de dévoile une case, si elle est vide le jeu continue, sinon boom échec :lol:
                                                        A chaque case vide il faut indiquez combien de mines se situe autour de cette case, sinon le jeu serait impossible ;)
                                                        Vous inclurez également les drapeau qui signale une mines que vous connaissez (attention, si vous essayer de creuser sur un drapeau sa ne doit pas marcher ;) )
                                                        Vous pouvez ajouté la fonction qui met un "?" mais personnellement je ne l'utilise jamais donc je ne l'ai pas inclut. :-°

                                                        A cette partie faite une petite interface qui demande quelle action faire puis a quelle case.

                                                        Le creusage automatique


                                                        La partie qui m'a pris le plus de temps :euh:
                                                        Alors là vous devez codé une fonction (c'est un conseil ;) ) qui va, si vous creuser une case vide, va creuser toute les case vide autours et les case numéroté (seulement a la découverte des cases numéroté, la fonction ne creuse pas d’avantage). En résumé de mon charabia, la fonction creuse les case vide et les premières cases numérotée jusqu’à formé un troue bordé par des chiffres :D
                                                        Pour ceux qui ne comprennent pas, voila un exemple, je n'ai cliqué qu'une fois :
                                                        Image utilisateur

                                                        ATTENTION ici case vide != case sans mine !!!!! Une case vide est une case ne contenant pas de numéro, mine, drapeau, etc.... C'est le vide total ;) ceci n'est évidement pas valable pour la deuxième partie


                                                        Petit conseil (si vous n'y arriver pas, tricher pas ok :colere2: ):

                                                        Cette fonction doit être récursive ou du moins c'est surement ce qu'il y a de plus simple





                                                        .
                                                        .
                                                        .


                                                        Et voila ma solution :



                                                        main.cpp
                                                        #include <iostream>
                                                        
                                                        #include "Demineur.h"
                                                        
                                                        using namespace std;
                                                        
                                                        int main()
                                                        {
                                                            Grille grille;
                                                            Joueur player;
                                                        
                                                            bool newPartie(true);
                                                        while(newPartie == true)
                                                        {
                                                            grille.renGrille();
                                                            grille.affGrille();
                                                        
                                                            do
                                                            {
                                                                player.jouer();
                                                                grille.affGrille();
                                                            }while(player.aGagner() == false && player.aPerdu() == false);
                                                        
                                                            if(player.aGagner() == true)
                                                            {
                                                                cout << "Gagné !"<< endl;
                                                            }
                                                            else
                                                            {
                                                                cout << "Perdu ! "<< endl;
                                                            }
                                                        
                                                            cout << "Nouvelle partie (o/n) : ";
                                                            char caract;
                                                            cin >> caract;
                                                        
                                                            if(caract == 'o' || caract == 'O')
                                                            newPartie = true;
                                                            else
                                                            newPartie = false;
                                                        }
                                                            return 0;
                                                        }
                                                        


                                                        Demineur.h
                                                        #ifndef DEMINEUR_H_INCLUDED
                                                        #define DEMINEUR_H_INCLUDED
                                                        
                                                        #include <iostream>
                                                        #include <cstdlib>
                                                        #include <ctime>
                                                        
                                                        class Grille
                                                        {
                                                        public:
                                                            void renGrille();
                                                            void affGrille() const;
                                                        
                                                            static char tableau[10][10];
                                                            static char mines[10][10];
                                                            static int m_mines;
                                                            static int caseRestante;
                                                        
                                                        };
                                                        
                                                        class Joueur
                                                        {
                                                        public:
                                                            void jouer();
                                                            bool aPerdu() const;
                                                            bool aGagner() const;
                                                            void creuser(int x, int y);
                                                        
                                                        };
                                                        
                                                        #endif // DEMINEUR_H_INCLUDED
                                                        


                                                        Demineur.cpp
                                                        #include "Demineur.h"
                                                        
                                                        using namespace std;
                                                        
                                                        char Grille::tableau[10][10];
                                                        char Grille::mines[10][10];
                                                        int Grille::m_mines = 10;
                                                        int Grille::caseRestante = 71;
                                                        
                                                        
                                                        
                                                        void Grille::renGrille()
                                                        {
                                                            srand(time(0));
                                                        
                                                            for(int i = 1; i < 10; i++)
                                                            {
                                                                for(int j = 1; j < 10; j++)
                                                                {
                                                                    tableau[i][j]='.';
                                                                    mines[i][j]= ' ';
                                                                }
                                                            }
                                                        
                                                            int numRand1, numRand2;
                                                            for(int i = 0; i < 10; i++)
                                                            {
                                                                numRand1 = rand() % 9;
                                                                numRand2 = rand() % 9;
                                                                while(Grille::mines[numRand1+1][numRand2+1] == '*')
                                                                {
                                                                    numRand1 = rand() % 9;
                                                                    numRand2 = rand() % 9;
                                                                }
                                                                Grille::mines[numRand1+1][numRand2+1] = '*';
                                                                //Grille::tableau[numRand1+1][numRand2+1] = '*'; // Pour test
                                                            }
                                                            Grille::caseRestante = 71;
                                                        }
                                                        
                                                        void Grille::affGrille() const
                                                        {
                                                            cout<<"  ------------------------------------- "<<endl;
                                                            int jPrime;
                                                            for(int i=9;i>=1;i--)
                                                            {
                                                                cout<<i;
                                                                for(int j=1;j<10;j++)
                                                                {
                                                                    if(j>=9 && i==5)
                                                                    {
                                                                        cout << " | "<< Grille::tableau[j][i] <<" |      Mine restante : "<< Grille::m_mines<<endl;
                                                                        jPrime = j;
                                                                    }
                                                                    else
                                                                    {
                                                                        jPrime = 0;
                                                                         cout<<" | ";
                                                                        cout<<Grille::tableau[j][i];
                                                                    }
                                                                }
                                                                if(jPrime !=9 && i !=5)
                                                                {
                                                                    cout<<" |"<<endl;
                                                                }
                                                                cout<<"  ------------------------------------- "<<endl;
                                                            }
                                                            cout<<"    1   2   3   4   5   6   7   8   9   "<<endl;
                                                        }
                                                        
                                                        
                                                        void Joueur::jouer()
                                                        {
                                                            int x(0),y(0);
                                                            char action(' ');
                                                        
                                                            do
                                                            {
                                                                cout << "Action(c/d) : ";
                                                                cin >> action;
                                                            }while(action != 'c' && action != 'C' && action != 'd' && action != 'D');
                                                        
                                                            while(x<=0 || x>=10)
                                                            {
                                                                cout << "X : ";
                                                                cin >> x;
                                                            }
                                                            while(y<=0 || y>=10)
                                                            {
                                                                cout << "Y : ";
                                                                cin >> y;
                                                            }
                                                        
                                                        if((action == 'c' or action == 'C') && Grille::tableau[x][y] != '!')
                                                        {
                                                            Grille::tableau[x][y] = Grille::mines[x][y];
                                                            if(Grille::tableau[x][y] == '*')
                                                            {
                                                                cout << "Perdu."<<endl;
                                                            }
                                                            else
                                                            {
                                                                Joueur::creuser(x,y);
                                                            }
                                                        }
                                                        else if(action == 'd' || action == 'D')
                                                        {
                                                            if(Grille::tableau[x][y] == '.')
                                                            {
                                                                Grille::tableau[x][y] = '#';
                                                                Grille::m_mines--;
                                                            }
                                                            else if(Grille::tableau[x][y] == '#')
                                                            {
                                                                Grille::tableau[x][y] = '.';
                                                                Grille::m_mines++;
                                                            }
                                                        }
                                                        }
                                                        
                                                        bool Joueur::aPerdu() const
                                                        {
                                                            for(int i = 0; i < 9; i++)
                                                            {
                                                                for(int j = 0; j < 9; j++)
                                                                {
                                                                    if(Grille::tableau[i][j] == '*')
                                                                    {
                                                                        return true;
                                                                    }
                                                                }
                                                            }
                                                            return false;
                                                        }
                                                        
                                                        bool Joueur::aGagner() const
                                                        {
                                                            if(Grille::caseRestante == 0)
                                                            {
                                                                return true;
                                                            }
                                                            else
                                                            {
                                                                return false;
                                                            }
                                                        }
                                                        
                                                        void Joueur::creuser(int x, int y)
                                                        {
                                                            Grille::caseRestante--;
                                                                int nbMines(0);
                                                                for(int i=0;i<3;i++)
                                                                {
                                                                    for(int j=0;j<3;j++)
                                                                    {
                                                                        if(x+i-1>0 and x+i-1<=9 and y+j-1>0 and y+j-1<=9)
                                                                        {
                                                                            if(Grille::mines[x+i-1][y+j-1] == '*')
                                                                            {
                                                                                nbMines++;
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                                if(nbMines > 0)
                                                                {
                                                                    Grille::tableau[x][y] = nbMines + 48;
                                                                }
                                                                else
                                                                {
                                                                    Grille::tableau[x][y] = ' ';
                                                        
                                                                    for(int i=0;i<3;i++)
                                                                    {
                                                                        for(int j=0;j<3;j++)
                                                                        {
                                                                            if(x+i-1>0 and x+i-1<=9 and y+j-1>0 and y+j-1<=9)
                                                                            {
                                                                                if(i!=1 or j!=1)
                                                                                {
                                                                                    if( Grille::tableau[x+i-1][y+j-1] == '.')
                                                                                    {
                                                                                        creuser(x+i-1,y+j-1);
                                                                                    }
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                        }
                                                        



                                                        Bonne chance les Loulous ;)

                                                        EDIT: Une petite erreur dans le codage sur la réinitialisation, au cas ou on voudrait rejouer :)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          25 avril 2012 à 21:08:04

                                                          Hum, que voilà un exercice sympathique :)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            1 mai 2012 à 14:14:21

                                                            Bonjour à tous Zéros ! :)

                                                            Je poste un exo qui requiert Qt, cet exo sert à s'entraîner avec les boîtes de dialogues usuelles, les boutons, les liens, les SIGNAL/SLOT ainsi que les if-else if-else.

                                                            Jongler avec les boîtes de dialogues

                                                            Cet exercice requiert de savoir
                                                            • -Afficher une boîte de dialogue de n'importe quel type
                                                            • -Créer ses propres signaux et slots
                                                            • -Faire un bouton
                                                            • -Créer un lien


                                                            Il faut afficher successivement plusieurs boîtes de dialogue de différents types (information, question...) afin de permettre à l'utilisateur de cliquer sur des liens HTML. Bref, il faut s'amuser avec les liens et les conditions tout en maîtrisant l'affichage des boîtes de dialogues.

                                                            Attention: quelques connaissances en HTML sont néanmoins nécessaires !


                                                            Bonne chance ! :D

                                                            Merci de me contacter pour des précisions ;)




                                                            Solution

                                                            S'il vous plaît, ne trichez pas ! :(


                                                            J'ai conscience que c'est sur le même post, mais faîtes quand même mon exercice

                                                            //MaFenetre.h
                                                            #ifndef DEF_MAFENETRE
                                                            #define DEF_MAFENETRE
                                                            
                                                            #include <QApplication>
                                                            #include <QWidget>
                                                            #include <QPushButton>
                                                            #include <QMessageBox>
                                                            
                                                            class MaFenetre : public QWidget
                                                            {
                                                                Q_OBJECT
                                                            
                                                                public:
                                                                MaFenetre();
                                                            
                                                                public slots:
                                                                void ouvrirDialogue();
                                                                void mail();
                                                            
                                                                private:
                                                                QPushButton *m_boutonDialogue;
                                                                QPushButton *m_mail;
                                                            };
                                                            
                                                            #endif
                                                            
                                                            
                                                            //MaFenetre.cpp
                                                            #include "MaFenetre.h"
                                                            
                                                            MaFenetre::MaFenetre() : QWidget()
                                                            {
                                                                setFixedSize(345, 190);
                                                            
                                                                m_boutonDialogue = new QPushButton("Ouvrir la boîte de dialogue", this);
                                                                m_boutonDialogue->move(40, 50);
                                                                m_boutonDialogue->setFont(QFont("Vivaldi", 24));
                                                            
                                                                m_mail = new QPushButton("M'envoyer un mail", this);
                                                                m_mail->move(40, 115);
                                                                m_mail->setFont(QFont("Vivaldi", 24));
                                                            
                                                                QObject::connect(m_boutonDialogue, SIGNAL(clicked()), this, SLOT(ouvrirDialogue()));
                                                                QObject::connect(m_mail, SIGNAL(clicked()), this, SLOT(mail()));
                                                            }
                                                            
                                                            void MaFenetre::mail()
                                                            {
                                                                QMessageBox::warning(this, "Programmeur", "Merci de ne pas m'envoyer d'e-mails intempestifs. Mon adresse: <strong><i>samuel.joshua1@free.fr</i></strong>.");
                                                            }
                                                            
                                                            void MaFenetre::ouvrirDialogue()
                                                            {
                                                                QMessageBox::warning(this, "Site du Zéro", "Attention ! Vous allez ouvrir une boîte de dialogue réservée aux Zéros <strong> uniquement </strong>");
                                                            
                                                                int reponse = QMessageBox::question(this, "Interrogatoire", "Etes-vous un Zéro ?", QMessageBox::Yes|QMessageBox::No);
                                                            
                                                               if (reponse == QMessageBox::Yes)
                                                               {
                                                                   QMessageBox::information(this, "Site du Zéro", "Adresse du site: <a href='http://www.siteduzero.com'>Site du Zéro </a>");
                                                                   int mail = QMessageBox::question(this, "Programmeur", "Bluffant hein ? Ca vous tenterait d'écrire un mail au geek qui a fait ce programme tout simplement <i> génial </i> ?", QMessageBox::Yes|QMessageBox::No);
                                                            
                                                                   if (mail == QMessageBox::Yes)
                                                                   {
                                                                       QMessageBox::information(this, "Programmeur", "Ahhh ! Je me doutais bien que vous voudriez m'envoyez un mail !!!");
                                                                       int mailEncore = QMessageBox::question(this, "Programmeur", "Êtes-vous certain de vouloir m'envoyer un mail ??? Vous ne pourrez pas revenir en arrière ! Enfin si, mais bon.", QMessageBox::Yes|QMessageBox::No);
                                                            
                                                                       if (mailEncore == QMessageBox::Yes)
                                                                       {
                                                                           QMessageBox::information(this, "Programmeur", "Mon adresse e-mail: <strong><i>samuel.joshua1@free.fr</i></strong>.");
                                                                       }
                                                                   }
                                                            
                                                                   else
                                                                   {
                                                                       QMessageBox::critical(this, "Programmeur", "Grrr ! Essayez de faire pareil, <font color=brown><strong>minable</strong></font> !");
                                                                   }
                                                               }
                                                            
                                                               else if (reponse == QMessageBox::No)
                                                               {
                                                                   QMessageBox::critical(this, "Site du Zéro", "<strong> ACCES <font color = red> REFUSE </font> </strong>");
                                                               }
                                                            }
                                                            
                                                            
                                                            
                                                            //main.cpp
                                                            #include <QtGui>
                                                            #include "MaFenetre.h"
                                                            
                                                            
                                                            int main(int argc, char *argv[])
                                                            {
                                                                QApplication app(argc, argv);
                                                            
                                                                QString locale = QLocale::system().name().section('_', 0, 0);
                                                                QTranslator translator;
                                                                translator.load(QString("qt_") + locale, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
                                                                app.installTranslator(&translator);
                                                            
                                                                MaFenetre fenetre;
                                                                fenetre.show();
                                                            
                                                                return app.exec();
                                                            }
                                                            
                                                            
                                                            
                                                            
                                                            //Qt.pro
                                                            HEADERS += \
                                                              MaFenetre.h
                                                            
                                                            SOURCES += \
                                                              MaFenetre.cpp \
                                                              main.cpp
                                                            


                                                            Apprenti Hackeur

                                                            Libre
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            HEY ! CETTE SIGNATURE EST INUTILE !

                                                            [Exercices] Venez vous entraîner !

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                            • Editeur
                                                            • Markdown