Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.24 KB | None | 0 0
  1. #include<iostream>
  2. #include<math.h>
  3. #include<string>
  4. #include <stdlib.h>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. // Classe mère abstraite Forme qui va donner 3 filles: carré, rectangle, cercle
  10. class Forme
  11. {
  12. public:
  13. //définitions des fonctions de la classe abstraite
  14. virtual double perimetre()=0;
  15. virtual double aire()=0;
  16. virtual void afficher()=0;
  17. virtual ~Forme(){};
  18. };
  19.  
  20.  
  21. //------------------ Carré ------------
  22. //Classe dille de Forme, définie par son coté
  23. class carre:public Forme{
  24. protected:
  25. double cote;
  26. public:
  27. //Constructeur
  28. carre(double);
  29. //fonctions, qui renvoient le perimetre, l'air et les propriétés d'un carré
  30. virtual double perimetre();
  31. virtual double aire();
  32. virtual void afficher();
  33. //Destructeur
  34. virtual ~carre();
  35. };
  36.  
  37. carre::carre(double a){cote=a;}
  38. double carre::perimetre(){return(4*cote);}
  39. double carre::aire(){return(pow(cote,2));}
  40.  
  41. void carre::afficher()
  42. {
  43. cout<<"--------------------------"<<endl;
  44. cout<<"Forme : Carre"<<endl;
  45. cout<<"--------------------------"<<endl;
  46. cout<<"- Son cote : "<<cote<<endl;
  47. cout<<"- Son perimetre : "<<4*cote<<endl;
  48. cout<<"- Son aire : "<<cote*cote<<endl;
  49. cout<<"--------------------------"<<endl<<endl;
  50. }
  51. carre::~carre(){}
  52.  
  53. //----------------------- Rectangle ------------------------
  54. //On définie la classe rectangle qui est fille de carre et qui est définie par sa largeur (coté du carré) et sa longueur
  55. class rectangle:public carre{
  56.  
  57. protected:
  58. float longueur;
  59.  
  60. public:
  61. //constructeur
  62. rectangle(float ,float);
  63. //fonctions, qui renvoient le perimetre, l'air et les propriétés d'un rectangle
  64. virtual double perimetre();
  65. virtual double aire();
  66. virtual void afficher();
  67. //destructeur
  68. virtual ~rectangle();
  69. };
  70.  
  71. rectangle::rectangle(float v1,float v2):carre(v1){longueur = v2;}
  72. double rectangle::perimetre(){return(2*cote + 2*longueur);}
  73. double rectangle::aire(){return(cote*longueur);}
  74. rectangle::~rectangle(){}
  75.  
  76. void rectangle::afficher()
  77. {
  78. cout<<"--------------------------"<<endl;
  79. cout<<"Forme : Rectangle"<<endl;
  80. cout<<"--------------------------"<<endl;
  81. cout<<"- Sa largeur : "<<cote<<endl;
  82. cout<<"- Sa longeur : "<<longueur<<endl;
  83. cout<<"- Son perimetre : "<<2*cote+2*longueur<<endl;
  84. cout<<"- Son aire : "<<longueur*cote<<endl;
  85. cout<<"--------------------------"<<endl<<endl;
  86. }
  87. // ---------- Cercle ----------
  88. //On définie la classe cercle qui est fille de carre et qui est définie par son rayon (coté du carré)
  89. class cercle:public carre{
  90.  
  91. public:
  92. //Constructeur
  93. cercle(float);
  94. //fonctions, qui renvoient le perimetre, l'air et les propriétés d'un cercle
  95. virtual double perimetre();
  96. virtual double aire();
  97. virtual void afficher();
  98. //destructeur
  99. virtual ~cercle();
  100. };
  101.  
  102. cercle::cercle(float v1):carre(v1){}
  103. double cercle::perimetre(){return(2*M_PI*cote);}
  104. double cercle::aire(){return(M_PI*cote*cote);} //M_PI est égale a pi dans la bibliotheque <stdlib.h>
  105. cercle::~cercle(){}
  106.  
  107. void cercle::afficher()
  108. {
  109. cout<<"--------------------------"<<endl;
  110. cout<<"Forme : Cercle"<<endl;
  111. cout<<"--------------------------"<<endl;
  112. cout<<"- Son rayon : "<<cote<<endl;
  113. cout<<"- Son perimetre : "<<2*M_PI*cote<<endl;
  114. cout<<"- Son aire : "<<M_PI*cote*cote<<endl;
  115. cout<<"--------------------------"<<endl<<endl;
  116. }
  117. void afficher_forme(carre * f){f->afficher();}
  118. void afficher_forme(rectangle * f){f->afficher();}
  119. void afficher_forme(cercle * f){f->afficher();}
  120.  
  121.  
  122. // ------- Main pour tester les fonction
  123.  
  124. /*
  125. main()
  126. {
  127. carre c(3);
  128. rectangle r(3,4);
  129. cercle ce(4);
  130. afficher_forme(&c);
  131. afficher_forme(&r);
  132. afficher_forme(&ce);
  133.  
  134. Forme * f1 = new carre (5);
  135. f1->afficher();
  136.  
  137. Forme * f2 = new rectangle(6,7);
  138. f2->afficher();
  139.  
  140. Forme * f3 = new cercle(3);
  141. f3->afficher();
  142. }
  143. */
  144. int saisir_n() //Saisir un entier en utilisant les pointeurs
  145. { int n;
  146. do{
  147. cout<<"Quelle est la taille du tableau a ajouter: ";
  148. cin>>n;
  149. }while(n<0);
  150. return(n);
  151. }
  152.  
  153. void saisir(Forme *t, int a, int b) //Fonction qui propose de saisir un tableau de Forme de tailles b-a
  154. {
  155. float d,e; //les paramètres des
  156. int k; //choix de la forme
  157. int i;
  158.  
  159. for (i=a;i<b;i++)
  160. {
  161. do{
  162. cout<<"Pour le "<<i+1<< "ieme element du tableau, voulez vous saisir:"<<endl<<" 1 - Un carre"<<endl<<" 2 - Un rectangle"<<endl<< " 3 - Un cercle";
  163.  
  164. cin>>k;
  165. if (k==1){cout<<"Entrer le cote du carre a ajouter: ";cin>>d;t[i]=carre(d);cout<<endl;}
  166. if (k==2){cout<<"Entrer la largeur du rectangle a ajouter: ";cin>>d;cout<<"Entrer la longueur du rectangle a ajouter: ";cin>>e;t[i]=rectangle(d,e);}
  167. if (k==3){cout<<"Entrer le rayon du cercle a ajouter: ";cin>>d;t[i]=cercle(d);}
  168.  
  169. }while(k!=1 && k!=2 && k!=3);
  170. }
  171. }
  172.  
  173.  
  174. void afficher(Forme *t, int n) //Affiche les n premières valeurs d'un tableau t
  175. {
  176. int i;
  177. for (i=0;i<n;i++)
  178. {
  179. t[i].afficher(); //affiche le tableau élément par élément
  180. }
  181. }
  182.  
  183. main()
  184. { int choix; //Choix que l'utilisateur va faire entre 1,2,3 dans le menu
  185. int n; // taille du tableau à ajouter au tableau précédent
  186. int N=0; //taille totale du tableau au cours du temps
  187. Forme *t=NULL; //Initialisation du tableau
  188. do
  189. {
  190. cout<<endl<<"################################################## Menu ##################################################"<<endl;
  191. cout<<" 1 - Saisir des formes "<<endl;
  192. cout<<" 2 - Afficher le tableau "<<endl;
  193. cout<<" 3 - Quitter"<<endl;
  194. cout<<"##########################################################################################################";
  195. cin>>choix;
  196.  
  197. if(choix==1)
  198. {
  199. n=saisir_n();
  200. if(N==0)
  201. {
  202. t=(Forme*)malloc(n*sizeof(Forme)); //Création du tableau t en allouant la mémoire suffisante
  203. cout<<endl<<"Saisir les elements du tableau:"<<endl;
  204. }
  205. else
  206. {
  207. t=(Forme*)realloc(t,(N+n)*sizeof(Forme));//On réallou de la mémoire au tableau t
  208. cout<<endl<<"Saisir la suite du tableau:"<<endl;
  209. }
  210.  
  211. saisir(t,N,n+N);
  212. N=n+N; //On met a jour la taille du tableau
  213. }
  214. if(choix==2)
  215. {
  216. if(t==NULL)
  217. {
  218. cout<<"Veuillez d'abord appuyer sur 1"<<endl;
  219. }
  220. else
  221. {
  222. cout<<"Le tableau en memoire est:"<<endl;
  223. afficher(t,N);
  224. cout<<endl;
  225. }
  226. }
  227. if(choix==3){exit(0);}
  228.  
  229. }while(choix!=1 || choix!=2 || choix!=3);
  230. free(t);
  231. cout<<endl<<"################################################## FIN ##################################################"<<endl;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement