Другие языки программирования и технологии

Помогите написать программу на С++: Заданы отрезки a,b,c,d. Проверить, могут ли они служить сторонами прямоугольника

#include <iostream>
using namespace std;

int main()
{
setlocale(LC_CTYPE, "Russian_Russia.1251");
const int sz = 4;
float a[sz];

for (int n = 0; n < sz; n++)
{
cout << " Введите " << n + 1 << "-й отрезок: ";
cin >> a[n];
}
float temp;
for (int n = 1; n < sz; n++)
{
for (int m = 0; m < sz - n; m++)
{
if (a[m] < a[m + 1])
{
temp = a[m];
a[m] = a[m + 1];
a[m + 1] = temp;
}
}
}
cout << endl;
if (a[0] == a[1] && a[2] == a[3])
{
if (a[1] == a[2]) cout << " Возможен квадрат! ";
else cout << " Возможен прямоугольник! ";
}
else if (a[0] >= a[1] + a[2] + a[3]) cout << "\a Четырёхугольник не существует!! ";
else cout << " Прямоугольник не возможен! ";
cin.get(); cin.get();
return 0;
}
Сеня Гаврюков
Сеня Гаврюков
60 808
Лучший ответ
if (a == b && c == d || a == c && b == d || a == d && b == c) {
printf("Могут");
}
else
{
printf("Не могут");
}
Cemil Huseynov
Cemil Huseynov
2 316
Программа выше не вполне верна: потому что прямоугольник не обязан быть параллелен сторонам.
Не вполне понятно, что такое "заданы отрезки", поэтому пусть будет "заданы точки x_A, y_A, ..x_D, y_D". Для параллелограмма достаточно проверить, что вектор от A к B и от D к C совпадают (если точки должны идти в порядке ABCD):

if ((x_B - x_A) == (x_C - x_D) && (y_B - y_A) == (y_C - y_D))
{ тогда могут }
else
{ тогда не могут }

Если нужен прямоугольник, то надо заодно проверить, собственно, прямой угол между AB и BC:
scalar = (x_B - x_A)*(x_B - x_C) + (y_B - y_A)*(y_B - y_C)
if ((то же условие) && scalar == 0)
{ тогда могут }
else
{ снова нет }

Наконец, если вершины идут в случайном порядке, то надо проверить те же вещи для вершин в порядке ABDC и ACBD - это все возможные случаи.

Похожие вопросы