Advertisement
Guest User

Untitled

a guest
Feb 8th, 2016
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.50 KB | None | 0 0
  1. // Example program
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Interval{
  6. double stanga, dreapta; //extremele intervalului
  7. };
  8.  
  9. int max(int a,int b)
  10. {
  11. if(a>b) return a;
  12. else return b;
  13. }
  14. int min(int a,int b)
  15. {
  16. if(a<b)
  17. return a;
  18. else return b;
  19. }
  20. Interval citesteInterval()
  21. {
  22. // declaram un interval, si ii citim valorile
  23. Interval interval;
  24. cout<<"Stanga: ";
  25. cin>>interval.stanga;
  26. cout<<"Dreapta: ";
  27. cin>>interval.dreapta;
  28. return interval;
  29. }
  30. Interval reuniuneIntervale(Interval interval1,Interval interval2)
  31. {
  32. // calculam reuniunea intervalelor din parametrii
  33. // mai intai sortam intervalele corect, sa fie primul ala mai din stanga
  34. if(interval1.stanga>interval2.stanga)
  35. {
  36. // hopa, intervalul1 incepe dupa intervalul2, sa le interschimbam
  37. Interval aux=interval1;
  38. interval1=interval2;
  39. interval2=aux;
  40. }
  41. // mai intai initializam un interval cu 0 si 0
  42. Interval interval;
  43. interval.stanga=0;
  44. interval.dreapta=0;
  45.  
  46. // verificam daca nu cumva inceputul intervalului 2, e mai mare decat sfarsitul primului interval (intervalele nu se intalnesc)
  47. if(interval2.stanga>interval1.dreapta)
  48. {
  49. // returnam intervalul cu 0 0
  50. return interval;
  51. }
  52. // daca am ajuns aici inseamna ca intervalele se intersecteaza, returnam reuniunea, adica stanga primului si dreapta intervalului 2
  53. interval.stanga=interval1.stanga;
  54. interval.dreapta=interval2.dreapta;
  55. return interval;
  56. }
  57. Interval intersectieIntervale(Interval interval1,Interval interval2)
  58. {
  59. // calculam intersectia intervalelor din parametrii
  60. // mai intai sortam intervalele corect, sa fie primul ala mai din stanga
  61. if(interval1.stanga>interval2.stanga)
  62. {
  63. // hopa, intervalul1 incepe dupa intervalul2, sa le interschimbam
  64. Interval aux=interval1;
  65. interval1=interval2;
  66. interval2=aux;
  67. }
  68. // mai intai initializam un interval cu 0 si 0
  69. Interval interval;
  70. interval.stanga=0;
  71. interval.dreapta=0;
  72.  
  73. // verificam daca nu cumva inceputul intervalului 2, e mai mare decat sfarsitul primului interval (intervalele nu se intalnesc)
  74. if(interval2.stanga>interval1.dreapta)
  75. {
  76. // returnam intervalul cu 0 0
  77. return interval;
  78. }
  79. // daca am ajuns aici inseamna ca intervalele se intersecteaza, returnam intersectia, adica [max(interval1.stanga,interval2.dreapta),min(interval1.dreapta,interval2.dreapta)]
  80. interval.stanga=max(interval1.stanga,interval2.stanga);
  81. interval.dreapta=min(interval1.dreapta,interval2.dreapta);
  82. return interval;
  83. }
  84. bool valoareInInterval(int valoare,Interval interval)
  85. {
  86. // aceasta metoda verifica daca in intervalul din parametru se afla valoarea din parametru, si returneaza adevarat sau fals
  87. return valoare>=interval.stanga && valoare<=interval.dreapta; // daca valoarea e mai mare ca partea din stanga, si mai mica ca cea din dreapta, e in interval
  88. }
  89. int lungimeInterval(Interval interval)
  90. {
  91. // lungimea unui interval e de fapt dreapta - stanga
  92. return interval.dreapta-interval.stanga;
  93. }
  94. void afisareInterval(Interval interval)
  95. {
  96. // afiseaza intervalul din parametru
  97. cout<<"["<<interval.stanga<<","<<interval.dreapta<<"]";
  98. }
  99.  
  100. int main()
  101. {
  102. int nrIntervale;
  103. cout<<"Numar de intervale: ";
  104. cin>>nrIntervale;
  105. Interval intervale[nrIntervale];
  106. for(int i=0;i<nrIntervale;i++)
  107. {
  108. // citim cele <nrIntervale> intervale
  109. intervale[i]=citesteInterval();
  110. }
  111. // afisam intervalele
  112. for(int i=0;i<nrIntervale;i++)
  113. {
  114. afisareInterval(intervale[i]);
  115. cout<<endl;
  116. }
  117. Interval I,R;
  118. // intervalul I e intersectia intervalelor, R e reuniunea
  119. I=intervale[0];
  120. R=intervale[0];
  121. // punem primul interval ca raspuns temporar a solutiei, si vom calcula cu restul elementelor intervalele cerute
  122. for(int i=1; i<nrIntervale;i++)
  123. {
  124. // dupa cum vezi, incep de la 1, nu de la 0
  125. I=intersectieIntervale(I,intervale[i]);
  126. R=reuniuneIntervale(R,intervale[i]);
  127. }
  128. cout<<endl<<"Intersectia intervalelor: ";
  129. afisareInterval(I);
  130. cout<<endl<<"Reuniunea intervalelor: ";
  131. afisareInterval(R);
  132.  
  133. int numar;
  134. cout<<"Numar (verificam daca nr asta e in intervale) ";
  135. cin>>numar;
  136. // acum vom vedea in care interval apare, din cele citite acest numar
  137. for(int i=0; i<nrIntervale; i++)
  138. {
  139. if(valoareInInterval(numar,intervale[i]))
  140. {
  141. cout<<endl<<"Apare in intervalul: ";
  142. afisareInterval(intervale[i]);
  143. }
  144. }
  145. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement