Построить новый прямоугольник, являющийся пересечением двух исходных - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задание

: Даны два прямоугольника на плоскости, которые задаются координатами противоположных вершин. Написать функцию на языке Си, которая строит новый прямоугольник, являющийся пересечением этих двух прямоугольников, и программу для её тестирования. Программа печатает координаты вершин результирующего прямоугольника. Не прошу решать полностью, но пару подсказок не помешает:

1. Как организовать процесс ввода грамотно? 2.Насчёт противоположных вершин не до конца понял.

Заранее благодарен

Решение задачи: «Построить новый прямоугольник, являющийся пересечением двух исходных»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct  box{
        int maxx, maxy;
        int minx, miny;
};
int intersection(struct box a, struct box b, struct box *result){
    result->maxx=(a.maxx<b.maxx)?a.maxx:b.maxx;
    result->maxy=(a.maxy<b.maxy)?a.maxy:b.maxy;
    result->minx=(a.minx>b.minx)?a.minx:b.minx;
    result->miny=(a.miny>b.miny)?a.miny:b.miny;
    return ((result->maxx)>(result->minx))&&((result->maxy)>(result->miny));
}
int main()
{
    struct  box a, b, c;
    int temp; 
    printf("Input coordimates of 1st rect!\n");
    printf("Input xA: "); scanf("%d", &(a.maxx));
    printf("Input yA: "); scanf("%d", &(a.maxy));
    printf("Input xB: "); scanf("%d", &(a.minx));
    printf("Input yB: "); scanf("%d", &(a.miny));
    if (a.maxx<a.minx){
                       temp=a.maxx;
                       a.maxx=a.minx;
                       a.minx=temp;
                       }
    if (b.maxx<b.minx){
                       temp=b.maxx;
                       b.maxx=b.minx;
                       b.minx=temp;
                       }
    if (a.maxy<a.miny){
                       temp=a.maxy;
                       a.maxy=a.miny;
                       a.miny=temp;
                       }
    if (b.maxx<b.minx){
                       temp=b.maxy;
                       b.maxy=b.miny;
                       b.miny=temp;
                       }
    if (intersection(a, b, &c)){
                            printf("intersection result is {(%d:%d), (%d:%d)}\n", c.minx, c.miny, c.maxx, c.maxy);
                            }
                            else{
                                 printf("no intersection");
                                 }
   system("pause");
   return 0;
}

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

  1. Включаются необходимые заголовочные файлы: stdio.h и stdlib.h
  2. Объявляется структура box, которая содержит координаты прямоугольника: maxx, maxy, minx, miny.
  3. Определяется функция intersection, которая выполняет пересечение двух прямоугольников и сохраняет результат в третьем прямоугольнике result.
  4. В функции main() создаются три структуры box: a, b и c. Третья структура c будет содержать результат пересечения.
  5. Пользователю предлагается ввести координаты прямоугольника a.
  6. Если введенные координаты прямоугольника a некорректны (то есть, его стороны пересекаются), то они инвертируются с помощью временной переменной temp.
  7. Аналогично проверяются и инвертируются координаты прямоугольника b.
  8. Если прямоугольники a и b пересекаются, то вызывается функция intersection, которая сохраняет результат в структуре c.
  9. Если прямоугольники не пересекаются, то выводится сообщение об этом.
  10. Выводится результат пересечения прямоугольников в формате {(x1,y1), (x2,y2)}
  11. Программа ожидает нажатия клавиши для продолжения работы.
  12. Возвращается 0, что означает успешный конец работы программы.

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


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

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

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