[C con Clase] Duda sobre vectores en 3D
Miguel Alejandro Jimenez Ramirez
cerberbero en gmail.com
Jue Mar 27 12:50:31 CET 2014
Holaa todos el dia de hoy vengo con una duda sobre vectores en 3D ,
bueno pues voy a copiar el programa comleto y despues les hare las
preguntas especificas sobre el problema que tengo a ver si ustedes
pueden ayudarme:
El programa:
-----------------------------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// Pour simplifier
typedef string Forme ;
typedef string Couleur ;
class Brique
{
private:
Forme forme ;
Couleur couleur ;
public:
/*****************************************************
Compléter le code à partir d'ici
*******************************************************/
Brique (Forme a, Couleur b):forme(a),couleur(b){}
Forme get_forme()const{return forme;}
Couleur get_couleur() const{return couleur;}
ostream& afficher(ostream& sortie) const
{
sortie<<"( "<<forme<<" , "<<couleur<<" )"<<endl;
return sortie;
}
};
ostream& operator <<(ostream& sortie , Brique const & val)
{
return val.afficher(sortie);
}
class Construction
{
friend class Grader;
private:
vector<vector<vector<Brique>>> contenu;
public:
Construction (Brique a);
unsigned int get_contenu_size()const{return contenu.size();}
unsigned int get_contenu_size(int i)const{return contenu[i].size();}
unsigned int get_contenu_size(int i, int j)const{return contenu[i][j].size();}
Brique get_contenu(int i=0, int j=0, int k=0)const{return contenu[i][j][k];}
vector<vector<vector<Brique>>> get_contenuVect()const{return contenu;}
ostream& afficher(ostream& ) const;
void operator +=(Construction const & a);
};
ostream& operator <<(ostream& sortie , Construction const & tmp)
{
return tmp.afficher(sortie);
}
ostream& Construction::afficher(ostream& os) const
{
unsigned int i(0),j(0),k(0);
if (contenu.empty())
return os;
else
{
for(i =0; i<contenu.size();i++){
os << "Couche " << i << endl;
for(j = 0 ;j<contenu[i].size();j++){
for(k = 0;k<contenu[i][j].size();k++){
os<< contenu[i][j][k];
}
}
}
return os;
}
}
void Construction::operator +=(Construction const &a)
{
for(unsigned int j =0; j< a.contenu.size() ; j++){
for(unsigned int k=0; k < a.contenu[j].size(); k++) {
contenu[k].push_back(a.contenu[j][k]);
}
}
}
const Construction operator+(Construction a,Construction const& b)
{
a+=b;
return a;
}
/**
const Construction operator*(unsigned int n, Construction const& a)
{
return a;
}
const Construction operator/(unsigned int n, Construction const& a)
{
}
const Construction operator%(unsigned int n, Construction const& a)
{
}
*/
Construction::Construction(Brique a):contenu (1, vector < vector <
Brique > > (1,vector<Brique> (1, a))) {}
/*******************************************
* Ne rien modifier après cette ligne.
*******************************************/
int main()
{
// Modèles de briques
Brique toitD("obliqueD", "rouge");
Brique toitG("obliqueG", "rouge");
Brique toitM(" pleine ", "rouge");
Brique mur (" pleine ", "blanc");
Brique vide (" ", "");
/**unsigned int largeur(4);
unsigned int profondeur(3);
unsigned int hauteur(3); // sans le toit
*/
// on construit les murs
Construction maison(mur+mur+mur);
Construction maison2(mur);
//cout<<maison;
cout<<maison ;
//Construction maison( hauteur / ( profondeur % (largeur * mur) ) );
/**
// on construit le toit
Construction toit(profondeur % ( toitG + 2*toitM + toitD ));
toit ^= profondeur % (vide + toitG + toitD);
// on pose le toit sur les murs
maison ^= toit;
// on admire notre construction
cout << maison << endl;
*/
return 0;
}
-----------------------------------------------------------------------------------------------------------------------------------
DUDAS:
En realidad de este programa lo queno entiendo , por ahora escomo
hacer para manejar el vector de 3 dimensiones.
Digamos que i , j k sonlas dimensiones , pero no he podido dar con el
buen resultado del operador +
si ven en el main , envio una clase Construction asi:
Construction maison(mur+mur+mur);
cout<<maison ;
Al ejecutar este codigo obtengo:
Couche 0
( pleine , blanc )
( pleine , blanc )
( pleine , blanc )
Cosa que esta mal , por que deberia obtener segun lo que me piden es
lo siguiente:
Couche 0
( pleine , blanc ) ( pleine , blanc ) ( pleine , blanc )
Y no he podido lograrlo. Se que el error es que estoy recorriendo el
vector en i y deberia recorrerlo en k , pero ya he hecho diferentes
cambios y bien sea obtengo solo:
Couche 0
( pleine , blanc )
O un error de segmentation fault. La verdad llevo ya mucho tiempo con
este ejercicio y estoy bloqueado , me gustaria saber si alguien puede
ayudarme con los bucles de la funcion affcher() y con el operador +=
ya que es ahi donde radica el problema alqueme enfrento en este
momento.
Gracias por su ayuda quedo atento a sus comentarios
--
MIGUEL ALEJANDRO JIMENEZ R.
Más información sobre la lista de distribución Cconclase