# PBinfo #2552 – Poz – Rezolvare C++

Sursa: Codul lui Andrei
Limbaj: C++
Autor rezolvare: andrei

## Enunț

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 imaginea de mai jos sunt afișate coordonatele unui punct în sistemul cartezian folosit:



Î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

Restricții și precizări

specificațiile unui dreptunghi sunt numere naturale cu cel mult 4 cifre fiecare
soluția va conține funcția cerută. Prezența în soluție a altor instrucțiuni poate duce la erori de compilare și depunctarea soluției

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

În animația de mai jos puteți modifica valorile ce caracterizează dreptunghiurile apăsând pe caseta gri corespunzătoare, rămânând cu mouse-ul în casetă cât timp scrieți, iar apoi puteți muta mouse-ul din casetă sau să apăsați ENTER sau să apăsați SPACE pentru a termina.

## Cod sursă C++

```cpp
int poz(int x1, int y1, int l1, int i1, int x2, int y2, int l2, int i2) {
    int rez = -1;
    if (x1 > x2 && y1 > y2 && y1 + i1 < y2 + i2 && x1 + l1 < x2 + l2) rez = 0;
    else if (x1 < x2 && y1 < y2 && y1 + i1 > y2 + i2 && x1 + l1 > x2 + l2) rez = 0;
    else if (x1 == x2 && y1 == y2 && i1 == i2 && l1 == l2) rez = 1;
    else if (y2 + i2 < y1) rez = 2;
    else if (y1 + i1 < y2) rez = 2;
    else if (x1 + l1 < x2) rez = 2;
    else if (x2 + l2 < x1) rez = 2;
    else rez = 3;
    return rez;
}
```

## Resurse

- [Pagina originală](https://codulluiandrei.ro/rezolvari/pbinfo/2552)
- [Sursa C++](https://codulluiandrei.ro/rezolvari/pbinfo/2552/cod.cpp)
- [Sursa pe GitHub](https://raw.githubusercontent.com/codulluiandrei/pbinfo/main/pbinfo-2552/main.cpp)
- [Cursuri de informatică pentru BAC](https://codulluiandrei.ro/academia/info-curs/pachet-cpp/)
