Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник - C (СИ)
Формулировка задачи:
Определить структуру, описывает прямоугольник со сторонами, параллельными осям координат (прямоугольник задается двумя точками - левою нижней и правой верхней). Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник - область пересечения двух прямоугольников. Если пересечения нет, - возвращается NULL. никак не магу разобраться,помогите пожалуйста
Решение задачи: «Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int x1;
int y1;
int x2;
int y2;
}rect;
int maxr(int a, int b)
{
return a >= b ? a : b;
}
int minr(int a, int b)
{
return a <= b ? a : b;
}
rect* func(rect *a, rect *b)
{
rect *c = (rect *)malloc(sizeof(rect));
c->x1 = maxr(b->x1, a->x1); //x1
c->y1 = maxr(b->y1, a->y1); //y1
c->x2 = minr(a->x2, b->x2); //x2
c->y2 = minr(a->y2, b->y2); //y2
if (c->x1 >= c->x2 || c->y1 >= c->y2) return NULL;
return c;
}
int main()
{
rect a, b;
rect *c;
printf("a.x1=");
scanf("%d", &a.x1);
printf("a.y1=");
scanf("%d", &a.y1);
printf("a.x2=");
scanf("%d", &a.x2);
printf("a.y2=");
scanf("%d", &a.y2);
printf("b.x1=");
scanf("%d", &b.x1);
printf("b.y1=");
scanf("%d", &b.y1);
printf("b.x2=");
scanf("%d", &b.x2);
printf("b.y2=");
scanf("%d", &b.y2);
c = func(&a, &b);
if (c != NULL)
printf("x1=%d y1=%d\nx2=%d y2=%d\n", c->x1, c->y1, c->x2, c->y2);
else puts("NULL");
free(c);
return 0;
}
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h
- Определяется структура rect, которая содержит поля для хранения координат прямоугольника
- Определяются функции maxr и minr, которые возвращают максимальное и минимальное значение из двух соответственно
- Определяется функция func, которая принимает два указателя на структуры rect и возвращает указатель на новую структуру rect, которая содержит минимальные и максимальные значения координат из двух прямоугольников
- В функции main, с помощью scanf, пользователю предлагается ввести координаты двух прямоугольников
- Вызывается функция func, передавая ей указатели на структуры rect, заполненные пользователем
- Если функция func вернула не NULL, то выводятся координаты нового прямоугольника на экран
- Вызов функции free освобождает память, выделенную под новый прямоугольник
- Программа завершается возвратом 0 из функции main, что означает успешное выполнение