Advertisement
Guest User

Visiblement, il fonctionne mais il n'affiche pas ce qu'il f

a guest
Jan 23rd, 2020
195
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. // Pour simplifier
  7. typedef string Forme   ;
  8. typedef string Couleur ;
  9.  
  10. class Brique
  11. {
  12. private:
  13.   Forme   forme   ;
  14.   Couleur couleur ;
  15.  
  16. public:
  17.   /*****************************************************
  18.     Compléter le code à partir d'ici
  19.   *******************************************************/
  20.     Brique(const string & f,const string & c)
  21.     :forme(f),couleur(c)
  22.     {}
  23.  
  24.     string getCouleur()
  25.     {
  26.         return couleur;
  27.     }
  28.  
  29.     void afficher(ostream& sortie) const
  30.     {
  31.         if(couleur.size() > 0){
  32.             sortie << "(" << forme << ", " << couleur << ")";
  33.         } else {
  34.             sortie << forme;
  35.         }
  36.     }
  37. };
  38.  
  39. ostream& operator<<(ostream &cout, Brique const& b)
  40. {
  41.     b.afficher(cout);
  42.     return cout;
  43. }
  44.  
  45. class Construction
  46. {
  47.   friend class Grader;
  48. public:
  49.  
  50.     Construction(const Brique& b)
  51.     :contenu({{{b}}})
  52.     {}
  53.  
  54.     Construction(const Construction& c)
  55.     :contenu(c.contenu)
  56.     {}
  57.  
  58.     vector<vector<vector<Brique>>> getContenu() const
  59.     {
  60.         return contenu;
  61.     }
  62.  
  63.     vector<vector<Brique>> getPlateform(size_t i) const
  64.     {
  65.         return contenu[i];
  66.     }
  67.  
  68.     vector<Brique> getLigne(size_t i, size_t j) const
  69.     {
  70.         return contenu[i][j];
  71.     }
  72.  
  73.     Brique getBrique(size_t i, size_t j, size_t k) const
  74.     {
  75.         return contenu[i][j][k];
  76.     }
  77.  
  78.     ostream& afficher(ostream& sortie) const
  79.     {
  80.         for(size_t i(contenu.size()-1); i > 0; i--){
  81.             sortie << "couche " << i << " :\n";
  82.             for(size_t j(contenu[i].size()-1); j > 0; j--){
  83.                 for(size_t k(contenu[i][j].size()-1); k > 0; k--){
  84.                     contenu[i][j][k].afficher(sortie);
  85.                 }
  86.             }
  87.             sortie << "\n";
  88.         }
  89.         return sortie;
  90.     }
  91.  
  92.     Construction operator^=(Construction const& c)
  93.     {
  94.         cout << "OPERATOR ^=" << endl;
  95.         size_t taille_before(c.contenu.size());
  96.         for(size_t i(0); i < taille_before; i++){
  97.             contenu.push_back(c.contenu[i]);
  98.         }
  99.         return *this;
  100.     }
  101.  
  102.     Construction operator-=(Construction const& c)
  103.     {
  104.         cout << "OPERATOR -=" << endl;
  105.         if(c.contenu.size() > contenu.size()){
  106.             for(size_t i(0); i < contenu.size(); i++){
  107.                 for(size_t j(0); j < contenu[i].size(); j++){
  108.                     contenu[i].push_back(c.contenu[i][j]);
  109.                 }
  110.             }
  111.         }
  112.         return *this;
  113.     }
  114.  
  115.     Construction operator+=(Construction const& c)
  116.     {
  117.         cout << "OPERATOR +=" << endl;
  118.         if(c.contenu.size() > contenu.size()){
  119.             for(size_t i(0); i < contenu.size(); i++){
  120.                 for(size_t j(0); j < contenu[i].size(); j++){
  121.                     for(size_t k(0); k < contenu[i][j].size(); k++){
  122.                         contenu[i][j].push_back(c.contenu[i][j][k]);
  123.                     }
  124.                 }
  125.             }
  126.         }
  127.         return *this;
  128.     }
  129. private:
  130.     vector<vector<vector<Brique>>> contenu;
  131.     /*contenu[HAUTEUR(i)][PROFONDEUR(j)][LARGEUR(k)]*/
  132. };
  133.  
  134. const Construction operator+(Brique const& b, Brique const& c)
  135. {
  136.     cout << "OPERATOR : BRIQUE + BRIQUE" << endl;
  137.     Construction a(b);
  138.     Construction d(c);
  139.     a+=d;
  140.     return a;
  141. }
  142.  
  143. ostream& operator<<(ostream& cout, Construction const& c)
  144. {
  145.     c.afficher(cout);
  146.     return cout;
  147. }
  148.  
  149. const Construction operator-(Construction& a, Construction const& c)
  150. {
  151.     cout << "OPERATOR -" << endl;
  152.     Construction b(a);
  153.     return b-=c;
  154. }
  155.  
  156. const Construction operator+(Construction& a, Construction const& c)
  157. {
  158.     cout << "OPERATOR +" << endl;
  159.     Construction b(a);
  160.     return b+=c;
  161. }
  162.  
  163. const Construction operator^(Construction& a, Construction const& c)
  164. {
  165.     cout << "OPERATOR ^" << endl;
  166.     Construction b(a);
  167.     return b^=c;
  168. }
  169.  
  170. const Construction operator+(Brique const& b, Construction const& c)
  171. {
  172.     cout << "BRIQUE + CONSTRUCTION" << endl << endl;
  173.     Construction a(b);
  174.     return a+=b;
  175. }
  176.  
  177. const Construction operator+(Construction const& c, Brique const& b)
  178. {
  179.     cout << "CONSTRUCTION + BRIQUE" << endl << endl;
  180.     Construction a(b);
  181.     return a+=b;
  182. }
  183.  
  184. const Construction operator*(unsigned int n, Brique const& b)
  185. {
  186.     cout << "N * BRIQUE" << endl << endl;
  187.     Construction a(b);
  188.     for(unsigned int i(0); i < n; i++){
  189.         a+=a;
  190.     }
  191.     return a;
  192. }
  193.  
  194. const Construction operator*(unsigned int n, Construction const& a)
  195. {
  196.     cout << "OPERATOR * : " << endl;
  197.     Construction c(a);
  198.     for(unsigned int i(0); i <= n; i++){
  199.         c+=c;
  200.     }
  201.     return c;
  202. }
  203.  
  204. const Construction operator/(unsigned int n, Construction const& a)
  205. {
  206.     cout << "OPERATOR / : " << endl;
  207.     Construction c(a);
  208.     for(unsigned int i(0); i < n; i++){
  209.         c^=c;
  210.     }
  211.     return c;
  212. }
  213.  
  214. const Construction operator%(unsigned int n, Construction const& a)
  215. {
  216.     cout << "OPERATOR % : " << endl;
  217.     Construction c(a);
  218.     for(unsigned int i(0); i < n; i++){
  219.         c-=c;
  220.     }
  221.     return c;
  222. }
  223.  
  224. /*******************************************
  225.  * Ne rien modifier après cette ligne.
  226.  *******************************************/
  227.  
  228. int main()
  229. {
  230.   // Modèles de briques
  231.   Brique toitD("obliqueD", "rouge");
  232.   Brique toitG("obliqueG", "rouge");
  233.   Brique toitM(" pleine ", "rouge");
  234.   Brique mur  (" pleine ", "blanc");
  235.   Brique vide ("                 ", "");
  236.  
  237.   unsigned int largeur(4);
  238.   unsigned int profondeur(3);
  239.   unsigned int hauteur(3); // sans le toit
  240.  
  241.   // on construit les murs
  242.   cout << "---------------------------\n" << "1. Construction de la maison :\n" << endl;
  243.   Construction maison( hauteur / ( profondeur % (largeur * mur) ) );
  244.  
  245.   // on construit le toit
  246.   cout << "---------------------------\n" << "2. Construction du toit : \n" << endl;
  247.   Construction toit(profondeur % ( toitG + 2*toitM + toitD ));
  248.  
  249.   cout << "---------------------------\n" << "3. Ajout au dessus du toit : \n" << endl;
  250.   toit ^= profondeur % (vide + toitG + toitD);
  251.  
  252.   // on pose le toit sur les murs
  253.   cout << "---------------------------\n" << "4. Pose du toit sur les murs : \n" << endl;
  254.   maison ^= toit;
  255.  
  256.   // on admire notre construction
  257.   cout << "---------------------------\n" << "5. Affichage de la construction : \n" << endl;
  258.   cout << maison << endl;
  259.  
  260.   return 0;
  261. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement