Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ помогите с плавающмим точками

Автор: priboltik 3.05.2007 22:18

извиняюсь..если тему уже затрагивали...написал прогу... самую простейшую.. для вычисления всех сторон треугольника., периметра и площади..
а он мне пишет что неправильные операции над числами с плав. точкой произвожу.что делать??


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 3.05.2007 22:20

Под корнем точно положительное число?

Автор: priboltik 3.05.2007 22:44

ну по идее да... а ...вы думаете, это потому что он допускает выделение корня из отрицательног числа??

Автор: volvo 3.05.2007 22:55

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

Автор: Артемий 3.05.2007 22:55

А отладчиком пройдись....там отрицательное!

Добавлено через 3 мин.
Может попробуешь abs?


Эскизы прикрепленных изображений
Прикрепленное изображение

Автор: Tan 3.05.2007 23:02

ой нет, с синусом всё в порядке, извиняюсь smile.gif

Автор: priboltik 4.05.2007 0:12

Цитата(volvo @ 3.05.2007 18:55) *

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


да я пробовал на многих.. и .собвственно на всех и вылетает...
щас попробовал с модулем сделать..вроде все работает.. спасибо всем!!

Автор: Tan 4.05.2007 0:18

а с модулем если ввести 4 2 90 выдёт 8 ?

Автор: volvo 4.05.2007 0:39

Цитата
ой нет, с синусом всё в порядке, извиняюсь
Нет, не все... Синус (и косинус, кстати, тоже) вычисляется от аргумента в радианах, а вводится пользователем в градусах... Надо переводить градусы в радианы...

Автор: Tan 4.05.2007 0:53

я сначала так же подумал, просто потом вывел Sin (pi * 30 / 180), забыл округлить и получил ответ 5 + мантисса, это меня смутило,

Sin(30*pi/180) :0:2
- вот где собака зарыта.

Автор: priboltik 4.05.2007 2:16

то есть... при вводе надо каждый угол умножать на pi и делить 180??

а при выводе.. соответсвенно..наоборот??

Автор: Артемий 4.05.2007 2:35

Ну по идеи когда работаешь с синусами и косинусами то да,нужно переводить в радианы..(1 градус приблизительно 0,017 радиан)