Witam, mam za zadanie określić pole powierzchni części wspólnej dwóch prostokątów.

Napisałem taki oto kod w C++:

#include < iostream >

#include < cstdlib >

#include < algorithm >

using namespace std;


int main()

{


int x1[2], x2[2], y1[2], y2[2], x[4], y[4], a, b;


cin >> x1[0] >> y1[0] >> x1[1] >> y1[1];


cin >> x2[0] >> y2[0] >> x2[1] >> y2[1];


x[0] = min(x1[0], x1[1]);


x[1] = max(x1[0], x1[1]);


x[2] = min(x2[0], x2[1]);


x[3] = max(x2[0], x2[1]);




if (x[2] >= x[0] && x[2] < x[1] && x[3] >= x[1]) a = x[1] - x[2];


else if (x[3] <= x[1] && x[3] > x[0] && x[2] <= x[0]) a = x[3] - x[0];


else if (x[2] > x[0] && x[3] < x[1]) a = x[3] - x[2];


else

a = x[1] - x[0];


y[0] = min(y1[0], y1[1]);


y[1] = max(y1[0], y1[1]);


y[2] = min(y2[0], y2[1]);


y[3] = max(y2[0], y2[1]);


if (y[2] >= y[0] && y[2] < y[1] && y[3] >= y[1]) b = y[1] - y[2];


else if (y[3] <= y[1] && y[3] > y[0] && y[2] <= y[0]) b = y[3] - y[0];


else if (y[2] > y[0] && y[3] < y[1]) b = y[3] - y[2];


else

b = y[1] - y[0];


cout << a*b;


}

Lecz dla danych wejściowych 2 9 9 5

4 4 6 2, kiedy wynikiem powinno byc 0, to mi wyskakuje 8.

Co możnaby poprawić w tym kodzie? Z góry dziękuję za pomoc.


Odpowiedź :

Załączyłam moją propozycje takiego programu. :)

  • Skrajne współrzędne pierwszego prostokąta to  (x1, y1) dolny lewy,  (x2, y2) górny prawy wierzchołek.
  • Skrajne współrzędne drugiego prostokąta to  (x3, y3) dolny lewy,  (x4, y4) górny prawy wierzchołek.

Odpowiedź:

"Co można by poprawić w tym kodzie?"

  • nie ma komentarzy, nawet nie wiadomo jakie są dane wejściowe
  • nazwy zmiennych są nic nie znaczące
  • deklarujesz tablice, ale nigdzie nie korzystasz z tego, że zmienne są tablicami, zapewne więc byłoby lepiej bez tablic, za to z coś znaczącymi nazwami zmiennych?
  • biblioteki <algorithm> oraz <cstdlib> są nieużywane, a więc jako zbędne powinny zostać usunięte

Wyjaśnienie

Zobacz dlaczego program nie działa dla prostego przypadku

  1. prostokąt o skrajnych wierzchołkach (0, 0) oraz (1, 1)
  2. prostokąt o skrajnych wierzchołkach (1, 1) oraz (2, 2)

PS

Zawsze możesz załączyć kod źródłowy jak plik .txt

Zobacz obrazek 0AB