Почему функции max, min и canocalise не работают в c? - PullRequest
0 голосов
/ 06 марта 2019

Я пишу c программу для вычисления пересечения прямоугольника, но я не могу получить ожидаемый результат. Функции canocalise, max и min не работают. Пожалуйста, помогите мне.

#include <stdio.h>

#include <stdlib.h>

//I've provided "min" and "max" functions in

//case they are useful to you

int min (int a, int b) {

if (a < b) {

      return a;

}

return b;

}

int max (int a, int b) {

     if (a > b) {

     return a;

}

return b;

}

//Declare your rectangle structure here!

typedef struct re{

int x,y,width,height;

}rectangle;

rectangle canonicalize(rectangle r) {

//WRITE THIS FUNCTION

if(r.width<0)

{

     r.width=-r.width;

     r.x=r.x-r.width;

}

else if(r.height<0)

{

    r.height=-r.height;

    r.y=r.y-r.height;

 }

 return r;

 }

 rectangle intersection(rectangle r1, rectangle r2) {

//WRITE THIS FUNCTION

 r1.x=max(r1.x,r2.x);

 r1.y=max(r1.y,r2.y);

 r1.width=min(r1.width,r2.width);

 r1.height=min(r1.height,r2.height);

 if(r1.x>r1.width || r1.y>r1.height)

      {

       }

 return r1;

 }

 //You should not need to modify any code below this line

 void printRectangle(rectangle r) {

 r = canonicalize(r);

 if (r.width == 0 && r.height == 0) {

 printf("<empty>\n");

 }

 else {

 printf("(%d,%d) to (%d,%d)\n", r.x,r.y,r.x + r.width,r.y + r.height);

 }

 }

  int main (void) {

  rectangle r1;

  rectangle r2;

  rectangle r3;

  rectangle r4;

  r1.x = 2;

  r1.y = 3;

  r1.width = 5;

  r1.height = 6;

  printf("r1 is ");

  printRectangle(r1);

  r2.x = 4;

  r2.y = 5;

  r2.width = -5;

  r2.height = -7;

  printf("r2 is ");

  printRectangle(r2);

  r3.x = -2;

  r3.y = 7;

  r3.width = 7;

  r3.height = -10;

  printf("r3 is ");

  printRectangle(r3);

  r4.x = 0;

  r4.y = 7;

  r4.width = -4;

  r4.height = 2;

  printf("r4 is ");

  printRectangle(r4);

  //test everything with r1

  rectangle i = intersection(r1,r1);

  printf("intersection(r1,r1): ");

  printRectangle(i);

  i = intersection(r1,r2);

  printf("intersection(r1,r2): ");

  printRectangle(i);

  i = intersection(r1,r3);

  printf("intersection(r1,r3): ");

  printRectangle(i);

  i = intersection(r1,r4);

  printf("intersection(r1,r4): ");

  printRectangle(i);

 //test everything with r2

 i = intersection(r2,r1);

 printf("intersection(r2,r1): ");

 printRectangle(i);

 i = intersection(r2,r2);

 printf("intersection(r2,r2): ");

 printRectangle(i);

 i = intersection(r2,r3);

 printf("intersection(r2,r3): ");

 printRectangle(i);

 i = intersection(r2,r4);

 printf("intersection(r2,r4): ");

 printRectangle(i);

 //test everything with r3

 i = intersection(r3,r1);

 printf("intersection(r3,r1): ");

 printRectangle(i);

 i = intersection(r3,r2);

 printf("intersection(r3,r2): ");

 printRectangle(i);

 i = intersection(r3,r3);

 printf("intersection(r3,r3): ");

 printRectangle(i);

 i = intersection(r3,r4);

 printf("intersection(r3,r4): ");

 printRectangle(i);

 //test everything with r4

 i = intersection(r4,r1);

 printf("intersection(r4,r1): ");

 printRectangle(i);

 i = intersection(r4,r2);

 printf("intersection(r4,r2): ");

 printRectangle(i);

 i = intersection(r4,r3);

 printf("intersection(r4,r3): ");

 printRectangle(i);

 i = intersection(r4,r4);

 printf("intersection(r4,r4): ");

 printRectangle(i);

 return EXIT_SUCCESS;

 }

Токовый выход:

r1 составляет (2,3) - (7,9)

r2 составляет (-1,5) - (4, -2)

r3 от (-2, -3) до (5,7)

r4 от (-4,7) до (0,9)

пересечение (r1, r1): (2,3) - (7,9)

пересечение (r1, r2): (-1,5) - (4, -2)

пересечение (r1, r3): (2, -3) до (7,7)

пересечение (r1, r4): (-2,7) - (2,9)

пересечение (r2, r1): (-1,5) - (4, -2)

пересечение (r2, r2): (-1,5) - (4, -2)

пересечение (r2, r3): (-1,7) - (4, -3)

пересечение (r2, r4): (-1,7) - (4,0)

пересечение (r3, r1): (2, -3) до (7,7)

пересечение (r3, r2): (-1,7) - (4, -3)

пересечение (r3, r3): (-2, -3) до (5,7)

пересечение (r3, r4): (-4,7) - (0, -3)

пересечение (r4, r1): (-2,7) - (2,9)

пересечение (r4, r2): (-1,7) - (4,0)

пересечение (r4, r3): (-4,7) - (0, -3)

пересечение (r4, r4): (-4,7) - (0,9)

Обратите внимание, что max, min и canocalise не работают.

1 Ответ

0 голосов
/ 06 марта 2019

Не уверен, что вы пытались сделать в функции пересечения, поэтому предположим, что она работает правильно для вас.

if(r.width<0)

{

     r.width=-r.width;

     r.x=r.x-r.width;

}

if(r.height<0) // to handle when height and width both are less than zero (r2)

{

    r.height=-r.height;

    r.y=r.y-r.height;

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...