IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Проблема с модулем
SkyRideR
сообщение 17.01.2008 23:18
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


Здраствуйте, вот модуль его задача перевести радианы в градусы и если косинус равен 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.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 17.01.2008 23:41
Сообщение #2


Гость






Не понял... Зачем радианы в градусы-то переводить? Может, наоборот, градусы в радианы? Что передается в качестве параметра функции Tg? Градусы или радианы? Функции Sin и Cos ожидают как раз угла в радианах, если что...
 К началу страницы 
+ Ответить 
ROCKMAN
сообщение 18.01.2008 13:17
Сообщение #3





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  -1  +


А зачем нужно вот это условие: 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);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 13:21
Сообщение #4


Гость






ROCKMAN, еще раз - специально для тебя: не надо вообще ни на что делить, читай внимательно второй пост, и не давай вредных советов.

Вот, к примеру, зачем ты результат вычисления sin и cos умножаешь на (180/Pi)? В этом какой тайный смысл?
 К началу страницы 
+ Ответить 
ROCKMAN
сообщение 18.01.2008 13:28
Сообщение #5





Группа: Пользователи
Сообщений: 6
Пол: Мужской

Репутация: -  -1  +


Цитата(volvo @ 18.01.2008 13:21) *

ROCKMAN, еще раз - специально для тебя: не надо вообще ни на что делить, читай внимательно второй пост, и не давай вредных советов.

Вот, к примеру, зачем ты результат вычисления sin и cos умножаешь на (180/Pi)? В этом какой тайный смысл?


Так надо же, чтобы значению тангенса было присвоено -100, SkyRideR так писал
хотя задача внатуре неверная

Сообщение отредактировано: ROCKMAN - 18.01.2008 13:29
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SkyRideR
сообщение 18.01.2008 17:57
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


На сколько я знаю, пакскаль считает в радианах, а нужно чтобы после подключения модуля и вызыва функции он на экран выводил значение в градусах, а не радианах. и значение tg должно быть равно -100 в том случае если косинус равен 0

Сообщение отредактировано: SkyRideR - 18.01.2008 18:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 18:32
Сообщение #7


Гость






Ты на вопросы, заданные тебе НИКОГДА не отвечаешь? Тебя спросили, что передается в функцию Tg, радианы или градусы?

Добавлено через 4 мин.
И вообще, кто же сравнивает с нулем вещественные значения напрямую? Надо сравнивать отклонение от 0...
 К началу страницы 
+ Ответить 
SkyRideR
сообщение 18.01.2008 18:37
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


должна градусы передавать
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 18:45
Сообщение #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 - 18.01.2008 18:45
 К началу страницы 
+ Ответить 
SkyRideR
сообщение 18.01.2008 18:57
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


Спасибо большое, вот только 2 вопроса < 10E-5 это откуда взято? и почему по модулю?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 18.01.2008 19:16
Сообщение #11


The matrix has me!!!
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Это очень маленькое число, 10 в минус пятой степени, если не ошибаюсь,
и abs(cos(alfa)) < 10E-5 значит, что если cos(alfa) попадает в эту погрешность, то условие будет выполняться, насать "=" можно тока когда работаешь с целочисленными типами (integer,...), а с вещественными это не катит, ибо у тебя это условие никогда не выполнится, это вроде бы происходит из-за разного представления цисел в памяти... Вот, но это не точно, пока кто-нить по опытней не подтвердит smile.gif


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SkyRideR
сообщение 18.01.2008 19:38
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


ну в общем я всё подправил, и если чётко указать там 0, где 10Е-5 условие выполняется, так что работает на ура good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Yevgeny
сообщение 18.01.2008 20:01
Сообщение #13


The matrix has me!!!
**

Группа: Пользователи
Сообщений: 74
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


ну, значит это я что-то напутал... smile.gif


--------------------
"Брать производную можно научить даже обезьяну" - мой препод по матану! :-)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 18.01.2008 20:40
Сообщение #14


Гость






Цитата
и если чётко указать там 0, где 10Е-5 условие выполняется
До поры до времени... На другой машине и/или при использовании другого компилятора получишь проблему, но если тебе нравится сначала сделать проблему, а потом ее решать - то Welcome... Я предпочитаю не давать поводов для таких ошибок, и использую сравнение погрешности...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 18:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"