👤

#2552 de pe pbinfo

Considerăm un sistemul cartezian de coordonate xOy astfel:

colțul stânga-sus are coordonata (0, 0)
axa Ox începe din stânga și continuă crescător spre dreapta
axa Oy începe de sus și continuă crescător în jos

În acest sistem de coordonate, un dreptunghi cu laturile paralele cu axele poate fi descris prin patru numere, reprezentând:

x – coordonata X a punctului din stânga – sus
y – coordonata Y a punctului din stânga – sus
l – lățimea dreptunghiului
i – înălțimea dreptunghiului,
Cerința
Să se scrie definiția funcției C++ poz care, primind 8 argumente, x1, y1, l1, i1, x2, y2, l2, i2 , în această ordine:

x1, y1, l1, i1 – reprezentând primul dreptunghi,
x2, y2, l2, i2 – reprezentând cel de-al doilea dreptunghi,
returnează:

0, dacă primul dreptunghi este în interiorul celuilalt sau invers
1, dacă cele două dreptunghiuri sunt identice
2, dacă cele două dreptunghiuri nu au nici un punct comun
3, dacă cele două dreptunghiuri se suprapun doar parțial
Exemple
poz(100, 100, 300, 200, 150, 150, 100, 130) returnează 0
poz(100, 100, 100, 200, 100, 100, 100, 200) returnează 1
poz(50, 50, 100, 50, 200, 100, 100, 130) returnează 2
poz(50, 50, 100, 50, 30, 40, 100, 130) returnează 3


Răspuns :

int poz(int x1, int y1, int l1, int i1, int x2, int y2, int l2, int i2)

{

   int r;

   if (x1==x2 && y1==y2 && l1==l2 && i1==i2) r=1;

   else

   {

      if (x1+l1<x2 || y1+i1<y2 || x2+l2<x1 || y2+i2<y1 ) r=2;

      else

      {

         if ((x1<x2 && y1<y2 && x1+l1>x2+l2 && y1+i1>y2+i2) || (x2<x1 && y2<y1 && x2+l2>x1+l1 && y2+i2>y1+i1)) r=0;

         else

          r=3;

      }

   }

   return r;

}