Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Example program
- #include <iostream>
- using namespace std;
- struct Interval{
- double stanga, dreapta; //extremele intervalului
- };
- int max(int a,int b)
- {
- if(a>b) return a;
- else return b;
- }
- int min(int a,int b)
- {
- if(a<b)
- return a;
- else return b;
- }
- Interval citesteInterval()
- {
- // declaram un interval, si ii citim valorile
- Interval interval;
- cout<<"Stanga: ";
- cin>>interval.stanga;
- cout<<"Dreapta: ";
- cin>>interval.dreapta;
- return interval;
- }
- Interval reuniuneIntervale(Interval interval1,Interval interval2)
- {
- // calculam reuniunea intervalelor din parametrii
- // mai intai sortam intervalele corect, sa fie primul ala mai din stanga
- if(interval1.stanga>interval2.stanga)
- {
- // hopa, intervalul1 incepe dupa intervalul2, sa le interschimbam
- Interval aux=interval1;
- interval1=interval2;
- interval2=aux;
- }
- // mai intai initializam un interval cu 0 si 0
- Interval interval;
- interval.stanga=0;
- interval.dreapta=0;
- // verificam daca nu cumva inceputul intervalului 2, e mai mare decat sfarsitul primului interval (intervalele nu se intalnesc)
- if(interval2.stanga>interval1.dreapta)
- {
- // returnam intervalul cu 0 0
- return interval;
- }
- // daca am ajuns aici inseamna ca intervalele se intersecteaza, returnam reuniunea, adica stanga primului si dreapta intervalului 2
- interval.stanga=interval1.stanga;
- interval.dreapta=interval2.dreapta;
- return interval;
- }
- Interval intersectieIntervale(Interval interval1,Interval interval2)
- {
- // calculam intersectia intervalelor din parametrii
- // mai intai sortam intervalele corect, sa fie primul ala mai din stanga
- if(interval1.stanga>interval2.stanga)
- {
- // hopa, intervalul1 incepe dupa intervalul2, sa le interschimbam
- Interval aux=interval1;
- interval1=interval2;
- interval2=aux;
- }
- // mai intai initializam un interval cu 0 si 0
- Interval interval;
- interval.stanga=0;
- interval.dreapta=0;
- // verificam daca nu cumva inceputul intervalului 2, e mai mare decat sfarsitul primului interval (intervalele nu se intalnesc)
- if(interval2.stanga>interval1.dreapta)
- {
- // returnam intervalul cu 0 0
- return interval;
- }
- // daca am ajuns aici inseamna ca intervalele se intersecteaza, returnam intersectia, adica [max(interval1.stanga,interval2.dreapta),min(interval1.dreapta,interval2.dreapta)]
- interval.stanga=max(interval1.stanga,interval2.stanga);
- interval.dreapta=min(interval1.dreapta,interval2.dreapta);
- return interval;
- }
- bool valoareInInterval(int valoare,Interval interval)
- {
- // aceasta metoda verifica daca in intervalul din parametru se afla valoarea din parametru, si returneaza adevarat sau fals
- 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
- }
- int lungimeInterval(Interval interval)
- {
- // lungimea unui interval e de fapt dreapta - stanga
- return interval.dreapta-interval.stanga;
- }
- void afisareInterval(Interval interval)
- {
- // afiseaza intervalul din parametru
- cout<<"["<<interval.stanga<<","<<interval.dreapta<<"]";
- }
- int main()
- {
- int nrIntervale;
- cout<<"Numar de intervale: ";
- cin>>nrIntervale;
- Interval intervale[nrIntervale];
- for(int i=0;i<nrIntervale;i++)
- {
- // citim cele <nrIntervale> intervale
- intervale[i]=citesteInterval();
- }
- // afisam intervalele
- for(int i=0;i<nrIntervale;i++)
- {
- afisareInterval(intervale[i]);
- cout<<endl;
- }
- Interval I,R;
- // intervalul I e intersectia intervalelor, R e reuniunea
- I=intervale[0];
- R=intervale[0];
- // punem primul interval ca raspuns temporar a solutiei, si vom calcula cu restul elementelor intervalele cerute
- for(int i=1; i<nrIntervale;i++)
- {
- // dupa cum vezi, incep de la 1, nu de la 0
- I=intersectieIntervale(I,intervale[i]);
- R=reuniuneIntervale(R,intervale[i]);
- }
- cout<<endl<<"Intersectia intervalelor: ";
- afisareInterval(I);
- cout<<endl<<"Reuniunea intervalelor: ";
- afisareInterval(R);
- int numar;
- cout<<"Numar (verificam daca nr asta e in intervale) ";
- cin>>numar;
- // acum vom vedea in care interval apare, din cele citite acest numar
- for(int i=0; i<nrIntervale; i++)
- {
- if(valoareInInterval(numar,intervale[i]))
- {
- cout<<endl<<"Apare in intervalul: ";
- afisareInterval(intervale[i]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement