Написать и протестировать функцию, которая возвращает указатель на новый прямоугольник - 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;
}

Объяснение кода листинга программы

  1. Включаются заголовочные файлы stdio.h и stdlib.h
  2. Определяется структура rect, которая содержит поля для хранения координат прямоугольника
  3. Определяются функции maxr и minr, которые возвращают максимальное и минимальное значение из двух соответственно
  4. Определяется функция func, которая принимает два указателя на структуры rect и возвращает указатель на новую структуру rect, которая содержит минимальные и максимальные значения координат из двух прямоугольников
  5. В функции main, с помощью scanf, пользователю предлагается ввести координаты двух прямоугольников
  6. Вызывается функция func, передавая ей указатели на структуры rect, заполненные пользователем
  7. Если функция func вернула не NULL, то выводятся координаты нового прямоугольника на экран
  8. Вызов функции free освобождает память, выделенную под новый прямоугольник
  9. Программа завершается возвратом 0 из функции main, что означает успешное выполнение

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.909 из 5
Похожие ответы