Rezolvare completă PbInfo #2552 Poz

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.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Poz :

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; // a in interiorul lui b
    else if(x1<x2 && y1<y2 && y1+i1>y2+i2 && x1+l1>x2+l2) rez = 0; // b in interiorul lui a
    else if(x1==x2 && y1==y2 && i1==i2 && l1==l2) rez = 1;         // egale
    // verificam daca b e sus, jos, stanga, dreapta fata de a si nu se suprapun deloc
    else if(y2+i2<y1) rez = 2;  // sus
    else if(y1+i1<y2) rez = 2;  // jos
    else if(x1+l1<x2) rez = 2;  // stanga
    else if(x2+l2<x1) rez = 2;  // dreapta
    // altfel, sunt diferite
    else rez = 3;
    return rez;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #2552 Poz

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2552 Poz de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!