[CPP] projet Cephalopod

Page 1 sur 4 1, 2, 3, 4  Suivant

Voir le sujet précédent Voir le sujet suivant Aller en bas

[CPP] projet Cephalopod

Message  Stomox le Ven 26 Nov 2010, 11:31

Bonjour,

Pour le tablier (plateau) du projet, j'aimerais faire un tableau à 2 dimensions de dés.
J'aimerais pouvoir ajouter ou supprimer des dés dans ce tableau et donc, avoir la possibilité d'avoir des cases vides.

Pour l'instant, la seule méthode que j'ai trouvé est d'utiliser un tableau à 2 dimensions de pointeurs de dés, mais ca donne donc un tableau à 3 dimensions et il m'a semblé avoir entendu mr Monbaliu dire qu'on ne manipulerait pas de tableau a plus de 2 dimensions. Je me dis du coup qu'il y a une autre solution.
Est-ce bien le cas ? Est-ce que je dois plutot me pencher sur la librairie vector ? Est-ce qu'il existe une solution par simple tableau à 2 dimensions de dés ?

Merci par avance

Stomox

Nombre de messages : 16
Age : 27
Prénom : Arnaud
Statut : Étudiant
Date d'inscription : 01/01/2010

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Ven 26 Nov 2010, 11:47

laisse tomber les tableaux à la c et va voir du côté des conteneurs du c++, genre vector Very Happy








Like a Star @ heaven

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  Aftab007 le Ven 26 Nov 2010, 19:13

Bonjour c une ptite question que un ami me demandais ,
Est ce qu on peut utiliser le model de conception , "observateur-sujet d observation" ?

voila Merci pour lui Smile


Aftab007

Nombre de messages : 85
Age : 28
Prénom : Aftab
Date d'inscription : 27/11/2008

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  smb le Ven 26 Nov 2010, 19:23

Stomox a écrit:Bonjour,

Pour le tablier (plateau) du projet, j'aimerais faire un tableau à 2 dimensions de dés.
J'aimerais pouvoir ajouter ou supprimer des dés dans ce tableau et donc, avoir la possibilité d'avoir des cases vides.

Pour l'instant, la seule méthode que j'ai trouvé est d'utiliser un tableau à 2 dimensions de pointeurs de dés, mais ca donne donc un tableau à 3 dimensions et il m'a semblé avoir entendu mr Monbaliu dire qu'on ne manipulerait pas de tableau a plus de 2 dimensions. Je me dis du coup qu'il y a une autre solution.
Est-ce bien le cas ? Est-ce que je dois plutot me pencher sur la librairie vector ? Est-ce qu'il existe une solution par simple tableau à 2 dimensions de dés ?

Merci par avance

D'accord avec M. Vansteenkiste, c'est mieux d'utiliser vector !

