|
|
|
|
Bonjours a tous.En fait je dois faire un excercie en c++ mais j'y arrive vraiment pas, donc si qqun pourrait m'aider ce serait vraiment sympa.
Voici l'eenoncé de l'éxecrice:( dsl pour avoir mit un lien ms je pouvais pas faire autrement)
http://www.ulb.ac.be/di/info-f-101/Projets/05-06/projet4.pdf
Voila j'èspere vraiment que qqun m'aide parce que c'est vraiment tres important pour moi.Merci d'avance a tous.Alex
Bon tu peux déjà t'inspirer de cet ancien post pour découvrir un peu le c++. La classe codée prend en template le type de donnée stockée donc tu peux mettre du bool si tu le souhaites.
|
J'ai compris pas de pb ;-) C'est vrai que ce que j'ai mis sur le post en lien est un peu hardcore pour quelqu'un qui débute, mais idéalement c'est comme ça que dans le futur tu devras programmer (enfin un style voisin je ne prétends pas avoir la science infuse ^^)
matrix<bool> A; Soit tu la retailles pour l'adapter spécialement aux booléens : tu vire les template <T>, tu changes tout les T dans le code par des bool et ca deviendra plus clair normalement : class matrix{
protected:
std::vector<std::vector<bool> > data;
public:
/**
* \brief Constructeur par defaut
*/
matrix(){}
/**
* \brief Alloue en memoire une matrice
* \param nb_lig Nombre de ligne
* \param nb_col Nombre de colonne
*/
matrix(std::size_t nb_lig,std::size_t nb_col){
for(std::size_t lig=0;lig<nb_lig;++lig){
std::vector<bool> tmp;
tmp.reserve(nb_col);
for(std::size_t col=0;col<nb_col;++col){
tmp.push_back(0);//valeur par defaut
}
data.push_back(tmp);
}
}
...
/**
* \brief Accesseur vers un element de la matrice
* \param lig son numero de ligne
* \param col son numero de colonne
* \return la valeur stockee
*/
inline bool get(std::size_t lig,std::size_t col) const{
assert(lig<size1());
assert(col<size2());
return data[lig][col];
}
...
};
/**
* \brief Operateur << pour les matrices
* \param o Le flux de sortie
* \param m la matrice a ecrire
*/
std::ostream& operator << (std::ostream& o,const matrix & m){
for(std::size_t lig=0;lig<m.size1();++lig){
for(std::size_t col=0;col<m.size2();++col){
o<<m.get(lig,col)<<" ";
}
o<<std::endl;
}
return o;
}
...
Si tu utilises using namespace std; en début de fichier tu peux supprimer tous les std:: ce qui allègera le code (personnellement je n'aime pas trop les using namespace donc bon... c'est d'ailleurs à proscrire dans les .h (.hpp) mais bref...) Une fois que tu auras fait tout ça, vu ton code, il ne restera plus qu'à comprendre : - la classe STL vector - les références Une vector c'est un tableau contigu en mémoire qui se comporte de manière assez semblable à un int tab[255] pour std::vector<int>, sauf que tu n'as plus à te préocupper de la taille grace au pusj_back (qui greffe un élément en fin de tableau). Cf : http://www.sgi.com/tech/stl/Vector.html Si les std::size_t te perturbent, tu peux les changer par des unsigned int. Les références : c'est presque la même chose qu'un pointeur, sauf que ça permet de manipuler syntaxiquement parler le paramètre comme s'il s'agissait de l'objet pointé directement. Exemple : void incrementer1(int *p){ ++(*p);}
void incrementer2(int &p){ ++p;}
void incrementer3(int p){ ++p;}
int main(){
int p=0;
incrementer1(&p); //p==1
incrementer2(p); //p==2
incrementer3(p); //p==2 !!!
return 0;
}
En particulier, quand tu appelles une fonction, ses paramètres sont une copie (c'est pour ça que le incrementer3 ne marche pas. cf cours sur les ponteurs (=adresses) si quelque chose t'échappe, ou ballade toi dans le forum. Passer un paramètre ni par référence ou par pointeru c'est donc mal, car s'il est gros il est très long à copier, alors qu'une référence est très rapide à copier ^^ Cependant lors d'un passage par référence il faut garantir la constance quand c'est possible (par exemple afficher une matrice ne la modifie pas) et c'est le rôle du const. Ainsi incrementer(int const & i){++i;} //ne compile pas car i est modifié
Pour les méthodes (fonctions internse à une classe comme size1 dans le code que je t'ai filé) tu peux voir unconst qui n'est pas rattaché à un paramètre. Il correspond au const s'appliquant à *this : const matrix<int> m; //m ne doit pas varier on ne peut appeler que des methodes const dessus m.size2() ; //ok m.set(0,0,1); //pas ok D'autres questions ? ;-) Bonne chance |
Il n'y a pas de problème si ça me gonflait de t'aider je ne le ferais pas.
|
SAlut c'est encore moi.J'ai finalement réussi a faire qqchose de bon (enfin je crois).Grace a tes conseils et avec l'aide d'internet ( surtout grace a un lien sur c++ que j'ai pu trouver sur le forum).
|
Euh tutoies moi s'il te plaît ^^ Bon là tu as programmé plus en c qu'en c++, puisque tu n'as pas trop utilisé les méthodes et les operators, mais sinon le code m'a l'air juste.
|