ЗАДАЧА
Длинна высоты. Треугольник [latex]ABC[/latex] задан длинами своих сторон. Найти длину высоты, опущенной из вершины А.
Экстремальные тесты: сумма двух сторон равна третьей; одна из сторон равна нулю.
Для справки.
Высота в произвольном треугольнике вычисляется по формуле:
[latex]h=2\cdot\frac{\sqrt{(p\cdot(p-a)\cdot(p-c)\cdot(p-b)}}{b}[/latex]
где
[latex]p=\frac{a+b+c}{2}[/latex]
В таблице представлены возможные треугольники: прямоугольный, равнобедренный, равносторонний и с неизвестными углами (произвольный). Также тут указаны условия, при которых треугольник существовать не может.
a |
b |
c |
h |
Коментарии |
2 | 3 | 4 | 1.94 | Тест пройден. |
0 | 4 | 5 | — | Ошибка в условии.Одна из сторон равна или меньше 0. |
3 | 3 | 6 | — | Ошибка в условии. Сумма двух сторон равна или меньше третьей стороны. |
-4 | 3 | 6 | — | Ошибка в условии.Одна из сторон равна или меньше 0. |
6 | 6.5 | 2.6 | 2.4 | Тест пройден. |
4.4 | 4.4 | 5 | 4.11 | Тест пройден. |
4 | 4 | 4 | 3.46 | Тест пройден. |
Программа позволяет вычислять высоту произвольного треугольника по его трем сторонам. Существуют некоторые условия, при которых треугольник не может существовать, следовательно не может существовать его высота.
Алгоритм проверяет возможность существования треугольника с исходными данными: сумма длин двух сторон не должна равняться длине третьей стороны; длина стороны не должна равняться нулю; длина стороны не должна быть отрицательной; сумма длин двух сторон не должна быть меньше длины третьей.
Код на С++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include <stdio.h> #include <math.h> int main(void) { float a, b, c, p, h; scanf("%f", &a); printf("Введена длина a=%5.2f. \n", a); scanf("%f", &b); printf("Введена длина b=%5.2f. \n", b); scanf("%f", &c); printf("Введена длина c=%5.2f. \n", c ); if ( a<=0.00 || b<=0.00 || c<=0.00 ) // Проверка на корректность условия. { printf ("Ошибка в условии.Одна из сторон равна или меньше 0. \n"); } else if ((a+b)-c<=0.00 || (a+c)-b<=0.00 || (b+c)-a<=0) { printf ("Ошибка в условии. Сумма двух сторон равна или меньше третьей стороны. \n"); } else { p=(a+b+c)/2; //Если условие корректно - вычисляем высоту треугольника. h=2*sqrt(p*(p-a)*(p-c)*(p-b))/b; printf("h=%10.2f \n" , h); } return 0; } |
Код на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.util.*; import java.lang.*; import java.io.*; class Brovko { public static void main (String[] args) throws java.lang.Exception { double a,b,c,p,h; Scanner in = new Scanner(System.in); a=in.nextDouble(); b=in.nextDouble(); c=in.nextDouble(); if (a<=0 || b<=0 || c<=0) { System.out.println("Ошибка в условии.Одна из сторон равна или меньше 0. \n"); } else if ((a+b)-c<=0 || (a+c)-b<=0 || (b+c)-a<=0) { System.out.println("Ошибка в условии. Сумма двух сторон равна или меньше третьей стороны. \n"); } else { p=(a+b+c)/2; h=2*Math.sqrt(p*(p-a)*(p-c)*(p-b))/b; System.out.format("h = %f",h); } } } |
Для выполнения программы и проверки тестов можно воспользоватся следующей ссылкой (C++)/ссылкой(Java).
Вставьте пожалуйста формулы в laTeX. Картинка с рамкой и тенью вместо формулы смотрится не очень хорошо. А вот чертёж был бы очень уместен. Как и в большинстве геометрических задач.
Исправил.
В формуле точки, а не звездочки для умножения.
Может оказаться, что сторона треугольника отрицательная или больше двух других — такая же проблема, как нулевая или равная двум другим сторона.
Все исправил.
Извините, сразу не заметил. У Вас только один тест, когда треугольник существует, и то ответ сложно проверить. Добавьте еще парочку тестов, например, прямоугольный треугольник, равносторонний треугольник.
Тесты добавлены.
Засчитано, 10 баллов.
Засчитана Java-версия!