fbpx

Problema #2552 – Poz – Rezolvari PBInfo

de Mihai-Alexandru

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.

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

S-ar putea sa iti placa