Здраствуйте, вот модуль его задача перевести радианы в градусы и если косинус равен 0 значению тангенса должно быть присвоено -100, но на практике выводит совсем другое, не могу понять в чём дело, если не трудно помогите
unit math;
interface
function tg(alfa : real):real;
implementation
function tg(alfa : real):real;
begin
if cos(alfa) = 0 then tg:=-100;
tg:=(sin(alfa)*180/pi)/(cos(alfa)*180/pi);
end;
end.
Не понял... Зачем радианы в градусы-то переводить? Может, наоборот, градусы в радианы? Что передается в качестве параметра функции Tg? Градусы или радианы? Функции Sin и Cos ожидают как раз угла в радианах, если что...
А зачем нужно вот это условие: if cos(alfa) = 0 then tg:=-100;
все равно потом: tg:=(sin(alfa)*180/pi)/(cos(alfa)*180/pi);
подправь: if cos(alfa) = 0 then tg:=-100 else tg:=(sin(alfa)*180/pi)/(cos(alfa)*180/pi);
ROCKMAN, еще раз - специально для тебя: не надо вообще ни на что делить, читай внимательно второй пост, и не давай вредных советов.
Вот, к примеру, зачем ты результат вычисления sin и cos умножаешь на (180/Pi)? В этом какой тайный смысл?
На сколько я знаю, пакскаль считает в радианах, а нужно чтобы после подключения модуля и вызыва функции он на экран выводил значение в градусах, а не радианах. и значение tg должно быть равно -100 в том случае если косинус равен 0
Ты на вопросы, заданные тебе НИКОГДА не отвечаешь? Тебя спросили, что передается в функцию Tg, радианы или градусы?
Добавлено через 4 мин.
И вообще, кто же сравнивает с нулем вещественные значения напрямую? Надо сравнивать отклонение от 0...
должна градусы передавать
Значит:
function tg(alfa : real):real;Что теперь не так?
const R2D = 180 / Pi;
begin
alfa := alfa / R2D; { Переводим градусы в радианы }
if abs(cos(alfa)) < 10E-5 then tg := -100
else tg := sin(alfa)/cos(alfa);
end;
...
{ Вызов: }
WriteLn(tg(90) :3 :3);
Спасибо большое, вот только 2 вопроса < 10E-5 это откуда взято? и почему по модулю?
Это очень маленькое число, 10 в минус пятой степени, если не ошибаюсь,
и abs(cos(alfa)) < 10E-5 значит, что если cos(alfa) попадает в эту погрешность, то условие будет выполняться, насать "=" можно тока когда работаешь с целочисленными типами (integer,...), а с вещественными это не катит, ибо у тебя это условие никогда не выполнится, это вроде бы происходит из-за разного представления цисел в памяти... Вот, но это не точно, пока кто-нить по опытней не подтвердит
ну в общем я всё подправил, и если чётко указать там 0, где 10Е-5 условие выполняется, так что работает на ура
ну, значит это я что-то напутал...