366
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ă0poz(100, 100, 100, 200, 100, 100, 100, 200)returnează1poz(50, 50, 100, 50, 200, 100, 100, 130)returnează2poz(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;
}
Comentarii