06.02.2012, 22:25 | #1 (permalink) |
Member
Регистрация: 06.02.2012
Сообщений: 46
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задача на Паскале
|
06.02.2012, 22:25 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Я думаю, что тут найдется много полезного для вас Задача в паскале Задача на Паскале и С++ Задача на Паскале Задача на Паскале Задача на Паскале |
06.02.2012, 23:09 | #2 (permalink) |
support
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
|
Программу написать несложно, но главное тут подбор формул, а это зависит от вашего уровня владения математическим аппаратом.
Сторону а можно вычислить через синус угла бета, сторону b - через тангенс угла бета. Сторону с - через формулу нахождения площади треугольника Герона, где полупериметр можно заменить полусуммой всех сторон и выразить с. Затем вычислите периметр треугольника. Остальные углы можно вычислить через арктангенсы. Напишите все эти формулы - программу вам сделают за пару минут. |
07.02.2012, 11:30 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Да ладно, чего там эти формулы - глупость школьная. Тем более, что можно даже и без Герона.
Код:
VAR a,b,c,alpha,beta,gamma,S,h:Real; Function GrRad(X:Real):Real; begin GrRad:=(X/180)*Pi; end; Function RadGr(X:Real):Real; begin RadGr:=(X/Pi)*180; end; Function ArcSin(X:Real):Real; begin If Round(X*100000)=100000 then ArcSin:=Pi/2 else IF Round(X*100000)=-100000 then ArcSin:=-Pi/2 else ArcSin:=ArcTan(X/SQRT(1-X*X)); end; BEGIN Write('S= '); Readln(S); Write('h= '); Readln(h); Write('beta (degrees)= '); Readln(beta); beta:=GrRad(beta); a:=h/Sin(beta); c:=S*2/h; b:=Sqrt(sqr(h)+sqr(c-a*cos(beta))); alpha:=ArcSin(a*sin(beta)/b); gamma:=ArcSin(c*sin(beta)/b); Writeln('a= ',a:0:3); Writeln('b= ',b:0:3); Writeln('c= ',c:0:3); Writeln('h= ',h:0:3); Writeln('alpha= ',RadGr(alpha):0:3,' degrees'); Writeln('beta= ',RadGr(beta):0:3,' degrees'); Writeln('gamma= ',RadGr(gamma):0:3,' degrees'); Writeln('S= ',S:0:3); Readln END. |
07.02.2012, 20:36 | #5 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.02.2012, 11:24 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Так, кажется напортачил, и сильно!
То есть программа годится, но только если треугольник заведомо остроугольный. Если же один из углов - тупой, то тут начинаются неоднозначности и решение сильно усложняется. Попробую довести до ума. Довёл. Да, тут арксинусы не подходят, нужно углы вычислять не по теореме синусов, а по теореме косинусов. Тогда правильно отрабатываются и тупые углы. Фу, стыд мне и позор! Поправил: Код:
VAR a,b,c,alpha,beta,gamma,S,h:Real; Function GrRad(X:Real):Real; begin GrRad:=(X/180)*Pi; end; Function RadGr(X:Real):Real; begin RadGr:=(X/Pi)*180; end; Function ArcCos(X:Real):Real; begin If Round(X*100000)=100000 then ArcCos:=0 else IF Round(X*100000)=-100000 then ArcCos:=Pi else ArcCos:=(Pi/2)-ArcTan(X/SQRT(1-X*X)); end; BEGIN Write('S= '); Readln(S); Write('h= '); Readln(h); Write('beta (degrees)= '); Readln(beta); beta:=GrRad(beta); a:=h/Sin(beta); c:=S*2/h; b:=Sqrt(sqr(h)+sqr(c-a*cos(beta))); alpha:=ArcCos((sqr(b)+sqr(c)-sqr(a))/(b*c*2)); gamma:=ArcCos((sqr(a)+sqr(b)-sqr(c))/(a*b*2)); Writeln('a= ',a:0:3); Writeln('b= ',b:0:3); Writeln('c= ',c:0:3); Writeln('h= ',h:0:3); Writeln('alpha= ',RadGr(alpha):0:3,' degrees'); Writeln('beta= ',RadGr(beta):0:3,' degrees'); Writeln('gamma= ',RadGr(gamma):0:3,' degrees'); Writeln('S= ',S:0:3); Writeln('P= ',(a+b+c):0:3); Readln END. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|