C++ : besoin d'un programme qui marche

Discussion dans 'Web, design' créé par Guest, 1 Mai 2003.

Statut de la discussion:
Fermée.
  1. Offline
    Nicool_ Motherfucker
    Je crois que c'est à cause du using namespace std; qu'il ne faut pas mettre de .h ! En fait il fait appel aux noms de la bibliothèque standart :)
    Nicool_, 1 Mai 2003
    #21
  2. Offline
    Ben peut être sous Visual... Sous Builder, il n'y a pas de problème. Par contre, il est vrai que je n'ai jamais configuré VC comme je l'ai fait avec Borland.

    Ben, dsl, nous on utilise Borland :D (et là, on refait msn d'ailleurs)
    TITM4v3rick, 1 Mai 2003
    #22
  3. Offline
    Guest ex membre
    Et au fait t'en aurait pas un autre un peu plus complexe que j'essaie de le capter??? STP
    Mais juste un peux plus complexe hein pas un truc enorme :oops: :oops: :oops: :oops:
    Guest, 1 Mai 2003
    #23
  4. Offline
    zine zoline
    #include <iostream.h>
    main()
    {

    int nombre = 0;
    int n = 0;
    int diviseur = 0;

    cout << "--- Calcul de nombres premiers ---\n";
    cout << "Combien souhaitez vous en calculer: ";
    cin >> nombre;

    do
    {

    n++;
    for(diviseur = 2; diviseur < n; diviseur++)

    if(!(n%diviseur)) break;


    if(diviseur == n)
    {

    nombre--;
    cout << "Trouvé : " << n << endl;

    }

    } while(nombre);

    cout << "Fini!\n";

    }

    calcul de nombres premiers ( pas de moi )

    sinon je peux toujours de filer mes 2 projets dinfos ( calcul boursier rudimentaire et mini traitement de texte) si besoin est
    zine, 1 Mai 2003
    #24
  5. Offline
    premier fichier : Pmain.cpp
    C'est là qu'on va mettre le programme principal...
    Dans ce fichier, on écrit :

    Code:
    //      ____________
    //=== ( les entêtes ) ===
    #include <iostream>
    #include <conio.h>
    #include "Player.h"
    using namespace std;
    
    //      ______________
    //=== ( prg principal ) ===
    
    int main(int argc, char* argv[])
    {
        cout << "Nous allons créer un joueur :";
        cout << "\n====================================================\n\n";
        Gamerz Bourne;
        cout << "Vous venez de créer un Gamerz, bravo !\n"
                "Voici ces caractéristiques :\n";
        Bourne.afficherJoueur();
        cout << "\n====================================================\n\n";
        cout << "Nous allons vous créer en partant de l'objet de base\n";
        Bourne.modifierjoueur();
        cout << "\n\n\nVoici VOS caractéristiques :\n";
        Bourne.afficherJoueur();
        puts("\nAppuyez sur une touche pour terminer");
        getch();
        return 0;
    }
    //---------------------------------------------------------------------------
    Second fichier : Player.h
    C'est dans ce fichier que tu vas créer ta première classe (class)


    Code:
    //      ________________________________
    //=== ( Déclaration de la classe Gamerz ) ===
    
    // la classe qui "instancie"/crée des objets
    class Gamerz
    {
        private:
            // les infos persos d'un joueur
            char *nick;
            int age, skill;
        public:
            // constructeur : il initialise l'objet
            Gamerz();
            // pour afficher les infos d'un joueur
            void afficherJoueur();
            // pour modifier les infos d'un joueur
            void modifierjoueur();
    };
    dans le 3ième fichier : Player.cpp
    Hé bien, le développement des méthodes, constructeurs et autres qui font parti des classes dans leur ensemble...

    Code:
    //      ____________
    //=== ( les entêtes ) ===
    
    #include "Player.h"
    #include <iostream.h>
    //      ___________________________
    //=== ( Construction / Destruction ) ===
    
    Gamerz::Gamerz()
    {
        nick = "Bourne";
        age = 34;
        skill = 3;
    }
    
    void Gamerz::afficherJoueur()
    {
        cout << "\n";
        cout << nick << ", " << age << " ans, et son skill est : " << skill;
    }
    
    void Gamerz::modifierjoueur()
    {
        // on initialise la chaîne de caractères
        nick = "";
        // dialogue Ecran <-> Utilisateur
        cout << "\n";
        cout << "Entrez votre Nick : ";
        cin  >> nick;
        cout << "Entrez votre Age : ";
        cin  >> age;
        cout << "Entrez votre skill (entier 1 - 3) : ";
        cin  >> skill;
        // petite vérification sur le skill
        while ((skill <= 0) || (skill >= 4))
        {
            cout << "Entrez un skill correct !\nskill (1 - 3) : ";
            cin >> skill;
        }
    }

    Voilà, je viens de l'écrire et de le tester, ça fonctionne, c con mais bon, ça montre comment créer une classe, les méthodes etc... Le but des 3 fichiers ? Ben lorsque ton code source sera imposant, tu comprendras. Et puis, en général on ne mélange pas des oranges avec des pommes (pensez à vos cours de math, physique, méca ou encore chimie) => on va limiter une classe par fichier...


    une classe : c'est quoi ?
    C'est une fabrique d'objet

    exemple, la classe voiture est une classe qui instancie (crée) des objets (voitures), dedans on retrouve des membres publics, privés et protégés.
    membres privés : exemple un moteur, des roues, un volant, des pédales etc...
    membres publics : exemple la méthode void rouler();
    void freiner();
    void accélérer();

    une classe encapsule les attributs et les méthodes d'un objet.

    Les membres protégés c plus complexe, là faut étudier :D
    cfr Héritage et Polymorphisme
    TITM4v3rick, 1 Mai 2003
    #25
  6. Offline
    THiBOo Elite
    Pas mal maverick :D

    Suis aussi en info ( à l'ULB ) mais juste un truc pour ton prog de base là que tu lui a écris ...

    le puts il sert à quoi ? :eek:

    et le getchar() je connais, mais il ne sert à rien si tu fais un cout << " blaalalablabla " a la fin ...

    en général le prog de base c ça :

    #include <iostream.h>

    void main ()
    {
    int q;
    cout << "Hello world" << endl;
    cout << "Appuyez sur une touche pour quitter";
    cin >> q;
    }

    mais bon ça change rien en fait :D

    Sinon pour un bon compilo pas lourd et assez bon, avec un bon débugger, c'est DEV C++ :D

    Le mieux reste tjr Linux et son excellent GCC :D

    Et pour un prog assez simple en voici un ( mav t fou de lui donner des classe déjà :D si il y connait rien c'est chaud :shock: )

    Code:
    # include <iostream.h>
    # include <stdlib.h>
    # include <time.h>
    
    const int taille = 152;
    typedef int matrice3D [3] [taille] [taille];
    void bombe ( matrice3D, int, int, int );
    void matrice_solution ( matrice3D, int, int, int );
    void placement ( matrice3D, int, int );
    void zero ( matrice3D, int, int );
    void affiche ( matrice3D, matrice3D, int, int );
    void rien ( matrice3D, int, int );
    
    // note : l = navigateur du vecteur, h = navigateur de ligne, k = navigateur de colonne
    // j'ai créé une matrice de 2 cases plus grande que celle demandée par l'utilisateur,
    // cela permet d'incrémenter tout autour des bombes de manière aisée. Et aussi de ne pas
    // devoir a chaque fois décrémenter de 1 la valeur entrée par l'utilisateur ( sauf pour le
    // vecteur )
    
    int main ( )
    
     {
     char rep;    // déclaration d'une variable de type charactère
     int nbr , longueur, largeur, l2, h2, k2, cpt=0, cptX=0, q;
     bool die = false, test = false;
     matrice3D M3D, M3D2;     // création de 2 matrice3D
    
     cout << " !!!! Bienvenue dans le fabuleux DEMINEUR 3D tm !!!! " << endl << endl;
     cout << "Entrez le nombre de bombes souhaitees : " << endl << endl;
     cin >> nbr;
     cout << "Entrez le nombre de lignes souhaitees (max 150): " << endl << endl;
     cin >> longueur;
     cout << "Entrez le nombre de colonnes souhaitees (conseil : max 19) : " << endl << endl;
     // si on entre une valeur supérieur à 19, la matrice sera affiché sur plusieurs ligne -> illisible
     cin >> largeur;
     cout << endl << endl;
     zero ( M3D, longueur, largeur );   // initialisation  de ma matrice solution à 0
     matrice_solution ( M3D, longueur, largeur, nbr ); // crée les valeurs de ma matrice solution
     rien ( M3D2, longueur, largeur );  // initialise ma matrice de jeu à inconnue partout ( 555 )
     affiche ( M3D, M3D2, longueur, largeur ); // affiche la matrice jeu
    
     while ( die == false && test == false ) // dès qu'une case retournée est une bombe ou que
                                             // le nombre de drapeaux égale le nbr de bombe et
                                             // sont correctement placés
       {
       cout << "Entrez le numero de la grille : " << endl;
       cin >> l2;
       l2 = l2-1; //permet d'entrer des valeurs comme 1, 2 ou 3 car vecteur est de 0 à 2
       cout << "Entrez le numero de la ligne : " << endl;
       cin >> h2;
       cout << "Entrez le numero de la colonne : " << endl;
       cin >> k2;
       cout << "Cette case est-elle une bombe ?   ( y/n )" << endl;
       cin >> rep;
    
       if ( rep == 'y' ) // si c'est une bombe on initialise la case a drapeau ( 444 )
         {
         M3D2 [l2] [h2] [k2] = 444;
         cptX ++;   // et on incrémente le compteur drapeau de 1
         }
       else if ( M3D [l2] [h2] [k2] == 666 ) // si la case retournée est une bombe
         {
         M3D2 [l2] [h2] [k2] = 777; // init a 777 ( = erreur )
         die = true;      // et die passe à true
         }
       else
         M3D2 [l2] [h2] [k2] = M3D [l2] [h2] [k2];  // sinon la case retournée prend
                                     // la valeur de la case de la matrice solution
       if ( cptX >= nbr )   // test permettant de voir si les drapeaux ont été correctement
                            // placé, et ce test ne commencera qu'après un certain nombre de
         {                  // de drapeaux placés
         for ( int l1=0; l1 < 3; l1++ )
           {
           for ( int h1=1; h1 < longueur+1; h1++ )
             {
             for ( int k1=1; k1 < largeur+1; k1++ )
               {
               if ( M3D [l1] [h1] [k1] == 666 )  // si une case de la matrice solution est une
                 {                               // bombe
                 if ( M3D2 [l1] [h1] [k1] == 444 ) // et si la case de la matrice jeu est un
                   cpt++;   // drapeau, on augmente le compteur de 1.
                 }
               }
             }
           }
         }
       if ( cpt == nbr )  // si le nbr de drapeau = le nbr de bombe
         test = true;     // test passe à true et c'est gagné
       affiche ( M3D, M3D2, longueur, largeur ); // et on affiche a chaque tour la matrice
       }                                         // jeu modifié
    
      if ( die == true ) // si la boucle s'est arreté car die est passé à true
        {
        cout << "Dommage, essayez encore une fois..." << endl; // message d'encouragement
        affiche ( M3D, M3D, longueur, largeur ); // affichage de la solution
        }
      else if ( test == true ) // si la boucle s'est arreté car test est passé à true
        cout<<"BRAVO, vous avez GAGNE !!! reessayez avec plus de bombes... ;-)"<< endl;
      cout << "Appuyer sur une touche pour quitter :" << endl;
      cin >> q;
      return 0;
    
     }
    
    
    
    
    
    
    void matrice_solution ( matrice3D M3D, int longueur, int largeur, int nbr )
    
     {
     bombe ( M3D, nbr, longueur, largeur );  // appel de la fonction bombe
     placement ( M3D, longueur, largeur );   // appel de la fonction placement
     }
    
    void zero ( matrice3D M3D, int longueur, int largeur )
    // initialise toute la matrice à zéro
     {
     for ( int h=0; h <= (longueur+2); h++ )
       {
       for ( int k=0; k <= (largeur+2); k++ )
         {
         M3D [0] [h] [k] = 0;
         M3D [1] [h] [k] = 0;
         M3D [2] [h] [k] = 0;
         }
       }
     }
    
    void bombe ( matrice3D M3D, int nbr, int longueur, int largeur )
    // fonction random
     {
     unsigned seed = time(NULL);
     srand(seed);
     for ( int cpt=0; cpt < nbr;  ) // le compteur ne peut pas etre supérieur au nbr de bombe
       {
       int l, h, k;
       l = rand()%3;    // l = navigateur de vecteur ( de 0 à 2 )
       h = 1+rand()%longueur;   // h = navigateur de lignes ( de 1 à longueur )
       k = 1+rand()%largeur;    // k = navigateur de colonnes ( de 1 à largeur )
       if ( M3D [l] [h] [k] != 666 ) // si la case n'est pas encore une bombe
         {
         M3D [l] [h] [k] = 666; // cette case devient une bombe
         cpt++; // et on augmente compteur de 1
         }
       }
     }
    
    void placement ( matrice3D M3D, int longueur, int largeur )
    // incrémentation des cases autour des bombes
     {
     for ( int l=0; l < 3; l++ )
       {
       if ( l == 0 ) // si on est dans la première grille
         {
         for ( int h=1; h < (longueur+1); h++ )
           {
           for ( int k=1; k < (largeur+1); k++ )
             {
             if ( M3D [0] [h] [k] == 666 )
               {
               for ( int l1 = l; l1 < (l+2); l1++ )
                 {
                 for ( int h1 = (h-1); h1 < (h+2); h1++ )
                   {
                   for ( int k1 = (k-1); k1 < (k+2); k1++ )
                   // incrémentation tout autour de la bombe et dans la grille suivante aussi
                     {
                     if ( M3D [l1] [h1] [k1] != 666 )
                       M3D [l1] [h1] [k1] +=1;
                     }
                   }
                 }
               }
             }
           }
         }
       else if ( l == 1 ) // si on est dans la 2eme grille
         {
         for ( int h=1; h < (longueur+1); h++ )
           {
           for ( int k=1; k < (largeur+1); k++ )
             {
             if ( M3D [1] [h] [k] == 666 )
               {
               for ( int l1 = (l-1); l1 < (l+2); l1++ )
                 {
                 for ( int h1 = (h-1); h1 < (h+2); h1++ )
                   {
                   for ( int k1 = (k-1); k1 < (k+2); k1++ )
                   // incrémentation tout autour de la bombe et dans la grille suivante et précédante
                     {
                     if ( M3D [l1] [h1] [k1] != 666 )
                       M3D [l1] [h1] [k1] += 1;
                     }
                   }
                 }
               }
             }
           }
         }
       else if ( l == 2 )  // si on est dans la 3eme grille
         {
         for ( int h=1; h < (longueur+1); h++ )
           {
           for ( int k=1; k < (largeur+1); k++ )
             {
             if ( M3D [2] [h] [k] == 666 )
               {
               for ( int l1 = ( l-1 ); l1 < (l+1); l1++ )
                 {
                 for ( int h1 = (h-1); h1 < (h+2); h1++ )
                   {
                   for ( int k1 = (k-1); k1 < (k+2); k1++ )
                   // incrémentation tout autour de la bombe et dans la grille précédante
                     {
                     if ( M3D [l1] [h1] [k1] != 666 )
                       M3D [l1] [h1] [k1] += 1;
    
                     }
                   }
                 }
               }
             }
           }
         }
       }
    
     }
    
    void affiche ( matrice3D M3D, matrice3D M3D2, int longueur, int largeur )
    // permet d'afficher la matrice et aussi de faire de jolies petites cases autour ...
     {
     int cpt;
     for ( int l=0; l < 3; l++ )    // permet d'afficher la matrice de manière lisible
       {
       cout << l+1 << "." << endl << endl;
       for ( cpt = 1; cpt < (largeur+1); cpt++ )
         if ( cpt <= 9 )
           cout << " " << cpt << "  ";
         else if ( cpt <= 99 )
           cout << " " << cpt << " ";
    
       cout << endl;
       for ( cpt = 1; cpt < (largeur+1); cpt++ )
         cout << "----";
       cout << endl;
    
       for ( int h=1; h < (longueur+1); h++ )
         {
         for ( int k=1; k < (largeur+1); k++ )
           {
           if ( M3D2 [l] [h] [k] == 444 ) // 444 = drapeau
             cout << " " << "x" << " ";
           else if ( M3D2 [l] [h] [k] == 555 )  // 555 = inconnue
             cout << " " << "?" << " ";
           else if ( M3D2 [l] [h] [k] == 666 ) // 666 = BOMBE
             cout << " " << "B" << " ";
           else if ( M3D2 [l] [h] [k] == 777 ) // 777 = erreur
             cout << " " << "!" << " ";
           else if ( M3D2 [l] [h] [k] <= 9 )
             cout << " " << M3D2 [l] [h] [k] << " ";
           else
             cout << " " << M3D2 [l] [h] [k];
           cout << "|";
           }
         cout << " " << h;
         cout << endl;
         for ( int k=1; k < (largeur+1); k++ )
           cout << "----";
         cout << endl;
         }
       cout << endl;
       }
    
     }
    
    
    void rien ( matrice3D M3D2, int longueur, int largeur )
    // initialise une matrice à la valeur 555 = inconnue = ?
     {
     for ( int h=0; h <= (longueur+2); h++ )
       {
       for ( int k=0; k <= (largeur+2); k++ )
         {
         M3D2 [0] [h] [k] = 555;
         M3D2 [1] [h] [k] = 555;
         M3D2 [2] [h] [k] = 555;
         }
       }
    }
    
    

    Voila stun ptit démineur programmé en 3D mais en apparence console, càd qu'il faut superposer mentalement les 3 tableaux :D

    C'était mon projet 3 en API au premier semestre ...

    edit : taille du code -> petit[/code]
    THiBOo, 1 Mai 2003
    #26
  7. Offline
    ben le puts c comme un printf avec le \n inclus...
    le getch(), c juste pour attendre un caractère ;)

    mais bon, il est vrai que ça vient du C pur.
    TITM4v3rick, 1 Mai 2003
    #27
  8. Offline
    hehe PANCAKE !
    google -> C++ code source
    et tu auras plein de codes que tu pourras compiler
    hehe, 1 Mai 2003
    #28
  9. Offline
    PS : pour les vector et les listes,
    use #include <vector.h> et #include <list.h>

    la déclaration est simple...

    genre vecteur 3D : vector < vector < vector < Case > > > vc;
    Case étant une classe réprésentant une "brique" de la construction 3D ayant ces caractéristiques (x,y,z, autres...)

    et pour se ballader, hop un Iterator ;)
    TITM4v3rick, 1 Mai 2003
    #29
  10. Offline
    THiBOo Elite
    J'étais encore jeune et inexpérimenté :D j'avais meme pas fais de classe :shock: :?

    C'est dire :D mais bon now je dois faire un labyrinthe avec des téléporteurs a la place des murs et des clés, jusque là c'est simple, mais en plus je dois créer un algo qui me sorte de ce labyrinthe par lui meme en récupérant toutes les clés ... :D backtracking power quoi :p
    THiBOo, 1 Mai 2003
    #30
  11. Offline

    ah les arbres ça donne des boutons, berk berk...
    Nous on fait surtout des GUI pour le moment
    moi ne dois juste refaire msn (socket) lol, mais le dernier projet ct de faire un jeu de légo en 3D, backtracking aussi...
    TITM4v3rick, 1 Mai 2003
    #31
  12. Offline
    THiBOo Elite
    Les arbres ouais :D

    Mais pour ce labyrinthe, je ne fais pas un arbre, mais un tableau d'elem, et un backtracking la dessus, c'est encore plus marrant :D

    mais bon vous programmez des truc en 3D ? tu as vu l'opengl ? vai m'y mettre pendant les vacance ainsi qu'au php :D

    Tu es en quoi ?

    moi première candi info ULB :p
    THiBOo, 1 Mai 2003
    #32
  13. Offline
    OpenGl c surtout l'année prochaine, ici on pouvait faire par nous même...
    PHP, ouais faudrait aussi que je look un jour à ce brol mais bon, une chose à la fois, C/C++/html/javascript/assembleur, faire des CGI, des GUI et encore j'en oublie, ça fait beaucoup en un an (parce que moi je programme réellement depuis cette année :D, avant je faisais du Turbo Pascal, il paraît que c pareil que du Delphi mais bon...)

    Moi je suis en seconde ;)
    TITM4v3rick, 1 Mai 2003
    #33
  14. Offline
    zine zoline
    bouh ca a lair balaise votre truc
    j'avais eu deux projets info cette année et j'étais cassé...
    zine, 1 Mai 2003
    #34
  15. Offline
    Guest ex membre
    déso mais ya une erreur a ton programme et la trouve aps non plus :oops: :oops:
    Guest, 1 Mai 2003
    #35
  16. Online
    EINST Elite
    1° candi polytech à l'ULB apparement à voir l'intitulé des projets que j'ai pas fait comme j'étais dispensé d'info pr ma 2° première...
    EINST, 1 Mai 2003
    #36
  17. Offline
    THiBOo Elite
    Ouais apparemment j'ai aussi du faire ce projet de polytech pour un pote du moins le premier ... assez bien réussi je dois dire :D

    Pour ce qui est de l'erreur dans mon prog, si il y en a une, ton compilateur doit te dire a quel ligne il se situe et te donner une description ( c'est ce qu'on appelle un debugger :D ) alors donne moi l'erreur et je te dirai quoi changer ;) il suffit d'un peu remonter la fenetre ou apparait le nombre d'erreur :D
    THiBOo, 1 Mai 2003
    #37
Statut de la discussion:
Fermée.