Лучше скопировать код в текстовый файл - не уверен что тут он нормально будет читаться (много комментариев) /* Рассматривать будем независимо координаты 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 >= C) && (B <= 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 <= A) || (C >= B)) { return 1; } /* проверяем вариант 6 */ else if (C >= 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) && (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) && (y_inside)) { /* если x внутри И y внутри, то весь прямоугольник внутри */ return 1; } else { return 0; }} ///* функция проверяющая, что все точки одного внутри второго * возвращает 1, если это так, 0 если не так. */int is_any_inside_any (void){ /* проверка что первый внутри второго или второй внутри первого */ 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) && (y_intersect)) { /* если x пересекаются И y пересекаются, прямоугольники пересекаются */ return 1; } else { return 0; }}
do {
cout << "Введите размеры стола a>b: " << endl;
cin >> a >> b;
} while (b > 0 && a > b);
do {
cout << "Введите размеры прямоугольника c>d: " << endl;
cin >> c >> d;
} while (c > 0 && c > d);
int n1 = (a / c) * (b / d);
int n2 = (a / d) * (b / c);
cout << "Длинной вдоль длинной= " << n1 << " длинной вдоль короткой=
" << n2 << endl;
if (n1 > n2) {
cout << "Длинной стороной вдоль длинной больше" << endl;
}
else if (n2 > n1) {
cout << "Длинной стороной вдоль короткой больше" << endl;
}
else {
cout << "При разном расположении одинаково" << endl;
}
/* Рассматривать будем независимо координаты 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 >= C) && (B <= 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 <= A) || (C >= B)) { return 1; } /* проверяем вариант 6 */ else if (C >= 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) && (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) && (y_inside)) { /* если x внутри И y внутри, то весь прямоугольник внутри */ return 1; } else { return 0; }}
///* функция проверяющая, что все точки одного внутри второго * возвращает 1, если это так, 0 если не так. */int is_any_inside_any (void){ /* проверка что первый внутри второго или второй внутри первого */ 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) && (y_intersect)) { /* если x пересекаются И y пересекаются, прямоугольники пересекаются */ return 1; } else { return 0; }}