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.
![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
SkyRideR |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здраствуйте, вот модуль его задача перевести радианы в градусы и если косинус равен 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.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Не понял... Зачем радианы в градусы-то переводить? Может, наоборот, градусы в радианы? Что передается в качестве параметра функции Tg? Градусы или радианы? Функции Sin и Cos ожидают как раз угла в радианах, если что...
|
ROCKMAN |
![]()
Сообщение
#3
|
![]() Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
А зачем нужно вот это условие: 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); |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
ROCKMAN, еще раз - специально для тебя: не надо вообще ни на что делить, читай внимательно второй пост, и не давай вредных советов.
Вот, к примеру, зачем ты результат вычисления sin и cos умножаешь на (180/Pi)? В этом какой тайный смысл? |
ROCKMAN |
![]()
Сообщение
#5
|
![]() Группа: Пользователи Сообщений: 6 Пол: Мужской Репутация: ![]() ![]() ![]() |
ROCKMAN, еще раз - специально для тебя: не надо вообще ни на что делить, читай внимательно второй пост, и не давай вредных советов. Вот, к примеру, зачем ты результат вычисления sin и cos умножаешь на (180/Pi)? В этом какой тайный смысл? Так надо же, чтобы значению тангенса было присвоено -100, SkyRideR так писал хотя задача внатуре неверная Сообщение отредактировано: ROCKMAN - |
SkyRideR |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
На сколько я знаю, пакскаль считает в радианах, а нужно чтобы после подключения модуля и вызыва функции он на экран выводил значение в градусах, а не радианах. и значение tg должно быть равно -100 в том случае если косинус равен 0
Сообщение отредактировано: SkyRideR - |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ты на вопросы, заданные тебе НИКОГДА не отвечаешь? Тебя спросили, что передается в функцию Tg, радианы или градусы?
Добавлено через 4 мин. И вообще, кто же сравнивает с нулем вещественные значения напрямую? Надо сравнивать отклонение от 0... |
SkyRideR |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
должна градусы передавать
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Значит:
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);
Что теперь не так?Сообщение отредактировано: volvo - |
SkyRideR |
![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо большое, вот только 2 вопроса < 10E-5 это откуда взято? и почему по модулю?
|
Yevgeny |
![]()
Сообщение
#11
|
![]() The matrix has me!!! ![]() ![]() Группа: Пользователи Сообщений: 74 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Это очень маленькое число, 10 в минус пятой степени, если не ошибаюсь,
и abs(cos(alfa)) < 10E-5 значит, что если cos(alfa) попадает в эту погрешность, то условие будет выполняться, насать "=" можно тока когда работаешь с целочисленными типами (integer,...), а с вещественными это не катит, ибо у тебя это условие никогда не выполнится, это вроде бы происходит из-за разного представления цисел в памяти... Вот, но это не точно, пока кто-нить по опытней не подтвердит ![]() -------------------- "Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
|
SkyRideR |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 15 Пол: Мужской Репутация: ![]() ![]() ![]() |
ну в общем я всё подправил, и если чётко указать там 0, где 10Е-5 условие выполняется, так что работает на ура
![]() |
Yevgeny |
![]()
Сообщение
#13
|
![]() The matrix has me!!! ![]() ![]() Группа: Пользователи Сообщений: 74 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
ну, значит это я что-то напутал...
![]() -------------------- "Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
|
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата и если чётко указать там 0, где 10Е-5 условие выполняется До поры до времени... На другой машине и/или при использовании другого компилятора получишь проблему, но если тебе нравится сначала сделать проблему, а потом ее решать - то Welcome... Я предпочитаю не давать поводов для таких ошибок, и использую сравнение погрешности... |
![]() ![]() |
![]() |
Текстовая версия | 21.04.2025 20:00 |