Par contre, ne ne comprend pas pourquoi tu crois que le fait d'avoir un tableau à 2 dimensions dont chaque élément est un pointeur d'objet le transforme en tableau à 3 dimensions ??????????????
(que ça soit tableau à la c ou vector d'ailleurs!)


smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  smb le Ven 26 Nov 2010, 19:27

Aftab007 a écrit:Bonjour c une ptite question que un ami me demandais ,
Est ce qu on peut utiliser le model de conception , "observateur-sujet d observation" ?

voila Merci pour lui Smile


Je se suis pas certain de le voir au cours avant la remise du projet. Mais ce n'est pas interdit à condition que tu l'implémentes correctement.
Donc, au niveau des points, pas de pénalisation si on n'utilise pas le pattern, par contre, pénalisation si on l'utilise mal !

Wink

[edit: cette réflexion sur l'évaluation m'est personnelle et ne s'impose nullement à mes collègues]

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Ven 26 Nov 2010, 19:49

smb a écrit:
Aftab007 a écrit:Bonjour c une ptite question que un ami me demandais ,
Est ce qu on peut utiliser le model de conception , "observateur-sujet d observation" ?

voila Merci pour lui Smile


Je se suis pas certain de le voir au cours avant la remise du projet. Mais ce n'est pas interdit à condition que tu l'implémentes correctement.
Donc, au niveau des points, pas de pénalisation si on n'utilise pas le pattern, par contre, pénalisation si on l'utilise mal !

Wink

[edit: cette réflexion sur l'évaluation m'est personnelle et ne s'impose nullement à mes collègues]

idem pour moi.

à l'attention de mes étudiants, je mets incessamment sous peu dans mon eDistri un document reprenant mes exigences personnelles relatives au projet.







pale

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 27 Nov 2010, 12:41

je prends le question de tableau à 2 dimension
dans projet1

j'ain une classe Plateau :

Plateau.h :

Code:
class Plateau   {
private :
   unsigned short NBLIGNE;
   unsigned short NBCOLONNE;
   De **plateau;

public :
   Plateau(unsigned short ligne,unsigned short colonne);
   void affiche();
   void placerUnDe(Position unePos,De unDe);
};

Plateau.cpp :

dans contructeur :

Code:

Plateau::Plateau(unsigned short ligne,unsigned short colonne)   {
   NBLIGNE = ligne;
   NBCOLONNE = colonne;
   plateau = malloc(sizeof(De *)* NBLIGNE);
 
/* bien sur il faut parcourir le plateau de 1 er dim ( ligne )et
      chaque ligne il faut allouer nombre de colonne la mémoir pour un De
*/

}

mais j'ai déjà un problem à ce niveau là :

à la ligne
plateau = malloc(sizeof(De *)* NBLIGNE);
Code:
invalid conversion from 'void*' to 'De**'


merci d'avance Smile

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Sam 27 Nov 2010, 13:34

didi a écrit:[...]
mais j'ai déjà un problem à ce niveau là :

à la ligne
plateau = malloc(sizeof(De *)* NBLIGNE);
Code:
invalid conversion from 'void*' to 'De**'
la réponse se trouve ici ou encore ici.






Basketball

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  smb le Sam 27 Nov 2010, 13:59

@didi
En fait que veux-tu faire ?
- un tableau à 2 dimensions de De
ou
- un tableau à 1 dimension de pointeurs de De ?

Et en plus, n'oublies pas qu'on est en C++ et qu'il est préférable d'utiliser new plutôt que malloc !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 27 Nov 2010, 15:14

nvs a écrit:
didi a écrit:[...]
mais j'ai déjà un problem à ce niveau là :

à la ligne
plateau = malloc(sizeof(De *)* NBLIGNE);
Code:
invalid conversion from 'void*' to 'De**'
la réponse se trouve ici ou encore ici.

merci monsieur le 2ièm ici. qui a bien repondu ma question .. Smile





Basketball

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 27 Nov 2010, 16:13

pour afficher le plateau de De j'appelle le méthode affiche()
( je doit afficher le plateau de De )

un moment j'appelle la méthode getFace() qui est dans le classe De

Code:
(plateau[i][k].getCouleur() == ROUGE)

le compilateur il m'envoi une erreur comme :

Code:
référence indéfinie vers « De::getFace() »


pourtant j'ai bien inclure tous les fichier.h et using namespace std;


Code:

#include "De.h"
#include "typesCommuns.h"
#include "Position.h"
#include "typesCommuns.h"
#include "Plateau.h"
#include <stdlib.h>
#include <iostream>
using namespace std;


merci d'avance

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  smb le Sam 27 Nov 2010, 16:41

didi a écrit:(...)
Code:
référence indéfinie vers « De::getFace() »
(...)

Ce message du linker signifie qu'il n'a pas trouvé la méthode getFace() de la classe De, qui normalement se trouve dans ton fichier De.cpp.

Es-tu certain de l'avoir codée ?
Es-tu certain de ne pas avoir oublié la portée, c'est-à-dire De::getFace() dans De.cpp ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  bluestyle le Dim 28 Nov 2010, 11:26

Bonjour tout le monde,
je voudrai savoir comment crée un tableau a 2 dimension avec des vecteur?

J'ai essayé ça "vector<vector<De>> plateau" et apparemment c'est pas bon. Alors j'ai défini un pointeur de vector comme ça " vector<De>* tableau" mais est-ce que c'est la bonne marche a suivre?? Merci d'avance.

bluestyle

Nombre de messages : 10
Prénom : Liron
Date d'inscription : 28/11/2010

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Dim 28 Nov 2010, 12:02

bluestyle a écrit:J'ai essayé ça "vector<vector<De>> plateau" et apparemment c'est pas bon.
c'est un petit bug du c++98 qui pose problème : il faut ajouter un espace entre les deux ">". ce dysfonctionnement devrait être corrigé dans la nouvelle norme.

plus de détails sur la déclaration et l'initialisation d'un vector de vector ici.







pirat

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Mar 30 Nov 2010, 22:32

bonsoir à tous

j'ai une problème d'execution dans la classe plateau

avant tous les ptits simplification par rapport mes code

* j'ai un plateau de Des par defaut le plateau est rempli uvec un De qui a le face 0;
* la classe plateau contient les methodes si une position se trouve au NORD,SUD à l'EST,àl'OUEST ;

et la méthode :
Code:
void * lesVoisin(Position unePosition);
qui retourne une zone mémoire allouer par dynamiquement et qui
contient le premier un unsigned int qui pour dit que combien de voisin autour d'une Position;
et le(s) nombre de voisin(s) qui se suivi de unsigned int

--------------------------------------------------------
unsigned int | Position1 | Position2 | positon3 | Position4 |
--------------------------------------------------------

Code:
void * Plateau::lesVoisin(Position unePosition)   {
   //this->affiche();
   void *tab = malloc((sizeof(Position)*4) + sizeof(unsigned int));
   Position *pos = (Position *)tab;
   pos = pos+sizeof(unsigned int);
   unsigned int *j = (unsigned int *) tab;
   unsigned int k = 0;
   for (int i =1;i <= 4;i++)   {
      switch (i)   {
      case 1 :  if (this->getDe(voisinNord( unePosition)).getFace()  != 0)   {
                  pos[k] = voisinNord( unePosition);
                  k++;
                  }
               break;
      case 2 : if (this ->getDe(voisinSud( unePosition)).getFace() != 0)   {
                  pos[k] = voisinSud( unePosition);
                  k++;
               }
               break;

      case 3 : if (this->getDe(voisinEst( unePosition)).getFace() != 0)   {
               pos[k] = voisinEst( unePosition);
               k++;
               }
               break;
      case 4 : if(this->getDe(voisinOuest( unePosition)).getFace()  != 0)      {
               pos[k] = voisinOuest( unePosition);
               k++;
            }
            break;
      }
   }
   (*j) = k;

   return tab;
}


la méthode fonctionne bien mais erruer d'execution .. Sad
quand je l'appelle cette methode il y a l'erreur d'execution
à la fin j'ai bien libérer la mémoire .

merci d'avance .. Smile


didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Mar 30 Nov 2010, 23:19

didi a écrit:
Code:
void *tab = malloc((sizeof(Position)*4) + sizeof(unsigned int));
Position *pos = (Position *)tab;
pos = pos+sizeof(unsigned int);
l'arithmétique des pointeurs, ça ne te dit rien ?

et aussi, privilégie les opérateurs de transtypage du c++ :
Code:
Position *pos = static_cast<Position *>(tab);
fait l'affaire ici.


didi a écrit:la méthode fonctionne bien mais erruer d'execution .. Sad
Laughing

très bon ça : la méthode fonctionne bien mais produit une erreur à l'exécution Wink

sinon, pourquoi ne pas simplement retourner un vector -- sans allocation dynamique ! -- de Position, sachant que ce conteneur connaît sa propre taille ?







rendeer

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Ven 03 Déc 2010, 20:42

bonsoir ,

j'ai un problem avec la constructeur sans paramètre

class De :
De.h:

Code:

class De   {

private :
   COULEUR couleur;
   unsigned int face;

public :

   De(COULEUR x,unsigned int y = 4);
   De();
   De(const De& autre );
   void affiche();
   COULEUR getCouleur();
   unsigned int getFace();
   void toString();
};

De.cpp :
Code:

#include "typesCommuns.h"
#include "De.h"
#include <iostream>
using namespace std;

De::De()   {
   couleur = ROUGE;
   face = 0;
}


De::De(const De& autre)   {
   this->couleur = autre.couleur;
   this->face = autre.face;

}

De::De(COULEUR x ,unsigned int uneFace = 4){
   couleur = x;
   face = uneFace;

}

j'ai 2 erreur message pour le constructeur avec paramètres :
dans De.h
Code:
after previous specification in 'De::De(COULEUR, unsigned int)'
et dans De.cpp
Code:
default argument given for parameter 2 of 'De::De(COULEUR, unsigned int)'

merci d'avance et bonne soirée Smile

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Ven 03 Déc 2010, 22:44

si une fonction ou une méthode ont un prototype, les valeurs par défaut de leurs paramètres sont fournies uniquement via ce prototype.

d'autre part :
  • le type COULEUR tout en majuscule ? ok pour une valeur de COULEUR, mais pas pour le type ;
  • pourquoi implémenter un constructeur par recopie ?
  • une méthode toString qui ne retourne rien ?
  • privilégie l'utilisation de la liste d'initialisation dans les constructeurs.








pale

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 04 Déc 2010, 12:23

enfait avant j'ai utilisé le tableau à 2 dimension mais le prof il m'a dit utiliser le vector
je ne connais pas trop le vector et j'ai cherché un peu sur l'internet mais il m'aider pas trop ;

le problem venait de class Plateau :

Plateau.h :

Code:
class Plateau   {
private :
   unsigned short NBLIGNE;
   unsigned short NBCOLONNE;
   vector<vector<De> > plateau;
....

Plateau.cpp :
Code:

Plateau::Plateau(unsigned short ligne,unsigned short colonne)   {
   NBLIGNE = ligne;
   NBCOLONNE = colonne;
   plateau = vector<vector<De> >(NBLIGNE,vector<De >(NBCOLONNE)); // erreur à cette ligne

        // no matching function for call to 'De::De()'

   for(int i = 0; i < ligne ; i++)   {
      for(int k = 0; k < colonne; k++)   {
         plateau[i][k] = De(ROUGE,0);
      }
   }

}

et il y a deux infos
comme :

Code:
De::De(const De&)
et
Code:
candidates are: De::De(COULEUR, unsigned int)

pourquoi implémenter un constructeur par recopie ?
pour l'instant je en ai pas besoin peut etre apres (si j'utilise dans une methode en parametre )

la methode est un faut de copier coller
pour afficher la classe De contien une methode void afficher()
merci d'avance

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Sam 04 Déc 2010, 12:56

quel est le problème ?





cyclops

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 04 Déc 2010, 13:04

erreur message dans la classe Plateau

Code:
no matching function for call to 'De::De()'


didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Sam 04 Déc 2010, 13:22

et ? le compilateur te dit qu'il n'y a pas de constructeur de dé sans argument. ce qui ne peut être que vrai. il en a besoin lors de la construction des lignes de ton vector. tu utilises à ce moment le second constructeur renseigné ici, qui a invoque en second argument le constructeur sans argument si aucune valeur ne lui est fournie. deux options s'offrent donc à toi : munir la classe De d'un constructeur sans argument ou construire les lignes avec une valeur de De explicitement fournie (comme tu le fais pour le vector de vector dont tu donnes explicitement la valeur vector<De>(NBCOLONNE) à chaque élément).







pirat

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  Stomox le Sam 04 Déc 2010, 13:29

Rebonjour,

J'ai de nouveau un probleme avec mon code ... et je ne peux me l'expliquer.

Si je lance mon Main avec les lignes suivantes, tout se passe bien:

Code:
 Tablier tab(5, 5);  // crée mon Tablier avec 5 lignes et 5 colonnes
   tab.setAt(0,0, de1); // affiche de1 (précédemment crée) en 0,0 (parametre visible du dé = VRAI)
   afficherTablier (tab); // affiche le Tablier en console

Si par contre, je veux utiliser le constructeur par défaut de Tablier (constructeur sans parametre), le nom de variable s'affiche en gras [tab] et mes méthodes ne sont pas reconnues:

Code:
 Tablier tab();  // crée mon Tablier avec le constructeur par défaut
   tab.setAt(0,0, de1); // méthode non reconnue
   afficherTablier (tab); // méthode non reconnue

Je me dis du coup qu'il y a un souci dans mon constructeur par défaut. Mais quand je relis mon code, tout devrait fonctionner selon moi puisque c'est le même à 2 lignes près:

Tablier.cpp

Code:
Tablier::Tablier (){
   nbLigne = 5;
   nbColonne = 5;
   tab2D.resize(nbLigne);
   for (int i = 0; i < nbColonne; i++){
      tab2D[i].resize(nbColonne);
   }
}

Tablier::Tablier (int nbL, int nbC){
   nbLigne = nbL;
   nbColonne = nbC;
   tab2D.resize(nbLigne);
   for (int i = 0; i < nbColonne; i++){
      tab2D[i].resize(nbColonne);
   }
}

avec Tablier.h

Code:
...
class Tablier {

private:
   int nbLigne;
   int nbColonne;
   vector<vector<Dice> > tab2D;

public:
   Tablier ();

   Tablier (int nbLigne, int nbColonne);

            ...
}

Est-ce que j'ai mal fait qq chose ?


Stomox

Nombre de messages : 16
Age : 27
Prénom : Arnaud
Statut : Étudiant
Date d'inscription : 01/01/2010

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  didi le Sam 04 Déc 2010, 13:53

didi a écrit:bonsoir ,

j'ai un problem avec la constructeur sans paramètre

class De :
De.h:

justement je me suis tombé sur cette problème hier
pourtant j'avait bien les constructeurs avec et sans argument ..
mais ça fontionne bien maintenant (j'ai le même code que hier ) je ne sais pas pourquoi ... Question
en tout cas merci bcp monsieur .. Smile

didi

Nombre de messages : 215
Prénom : Dinesh
Statut : Smile
Date d'inscription : 21/01/2009

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  nvs le Sam 04 Déc 2010, 15:57

Stomox a écrit:Si par contre, je veux utiliser le constructeur par défaut de Tablier (constructeur sans parametre), le nom de variable s'affiche en gras [tab] et mes méthodes ne sont pas reconnues:

Code:
 Tablier tab();  // crée mon Tablier avec le constructeur par défaut
   tab.setAt(0,0, de1); // méthode non reconnue
   afficherTablier (tab); // méthode non reconnue

Est-ce que j'ai mal fait qq chose ?
oui.

c'est un grand classique des mini-codes d'interro à analyser. je te laisse le plaisir d'en découvrir par toi-même la solution Wink











Basketball

_________________

nvs

Nombre de messages : 5238
Age : 44
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [CPP] projet Cephalopod

Message  Contenu sponsorisé Aujourd'hui à 18:57


Contenu sponsorisé


Revenir en haut Aller en bas

Page 1 sur 4 1, 2, 3, 4  Suivant

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum