Как сделать эту программу на C? Часть 3.2-3.9

Являются ли множественные условия, как в случае нескольких операторов if else, необходимыми для правильной печати прямоугольников пересечения?

Шаг 3: Два прямоугольника пересекаются, если они имеют общую область Два прямоугольника не перекрываются, если они просто касаются (общего края или общего угла)

Два прямоугольника пересекаются (как указано выше) тогда и только тогда, когда

i) max(xmin1, xmin2)

ii) max (ymin1, ymin2)

Ваш вывод должен быть отформатирован. Как показано ниже, где прямоугольник показан в виде его нижних левых координат (xmin, ymin) и верхних правых угловых координат (xmax, ymax). Где координаты - это координаты в декартовой плоскости.

Образец вывода:

enter two rectangles: 

1 1 4 4

2 2 5 5

rectangle 1: (1,1)(4,4) 

rectangle 2: (2,2)(5,5) 

intersection rectangle: (2,2)(4,4)  

а также

enter two rectangles: 

1 1 4 4

5 5 10 10

rectangle 1: (1,1)(4,4) 

rectangle 2: (5,5)(10,10) 

these two rectangles do not intersect 

Код:

#include <stdio.h>
#include <stdlib.h>

int readRect (int *w, int *x, int *y, int *z){
return scanf("%d%d%d%d",w,x,y,z);
}

int minInt(int x1, int x2){
return x1, x2;
}

int maxInt(int y1, int y2){
    return y1, y2;
}

int main (void){

int a,b,c,d,e,f,g,h;
printf(">>enter two rectangles:\n");

readRect(&a,&b,&c,&d);
readRect(&e,&f,&g,&h);
printf("rectangle 1:(%d,%d)(%d,%d)\n",a,b,c,d);
printf("rectangle 2:(%d,%d)(%d,%d)\n",e,f,g,h);

if(maxInt(a,e) < minInt(c,g) && maxInt(b,f) < minInt(d,g)){
        printf("intersection rectangle: (%d,%d)(%d,%d)\n",?,?,?,?);
}
else {
         printf("these rectangles do not intersect\n");
}

return EXIT_SUCCESS;
}

3 ответа

Решение

Ваша функция для max а также min неправильно.
1. вы не сравниваете параметр, переданный внутри этих функций, максимум / минимум два.
2. Вы не можете вернуть два значения из функции.

Вы должны сделать так;

int minInt(int x1, int x2){
    if(x1 < x2)     
        return x1;
    else 
        return x2;
}

int maxInt(int x1, int x2){
    if(x1 > x2)     
        return x1;
    else 
        return x2;
} 

И поменяй свой printf печать прямоугольника пересечения в

printf("intersection rectangle: (%d,%d)(%d,%d)\n", maxInt(a,e), maxInt(b,f), minInt(c,g), minInt(d,h) );

Шаг 1 - виновник "\n" в scanf. Если вы удалите его, это сработает. Дайте мне знать, если вам нужна какая-то конкретная помощь на шаге 2 или шаге 3.

Первым делом:

return scanf("%d%d%d%d\n",w,x,y,z);

должно быть

return scanf("%d %d %d %d",w,x,y,z);

Затем вы можете ввести свой список номеров в виде списка, разделенного пробелами, и он будет сканировать их правильно.

Другие части вашего вопроса, вам придется попытаться решить самостоятельно, сделать вашу проблему более конкретной, и поднять как новые вопросы.

Другие вопросы по тегам