Advertisement
adwas33

Untitled

Jun 16th, 2021
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. class Punkt;
  8. class Okrag;
  9. class Prostokat;
  10.  
  11.  
  12.  
  13.  
  14. class Punkt{
  15. friend void wypisz (Punkt pkt);
  16. public:
  17. void wypisz()
  18. {
  19. cout<<"("<<x<<","<<y<<")";
  20. }
  21. Punkt(int x, int y) : x(x), y(y) {}
  22.  
  23. friend ostream &operator<<(ostream &os, const Punkt &punkt) {
  24. os << "(" << punkt.x << " , " << punkt.y<<")";
  25. return os;
  26. }
  27.  
  28. int getX() const {
  29. return x;
  30. }
  31.  
  32. int getY() const {
  33. return y;
  34. }
  35.  
  36. private:
  37. friend Prostokat;
  38. friend Okrag;
  39. int x,y;
  40.  
  41. };
  42. class Prostokat
  43. {
  44. friend void wypisz (Prostokat prostokat);
  45. public:
  46. void wypisz()
  47. {
  48. cout<<"Jest to prostokat o punkcie "<<lewy_dolny<<" a dlugosci "<<szerokosc<<" i wysokosci "<<wysokosc<<endl;
  49. }
  50. Prostokat(const Punkt &lewyDolny, int szerokosc, int wysokosc) : lewy_dolny(lewyDolny), wysokosc(wysokosc),
  51. szerokosc(szerokosc) {}
  52. void czy_wspolne(Punkt * tablica_punktow,int ilosc)
  53. {
  54.  
  55. bool czy_jest=true;
  56. int delta_X= lewy_dolny.x +szerokosc;
  57. int delta_Y=lewy_dolny.y +wysokosc;
  58. for(int i = 0;i<ilosc;i++)
  59. {
  60.  
  61.  
  62. if((delta_X-tablica_punktow[i].x>=0)&&tablica_punktow[i].x>=lewy_dolny.x)
  63. {
  64. czy_jest=true;
  65. }else
  66. {
  67. cout<<"warunek pierwszy X "<<endl;
  68. czy_jest=false;
  69. }
  70. if(czy_jest)
  71. {
  72. if(delta_Y-tablica_punktow[i].y>=0&&tablica_punktow[i].y>=lewy_dolny.y)
  73. {
  74. czy_jest=true;
  75. } else
  76. {
  77. cout<<"warunek Y "<<endl;
  78. czy_jest=false;
  79. }
  80. }
  81.  
  82.  
  83.  
  84. if(czy_jest)
  85. {
  86. cout<<"Punkt "<<tablica_punktow[i]<<" nalezy do tego prostakota"<<endl;
  87. }
  88.  
  89. }
  90. }
  91. private:
  92. Punkt lewy_dolny;
  93. int wysokosc,szerokosc;
  94. public:
  95.  
  96. };
  97. class Okrag{
  98. public:
  99. friend void wypisz (Okrag o);
  100. void wypisz()
  101. {
  102. cout<<"Okrag o srodku ";srodek.wypisz();cout<<" o promieniu "<<promien;
  103. }
  104. Okrag(const Punkt &srodek, int promien) : srodek(srodek), promien(promien) {}
  105.  
  106. Okrag() {
  107. int x = rand()%16-5;
  108. int y = rand() %16 -10;
  109. int dlugosc_promienia = rand()%15+1;
  110. Punkt punkt(x,y);
  111. srodek=punkt;
  112. promien=dlugosc_promienia;
  113. }
  114.  
  115. friend ostream &operator<<(ostream &os, const Okrag &okrag) {
  116. os << "srodek: " << okrag.srodek << " promien: " << okrag.promien;
  117. return os;
  118. }
  119.  
  120. void setSrodek( Punkt srodek) {
  121. Okrag::srodek = srodek;
  122. }
  123.  
  124. void setPromien(int promien) {
  125. Okrag::promien = promien;
  126. }
  127.  
  128. const Punkt &getSrodek() const {
  129. return srodek;
  130. }
  131.  
  132. int getPromien() const {
  133. return promien;
  134. }
  135.  
  136. private:
  137. Punkt srodek=Punkt(0,0);
  138. int promien;
  139. };
  140.  
  141. int ile_sie_przecina(Okrag* pierwsza_tablica,int licznik1,Okrag *druga_tablica,int licznik2)
  142. {
  143. long long ile_przejsc=0;
  144. int przeciecia=0;
  145. for(int i=0;i<licznik1;i++ )
  146. {
  147. for(int j=0;j<licznik2;j++) {
  148. ile_przejsc++;
  149.  
  150. long double wart_bezwzgledna= abs(pierwsza_tablica[i].getPromien()-druga_tablica[j].getPromien());
  151. long double odlegloscX = pow(druga_tablica[j].getSrodek().getX()- pierwsza_tablica[i].getSrodek().getX(),2) ;//x^2
  152. long double odlegloscY = pow(druga_tablica[j].getSrodek().getY()- pierwsza_tablica[i].getSrodek().getY() ,2) ;//y^2
  153. long double odleglosc_miedzy_srodkami = sqrt(odlegloscX+odlegloscY);// sqrt(x^2 + y^2)
  154. long double suma_promieni= pierwsza_tablica[i].getPromien() + druga_tablica[j].getPromien();
  155. if(wart_bezwzgledna<=odleglosc_miedzy_srodkami&&odleglosc_miedzy_srodkami<=suma_promieni)// zewnętrznie styczne
  156. {
  157. przeciecia++;
  158. continue;
  159. }
  160. }
  161.  
  162. }
  163. cout<<"Wypisze ilosc porownan "<<ile_przejsc<<endl;
  164. return przeciecia;
  165. }
  166.  
  167. void wypisz (Okrag o)
  168. {
  169. o.wypisz();
  170. }
  171. void wypisz (Punkt pkt)
  172. {
  173. pkt.wypisz();
  174. }
  175. void wypisz (Prostokat prostokat)
  176. {
  177. prostokat.wypisz();
  178. }
  179. int main() {
  180. srand(time(0));
  181. Punkt tablica[3]= {Punkt (5,2),Punkt (-9,-9),Punkt (2,3)};
  182.  
  183. Prostokat prostokat({-8,-6},13,10);
  184. prostokat.czy_wspolne(tablica,3);
  185. Okrag tablica_statyczna[100];// konstruktor domyślny
  186. for(int i =0;i<100;i++)
  187. {
  188. int x = rand()%6;
  189. int y = rand() %6 -5;
  190. int dlugosc_promienia = rand()%10+1;
  191. tablica_statyczna[i]=Okrag({x,y},dlugosc_promienia);// konstruktor domyślny -> konstruktor z parametrami
  192. }
  193.  
  194. Okrag * tablica_dynamiczna=new Okrag [50];
  195. for(int i =0;i<100;i++)
  196. {
  197. // int x = rand()%16-5;
  198. // int y = rand() %16 -10;
  199. // int dlugosc_promienia = rand()%15+1;
  200. // tablica_dynamiczna[i].setPromien(dlugosc_promienia);
  201. // tablica_dynamiczna[i].setSrodek({x,y});// to nie działa
  202.  
  203. }
  204. // for(auto kazdy:tablica_statyczna)
  205. // {
  206. // cout<<kazdy<<endl;// testowe wypisanie
  207. // }
  208. // cout<<endl;
  209. // for(int i =0;i<50;i++)
  210. // {
  211. // cout<<tablica_dynamiczna[i]<<endl;
  212. // }
  213. cout<<ile_sie_przecina(tablica_statyczna,100,tablica_dynamiczna,50);
  214. cout<<endl;
  215.  
  216. wypisz(prostokat);
  217. cout<<endl;
  218. wypisz(tablica[0]);
  219. cout<<endl;
  220. wypisz(tablica_statyczna[0]);
  221. cout<<endl;
  222. return 0;
  223. }
  224.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement