Написать на С ++ Даны два прямоугольника, стороны которых параллельны или

Написать на С ++
Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Знамениты координаты левого нижнего угла каждого из их и длины их сторон. Один из прямоугольников назовем первым, второй - вторым.
а) Найти, принадлежат все точки первого прямоугольника второго.
б) Найти, принадлежат все точки 1-го из прямоугольников иному.
в) Найти, пересекаются эти прямоугольники.

Задать свой вопрос
Фараонова Камилла
редактор ответов ужасен. ответ https://pastebin.com/UrKAvFCk
1 ответ
Лучше скопировать код в текстовый файл - не уверен что здесь он нормально будет читаться (много комментариев)
/*  Рассматривать будем самостоятельно координаты X (с шириной) и Y (с высотой) * *  Варианты обоюдного расположения одной координаты: * * 1) CD левее AB *            A       B *            ------- *  -------- *  C        D * * 2) CD пересекает слева AB *            A       B *            ------- *     -------- *     C        D * * 3) CD снутри AB *            A       B *            ------- *             ----- *             C     D * * 4) AB внутри CD *            A       B *            ------- *           --------- *           C         D * * 5) CD пересекает справа AB *            A       B *            ------- *               -------- *               C        D * * 6) CD правее AB *            A       B *            ------- *                      -------- *                      C        D */

/*****************************************************************************//*  Вспомогательная функция  inside_coord() определяет, что координата первого  прямоугольника лежит полностью снутри второго.
  Параметры: координата и размер первого прямоугольника             координата и размер второго прямоугольника
  Возвращает: 1 если координата первого лежит полностью снутри второго либо              0 если не полностью или вообще за пределами.  Фактически определяет имеем ли мы вариант 4 (см. выше).*/int inside_coord (int coord1, int size1, int coord2, int size2)   int A = coord1, B = coord1 + size1;   int C = coord2, D = coord2 + size2;
   /* проверяем вариант 4 */   if ((A gt;= C) amp;amp; (B lt;= D))      return 1;      else       return 0;   
/*****************************************************************************//*  Вспомогательная функция  intersect_coord() определяет, что координаты не пересекаются.  Параметры: координата и размер первого прямоугольника             координата и размер второго прямоугольника
  Отдаёт: 1 если не пересекаются, 0 если хоть как-то              пересекаются.  Практически определяет имеем ли мы вариант 1 либо 6 (см. выше).*/int intersect_coord (int coord1, int size1, int coord2, int size2)   int A = coord1, B = coord1 + size1;   int C = coord2, D = coord2 + size2;
   /* проверяем вариант 1 либо вариант 6 */   if ((D lt;= A) (C gt;= B))      return 1;      /* проверяем вариант 6 */   else if (C gt;= B)       return 1;      else       return 0;   
/*****************************************************************************/
/* Переменные содержащие координаты (x, y, ширина, вышина) первого прямоугольника: */int x1, y1, width1, height1;/* Переменные содержащие координаты (x, y, ширина, вышина) второго прямоугольника: */int x2, y2, width2, height2;

/*****************************************************************************//* функция проверяющая, что все точки первого снутри второго * отдаёт 1, если это так, 0 если не так. */int is_first_inside_second (void)int x_inside, y_inside;  /* проверка, что x полностью снутри */  x_inside = inside_coord (x1, width1, x2, width2);  /* проверка, что y на сто процентов снутри */  y_inside = inside_coord (y1, height1, y2, height2);
  if ((x_inside) amp;amp; (y_inside))      /* если x снутри И y снутри, то весь прямоугольник снутри */    return 1;    else      return 0; 
/*****************************************************************************//* функция проверяющая, что все точки второго снутри первого * отдаёт 1, если это так, 0 если не так. */int is_second_inside_first (void)int x_inside, y_inside;  /* проверка, что x на сто процентов внутри */  x_inside = inside_coord (x2, width2, x1, width1);  /* проверка, что y вполне снутри */  y_inside = inside_coord (y2, height2, y1, height1);
  if ((x_inside) amp;amp; (y_inside))      /* если x внутри И y снутри, то весь прямоугольник снутри */    return 1;    else      return 0; 
/*****************************************************************************//* функция проверяющая, что все точки одного снутри второго * отдаёт 1, если это так, 0 если не так. */int is_any_inside_any (void)  /* проверка что 1-ый внутри второго либо 2-ой внутри первого */  if (is_first_inside_second() is_second_inside_first())      return 1;    else      return 0; 
/*****************************************************************************//* функция проверяющая, что прямоугольники пересекаются * возвращает 1, если это так, 0 если не так. */int is_intersection (void)int x_intersect, y_intersect;  /* проверка, что x вообще пересекаются хоть как-то */  x_intersect = intersect_coord (x1, width1, x2, width2);  /* проверка, что y вообщем пересекаются хоть как-то */  y_intersect = intersect_coord (y1, height1, y2, height2);
  if ((x_intersect) amp;amp; (y_intersect))      /* если x пересекаются И y пересекаются, прямоугольники пересекаются */    return 1;    else      return 0; 
Аринка Шрейнер
не, не подсобляет. Ну и как вот тут постить код?
Оленька Балеун
так чуток лучше: https://pastebin.com/17jHNnvB
Сашок
прошу прощения, ошибка в конце, условие наоборот.
Вася Взырин
исправленный вариант: https://pastebin.com/UrKAvFCk
Inna Truhtova
огромное спасибо!)
Игорь Мишачев
строки 92-95 - лишние, лучше их удалить
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт