Написать на С ++ Даны два прямоугольника, стороны которых параллельны или
Написать на С ++
Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Знамениты координаты левого нижнего угла каждого из их и длины их сторон. Один из прямоугольников назовем первым, второй - вторым.
а) Найти, принадлежат все точки первого прямоугольника второго.
б) Найти, принадлежат все точки 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;
/* Рассматривать будем самостоятельно координаты 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 - лишние, лучше их удалить
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Игорь 14 лет назад был на 8 лет моложе, чем его
Математика.
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
Облако тегов