0 / 0 / 0
Регистрация: 06.11.2008
Сообщений: 33
|
||||||
1 | ||||||
Выяснить, существует ли треугольник с длинами сторон x, y, z06.11.2008, 18:29. Показов 4480. Ответов 15
Метки нет (Все метки)
Всем доброго времени суток. Вообщем заступорился на месте, когда нужно определить косинус, кто знает, помогите, пожалуйста)
Вот задача: Выяснить, существует ли треугольник с длинами сторон x, y, z. Если да, то оп-ределить тип треугольника – остроугольный, тупоугольный или прямоугольный. Вот что написал я:
0
|
06.11.2008, 18:29 | |
Ответы с готовыми решениями:
15
Выяснить, существует ли треугольник с длинами сторон Определить, существует ли треугольник с заданными длинами сторон x, y, z Треугольник задан длинами сторон Треугольник задан длинами сторон.Найти:.... |
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
06.11.2008, 20:23 | 2 |
Неужели в школе не проходили, что косинус угла 90 градусов=0, а если косинус меньше 0, то угол тупой и если больше 0, то острый. Еще упростил поиск сторон по длине.
Код
program tip; uses crt; var x,y,z,x1,x2,mx,mn,sr,c: real; begin clrscr; write ('x= ');readln (x); write ('y= ');readln (y); write ('z= ');readln (z); if (x+y<=z) or (x+z<=y) or (y+z<=x) then begin writeln ('treugolnik ne sushestvuet'); readln; halt; end else begin mx:=x; {находим наибольшую сторону} if y>mx then mx:=y; if z>mx then mx:=z; mn:=x; {находим наименьшую сторону} if y<mn then mn:=y; if z<mn then mn:=z; sr:=x+y+z-mx-mn; {находим оставшуюся сторону} c:=(mn*mn+sr*sr-mx*mx)/(2*mn*sr);{косинус наибольшего угла} if c>0 then writeln('treugolnik ostrougolnyj') {если кос>0, то угол меньше 90 градусов} else if c<0 then writeln('treugolnik tupougolnyj'){больше 90 градусов} else if c=0 then writeln('treugolnik pryamougolnyj'); {равен 90 градусов} end; readln end.
0
|
2836 / 1645 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
06.11.2008, 20:31 | 3 |
Код
x= 0.3 y= 0.4 z= 0.5 treugolnik ostrougolnyj Не всё представляется в виде конечной двоичной дроби, не у всех прямоугольных косинус будет равен точно нулю, поэтому надо бы Код
if abs(c)<1e-10 then writeln('treugolnik pryamougolnyj') else if c>0 then writeln('treugolnik ostrougolnyj') {если кос>0, то угол меньше 90 градусов} else if c<0 then writeln('treugolnik tupougolnyj');{больше 90 градусов}
0
|
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
06.11.2008, 21:07 | 4 |
Очень верное замечание, но когда начинаешь это объяснять клиенту, обычно говорят, нет, нам с погрешностями не надо, мы это не проходили. Привык уже эту ерунду писать.
0
|
0 / 0 / 0
Регистрация: 06.11.2008
Сообщений: 33
|
|
07.11.2008, 05:45 [ТС] | 5 |
А что такое halt???
0
|
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
07.11.2008, 07:23 | 6 |
0
|
0 / 0 / 0
Регистрация: 06.11.2008
Сообщений: 33
|
|
09.11.2008, 15:23 [ТС] | 7 |
Прочитал. А зачем он там нужен)?
0
|
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
09.11.2008, 16:40 | 8 |
Если читал, то что за вопрос? Чтобы закончить пронрамму, раз треугольник не существует, зачем мучать компьютер и считать несуществующие вещи.
0
|
2836 / 1645 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
09.11.2008, 23:22 | 9 |
В этой проге просто всё после halt находится в else, поэтому здесь особого смысла нет. Хотя, наверное, лучше сказать, что здесь есть halt, поэтому нет особого смысла в else.
0
|
2 / 2 / 2
Регистрация: 04.11.2008
Сообщений: 37
|
|
10.11.2008, 11:25 | 10 |
а если для начала сделать проверку на прямоугольный треугольник:
Код
if (mx*mx = mn*mn + sr*sr) then writeln('treugolnik pryamougolnyj') else {остальные условия}
0
|
Почетный модератор
64303 / 47600 / 32742
Регистрация: 18.05.2008
Сообщений: 115,181
|
|
10.11.2008, 11:33 | 11 |
0
|
(Yellow_Duck)
1261 / 130 / 15
Регистрация: 16.10.2008
Сообщений: 733
|
|
10.11.2008, 11:40 | 12 |
хахахахаха
+1
0
|
2 / 2 / 2
Регистрация: 04.11.2008
Сообщений: 37
|
|
10.11.2008, 12:14 | 13 |
От неисользования корней и округлений
0
|
2836 / 1645 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
10.11.2008, 22:25 | 14 |
Сути это не меняет. Всё те же 0.3 0.4 0.5 не проходят. Не надо вещественные числа сравнивать знаком =, если нет уверенности на 100000000h%, что там не окажется всяких округлений бесконечных двоичных дробей.
0
|
2 / 2 / 2
Регистрация: 04.11.2008
Сообщений: 37
|
|
11.11.2008, 11:00 | 15 |
Уже вижу и со всем согласен
0
|
0 / 0 / 0
Регистрация: 06.11.2008
Сообщений: 33
|
|
12.11.2008, 16:37 [ТС] | 16 |
Большое спасибо Puporev, и всем кто помогал, всё же halt я опустил по двум причинам: первая - я ламер и мы ещё не проходили этого, вторая он там необязателен, без него всё работает.
0
|
12.11.2008, 16:37 | |
12.11.2008, 16:37 | |
Помогаю со студенческими работами здесь
16
Определить, сколько существует треугольников с предлагаемыми длинами сторон a, b, c, d, e Определить, можно ли построить треугольник с заданными длинами сторон Определить, можно ли построить треугольник с заданными длинами сторон На плоскости задан треугольник длинами своих сторон, найти наименьший из углов треугольника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |