Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.60 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <cmath>
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. class Figura
  7. {
  8. public:
  9. virtual char * podajNazwe() = 0;
  10. virtual double obliczPole() = 0;
  11. };
  12.  
  13. class Kwadrat : public Figura
  14. {
  15. public:
  16. char * podajNazwe() { return "Kwadrat"; }
  17.  
  18. Kwadrat( double b ) : bok( 0 )
  19. {
  20. ustawBok( b );
  21. }
  22.  
  23. Kwadrat() : bok( 0 ) {}
  24.  
  25. void ustawBok( double bok )
  26. {
  27. if( bok >= 0 )
  28. Kwadrat::bok = bok;
  29. }
  30.  
  31. double pobierzBok()
  32. {
  33. return bok;
  34. }
  35.  
  36. double obliczPole()
  37. {
  38. return bok * bok;
  39. }
  40. private:
  41. double bok;
  42. };
  43.  
  44. class Kolo : public Figura
  45. {
  46. public:
  47. char * podajNazwe() { return "Kolo"; }
  48.  
  49. Kolo( double r ) : promien( 0 )
  50. {
  51. ustawPromien( r );
  52. }
  53.  
  54. Kolo() : promien( 0 )
  55. {
  56. }
  57.  
  58. void ustawPromien( double promien )
  59. {
  60. if( promien >= 0 )
  61. Kolo::promien = promien;
  62. }
  63.  
  64. double pobierzPromien()
  65. {
  66. return promien;
  67. }
  68.  
  69. double obliczPole()
  70. {
  71. return M_PI * promien * promien;
  72. }
  73.  
  74. private:
  75. double promien;
  76. };
  77.  
  78. class FabrykaFigur
  79. {
  80. public:
  81. virtual Figura * utworzFigure( int nrFigury )
  82. {
  83. switch( nrFigury )
  84. {
  85. case 1 : return new Kwadrat;
  86. case 2 : return new Kolo;
  87. default : return 0;
  88. }
  89. }
  90. };
  91.  
  92. class GlupiaFabrykaFigur : public FabrykaFigur
  93. {
  94. public:
  95. Figura * utworzFigure( int nrFigury )
  96. {
  97. return 0;
  98. }
  99. };
  100. class FiguryWejscie
  101. {
  102. public:
  103. void czytajParametryFigury( Figura * figura )
  104. {
  105. if( stricmp( figura->podajNazwe(), "Kwadrat" ) == 0 )
  106. {
  107. double bok;
  108. cout << "\nPodaj bok: ";
  109. cin >> bok;
  110. ( ( Kwadrat * )figura )->ustawBok( bok );
  111. }
  112. if( stricmp( figura->podajNazwe(), "Kolo" ) == 0 )
  113. {
  114. double r;
  115. cout << "\nPodaj promien: ";
  116. cin >> r;
  117. ( ( Kolo * )figura )->ustawPromien( r );
  118. }
  119. }
  120. };
  121.  
  122. class KalkulatorPolFigur
  123. {
  124. public:
  125. int menu()
  126. {
  127. cout << "\nWybierz:\n1. Kwadrat\n2. Kolo\n0. Koniec\n>> ";
  128. int n;
  129. cin >> n;
  130. return n;
  131. }
  132.  
  133. void wykonajObliczeniaDlaFigury( Figura * figura )
  134. {
  135. cout << endl << "Figura " << figura->podajNazwe();
  136. cout << ", jej pole: " << figura->obliczPole();
  137. }
  138.  
  139.  
  140. void obliczPola( FabrykaFigur * fabryka, FiguryWejscie * wejscie )
  141. {
  142. int nrFigury;
  143. Figura * figura = 0;
  144.  
  145. do
  146. {
  147. nrFigury = menu();
  148.  
  149. figura = fabryka->utworzFigure( nrFigury );
  150. if( figura != 0 )
  151. {
  152. wejscie->czytajParametryFigury( figura );
  153. wykonajObliczeniaDlaFigury( figura );
  154. delete figura;
  155. }
  156. }
  157. while( nrFigury != 0 );
  158. }
  159. };
  160.  
  161. // https://pastebin.com/7Aari8MW
  162.  
  163. int main()
  164. {
  165. KalkulatorPolFigur kalkulator;
  166.  
  167. kalkulator.obliczPola( new FabrykaFigur, new FiguryWejscie );
  168.  
  169. /*
  170. int nrFigury;
  171. Figura * p = 0;
  172. cout << "Wybierz figure:\n1. Kwadrat\n2. Kolo\n>> ";
  173. cin >> nrFigury;
  174. switch( nrFigury )
  175. {
  176. case 1: double bok;
  177. cout << "Podaj bok: ";
  178. cin >> bok;
  179. p = new Kwadrat( bok );
  180. break;
  181. case 2: double r;
  182. cout << "Podaj promien: ";
  183. cin >> r;
  184. p = new Kolo( r );
  185. break;
  186. }
  187. cout << endl << "Figura " << p->podajNazwe();
  188. cout << ", jej pole: " << p->obliczPole();
  189.  
  190. delete p;
  191. */
  192.  
  193. return EXIT_SUCCESS;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement