Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите с плавающмим точками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
priboltik
извиняюсь..если тему уже затрагивали...написал прогу... самую простейшую.. для вычисления всех сторон треугольника., периметра и площади..
а он мне пишет что неправильные операции над числами с плав. точкой произвожу.что делать??

program h09809;
uses crt;

var
aa,bb,alpha_:real;

function triangle(var a,b,alpha:real):real;
var
polyper,perimetr,c,beta,gamma:real;
begin
c:=sqr(a)+sqr(b)-2*a*b*cos(alpha);
beta:=(b*sin(alpha)/a)/sqrt(1-sqr(b*sin(alpha)/a));
gamma:=180-alpha-beta;
writeln('Storoni treugolnika ravni: ',a:2:2,' ',b:2:2,' ',c:2:2);
writeln('Gradusnaya mera yglov treygolnika: alpha=',alpha:2:2,' beta=',beta:2:2,' gamma=',gamma:2:2);
perimetr:=a+b+c;
writeln('Perimetr raven ',perimetr:2:2);
polyper:=(a+b+c)/2;
polyper:=sqrt(polyper*(polyper-a)*(polyper-b)*(polyper-c));
writeln('Ploshad treygolnika ravna ',polyper:2:2);
end;

begin
clrscr;
writeln('Vvedite pervyiy storony treygolnika');
readln(aa);
writeln('Vvedite vtoryiy storony treygolnika');
readln(bb);
writeln('Vvedite ygol mejdy nimi');
readln(alpha_);
triangle(aa,bb,alpha_);
readln;
readln;
end.
volvo
Под корнем точно положительное число?
priboltik
ну по идее да... а ...вы думаете, это потому что он допускает выделение корня из отрицательног числа??
volvo
Я не знаю, поэтому и спрашиваю... Вроде больше ничего к подобно ошибке не может привести... Попробуй перед вычислением корня результат подкоренного выражения распечатать - тогда увидишь, из-за этого или нет... Или скажи, на каких данных у тебя программа вылетает...
Артемий
А отладчиком пройдись....там отрицательное!

Добавлено через 3 мин.
Может попробуешь abs?
Tan
ой нет, с синусом всё в порядке, извиняюсь smile.gif
priboltik
Цитата(volvo @ 3.05.2007 18:55) *

Я не знаю, поэтому и спрашиваю... Вроде больше ничего к подобно ошибке не может привести... Попробуй перед вычислением корня результат подкоренного выражения распечатать - тогда увидишь, из-за этого или нет... Или скажи, на каких данных у тебя программа вылетает...


да я пробовал на многих.. и .собвственно на всех и вылетает...
щас попробовал с модулем сделать..вроде все работает.. спасибо всем!!
Tan
а с модулем если ввести 4 2 90 выдёт 8 ?
volvo
Цитата
ой нет, с синусом всё в порядке, извиняюсь
Нет, не все... Синус (и косинус, кстати, тоже) вычисляется от аргумента в радианах, а вводится пользователем в градусах... Надо переводить градусы в радианы...
Tan
я сначала так же подумал, просто потом вывел Sin (pi * 30 / 180), забыл округлить и получил ответ 5 + мантисса, это меня смутило,
Sin(30*pi/180) :0:2
- вот где собака зарыта.
priboltik
то есть... при вводе надо каждый угол умножать на pi и делить 180??

а при выводе.. соответсвенно..наоборот??
Артемий
Ну по идеи когда работаешь с синусами и косинусами то да,нужно переводить в радианы..(1 градус приблизительно 0,017 радиан)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.