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 – susy
– coordonata Y a punctului din stânga – susl
– lățimea dreptunghiuluii
– î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 invers1
, dacă cele două dreptunghiuri sunt identice2
, dacă cele două dreptunghiuri nu au nici un punct comun3
, 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.
int poz(int x1, int y1, int l1, int i1, int x2, int y2, int l2, int i2) { int rez; 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; }