using namespace std;
int main() { int a, b, c, d, e, h; double p1, p2, s1, s2;
cout << "Введи 3 стороны одного треугольника через пробел: " << endl;
while (true) {
cin >> a >> b >> c;
if (a < b + c && b < a + c && c < a + b) {
p1 = (a + b + c) / 2.0;
s1 = sqrt(p1 * (p1 - a) * (p1 - b) * (p1 - c));
break;
} else {
cout << "Такого треугольника не существует, попробуй ввести другие цифры:" << endl;
}
}
cout << "Введи 3 стороны другого треугольника через пробел: " << endl;
while (true) {
cin >> d >> h >> e;
if (d < h + e && h < d + e && e < d + h) {
p2 = (d + h + e) / 2.0;
s2 = sqrt(p2 * (p2 - d) * (p2 - h) * (p2 - e));
break;
} else {
cout << "Такого треугольника не существует, попробуй ввести другие цифры: " << endl;
}
}
if (s1 == s2) {
cout << "Площади равны";
} else {
cout << "Площади не равны";
}
}
Информатика 11 класс Условные операторы и циклы
Кратко о задаче: у вас должен быть C++‑программа, которая считывает длины сторон двух треугольников, проверяет, что стороны действительно образуют треугольник (неравенства треугольника), вычисляет площади по формуле Герона и сравнивает эти площади.
Основные ошибки в приведённом фрагменте:
Исправленный и понятный вариант программы (пошагово):
1) Считываем стороны первого треугольника. Повторяем ввод, пока не выполнится условие треугольника (a < b + c и т.д.).
2) Вычисляем полупериметр p1 и площадь s1 по формуле Герона: s1 = sqrt(p1*(p1-a)*(p1-b)*(p1-c)).
3) Аналогично для второго треугольника.
4) Сравниваем s1 и s2 и выводим результат (какая площадь больше или равны).
Пример кода (читаемый для школьника):
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a, b, c; // стороны первого треугольника
double d, e, f; // стороны второго треугольника
double p1, p2, s1, s2;
cout << "Введите три стороны первого треугольника: ";
do {
cin >> a >> b >> c;
if (!(a < b + c && b < a + c && c < a + b)) {
cout << "Неверные стороны. Введите ещё раз: "; // повторный ввод
}
} while (!(a < b + c && b < a + c && c < a + b));
p1 = (a + b + c) / 2.0;
s1 = sqrt(p1 * (p1 - a) * (p1 - b) * (p1 - c));
cout << "Введите три стороны второго треугольника: ";
do {
cin >> d >> e >> f;
if (!(d < e + f && e < d + f && f < d + e)) {
cout << "Неверные стороны. Введите ещё раз: "; // повторный ввод
}
} while (!(d < e + f && e < d + f && f < d + e));
p2 = (d + e + f) / 2.0;
s2 = sqrt(p2 * (p2 - d) * (p2 - e) * (p2 - f));
cout << "Площадь первого треугольника: " << s1 << endl;
cout << "Площадь второго треугольника: " << s2 << endl;
const double EPS = 1e-9; // небольшая погрешность при сравнении double
if (fabs(s1 - s2) < EPS) {
cout << "Площади равны." << endl;
} else if (s1 > s2) {
cout << "Первый треугольник имеет большую площадь." << endl;
} else {
cout << "Второй треугольник имеет большую площадь." << endl;
}
return 0;
}
Пояснения к коду:
Если нужно, могу объяснить подробнее каждый оператор и почему именно так сделан ввод/проверка, или показать упрощённый вариант без повторного ввода (однократная проверка и выход с сообщением об ошибке).