• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача на Паскале

Натуличка

Новые
Регистрация
6 Фев 2012
Сообщения
46
Реакции
0
Баллы
0
Задача на Паскале

помогите, пожалуйста решить задачу по программированию! Дан произвольный треугольник АВС, для которого определен следующий нахарактерных параметров: а, в, с-стороны треугольника. альфа, бетта, гамма-углы, h-высота, опущенная на сторону с. S-площадь, Р-периметр. по трем заданным параметрам S, h, бетта вычислить все остальные. :tehnari_ru_837: нужно написать програмку!
 
Программу написать несложно, но главное тут подбор формул, а это зависит от вашего уровня владения математическим аппаратом.

Сторону а можно вычислить через синус угла бета, сторону b - через тангенс угла бета. Сторону с - через формулу нахождения площади треугольника Герона, где полупериметр можно заменить полусуммой всех сторон и выразить с. Затем вычислите периметр треугольника. Остальные углы можно вычислить через арктангенсы.

Напишите все эти формулы - программу вам сделают за пару минут.
 
Напишите все эти формулы - программу вам сделают за пару минут.
Да ладно, чего там эти формулы - глупость школьная. Тем более, что можно даже и без Герона.
Код:
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.
 
пасибо большое ребят) попробую разобраться) очень помогли
 
Так, кажется напортачил, и сильно!
То есть программа годится, но только если треугольник заведомо остроугольный. Если же один из углов - тупой, то тут начинаются неоднозначности и решение сильно усложняется.
Попробую довести до ума.
Довёл.
Да, тут арксинусы не подходят, нужно углы вычислять не по теореме синусов, а по теореме косинусов. Тогда правильно отрабатываются и тупые углы. Фу, стыд мне и позор! Поправил:
Код:
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.
 
Назад
Сверху