Задать вопрос
CodeInside
@CodeInside

Где логическая ошибка?

Задание: найти площадь равнобочной трапеции с основаниями а и b и углом альфа при большем основании а.
int a,b;
        cout << "Input length of the lower base: ";
	cin >> a;
	cout << "Input length of the upper base: ";
	cin >> b;

	float angle;
        cout << "Input angle: ";
	cin >> angle;

	angle = (angle*pi)/180.;//перевод градусов у радианы
	float c = (a-b)/2*cos(angle);//сторона трапеции
        //здесь делал точку останова - данные правильно вычисляются
	float s = ((a+b)/2.)*sqrt((float)pow(c,2) - ((float)pow(a-b,2))/4.);//вычисление площади http://www-formula.ru/index.php/2011-09-19-02-39-24/trapeze-area

	printf("Area: %.3f\n\n",s);

Например ввожу такие параметры:
a - 20, b - 10, angle - 30. Результат: -1.#io. В чём ошибка?
  • Вопрос задан
  • 369 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Чересчур сложно вычисляете. Лучше сначала аналитически упрощать формулу, тогда меньше места для ошибок в программе останется.
Пусть нижнее (большее) основание a, верхнее (меньшее) - b.
Высота трапеции (равнобедренной) h = (a-b)*tg(α)/2
Площадь трапеции S = (a+b)*h/2 = (a+b)*(a-b)*tg(α)/4 = (a2-b2)*tg(α)/4
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
GavriKos
@GavriKos
У вас под корнем получается отрицательное число, из за того что неправильно вычислили боковую сторону. Смотрите формулы прямоугольного треугольника. Чтобы было проще - не пишите всю формулу, разбейте ее на составные части. И дебаг будет простой.
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Площадь трапеции : S = (a+b) * h /2. Откуда у вас степенные функции и корень квадратный понять не могу.
h можно вычислить через решение треугольника. где h-один катет, второй : (b-a)/2 так как у вас равнобедренная трапеция, и тангенс/котангенс имеющегося у вас угла.
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C++
> (a-b)/2
Проверьте, не случилось ли у вас тут целочисленного деления
Ответ написан
Комментировать
@vilgeforce
Раздолбай и программист
Отладчик надо использовать, отладчик...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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