C++ : besoin d'un programme qui marche

Statut
N'est pas ouverte pour d'autres réponses.

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 a dit:
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 :)
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)
 
1er
OP
G

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:
 

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
 
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
 

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 a dit:
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 ...
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.
 

hehe

PANCAKE !
AcTAruS a dit:
Salut est ce que qqun peut me dire ou on peut trouver des programme en C++ pour que je puisse tester mon compilateur Visual C++. Si vous connaissez un site...
Ou alors donner m'en un svp
Merci
Meme un bête programme c bon :D
Je compte sur vous Merci :wink: :wink:
google -> C++ code source
et tu auras plein de codes que tu pourras compiler
 
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 ;)
 

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 a dit:
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

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...
 

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
 
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 ;)
 

zine

zoline
bouh ca a lair balaise votre truc
j'avais eu deux projets info cette année et j'étais cassé...
 
1er
OP
G

Guest

ex membre
THiBOo a dit:
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]
déso mais ya une erreur a ton programme et la trouve aps non plus :oops: :oops:
 

EINST

⭐⭐⭐⭐⭐
zine a dit:
sinon je peux toujours de filer mes 2 projets dinfos ( calcul boursier rudimentaire et mini traitement de texte) si besoin est
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...
 

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
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut