Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 244
от 07.11.2006, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 210, Экспертов: 46
В номере:Вопросов: 1, Ответов: 3


Вопрос № 60990: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, чайнику! Выполнил я простенькое задание по программированию (в приложении), однако, порой при вводе данных выдается Error 207: Invalid floating point operation, например при вводе таких данн...

Вопрос № 60.990
Здравствуйте, уважаемые эксперты!
Помогите, пожалуйста, чайнику! Выполнил я простенькое задание по программированию (в приложении), однако, порой при вводе данных выдается Error 207: Invalid floating point operation, например при вводе таких данных: 5,4,3,6. Насколько я понимаю, ошибка выдается из-за того, что exp(ln(...)/3) работает только с положительными числами, в связи с чем возникает вопрос: как можно обойти это ограничение. В принципе, формально я задание выполнил, но хотелось бы для себя знать - как это все должно работать.
Надеюсь, не будете ругать за ламерский вопрос... Большое спасибо!

Приложение:

Отправлен: 02.11.2006, 05:52
Вопрос задал: Mangoost (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Andronik
Здравствуйте, Mangoost!
Invalid floating point operation - это ошибка при обработке вещественных чисел. В данном случае (при вводе) просто наблюдается ошибка, когда пользователь вводит вещественное число с разделителем-точкой вместо запятой. И все.
Ну а если существует боязнь с экспонентой, то почему бы не взять ее модуль?
---------
Запрограммировать можно все... кроме собственного поведения
Ответ отправил: Andronik (статус: 1-ый класс)
Ответ отправлен: 02.11.2006, 05:58

Отвечает: sir henry
Здравствуйте, Mangoost!
Давайте сначала рассмотрим функции SIN() и COS().
В эти функции аргументом вводится угол в радианах, причем в документации к FreePascal специально предупреждается, что аргумент должен быть не более чем 263, иначе результатом функции будет полная фигня. Думаю, что в Turbo Pascal стоит то же самое ограничение. Отсюда вывод - переменные, которые Вы передаете аргументами в функции SIN() и COS() должны быть типа BYTE, либо, в крайнем случае, введите тип-диапазон:
Type
t: 0..263;
Тем самым Вы избежите на выходе программы результата который, как любил говорить Ленин: "По форме правильно, а по сути - издевательство!". :)
Далее. Ваше большое и неудобное для понимания вычислисляемое выражение необходимо разбить на два более мелких:
Var
v1, v2: single;
Begin
...
v1:=m*(sin(t)/cos(t))*t;
v2:=abs(c*sin(t));
...
End.
Согласитесь, так они выглядят куда понятнее. :)
И поскольку применяемые в них SIN/COS могут дать, при определенных аргументах, отрицательный результат, необходимо перед выполнением дальнейших действий проверять эти выражения на неотрицательность:
Begin
...
If(v1+v2)>0 Then
Begin
f:=exp(ln(v1+v2)/3);
z:=m * cos(b*t*sin(t)) + c;
...
End
Else
WriteLn('Ваши данные - это провокации меньшевиков и эсеров! Не буду с ними работать! Хочу обратно в Разлив! :)');
End.
Ответ отправил: sir henry (статус: Академик)
Россия, Красноярск
----
Ответ отправлен: 02.11.2006, 06:56

Отвечает: Wass
Здравствуйте, Mangoost!
exp(ln(...)/3) еще должен не быть равным нулю.
---------
"Шило в ж**** не помеха.мы студенты ВОЕНМЕХа !!!"
Ответ отправил: Wass (статус: 1-ый класс)
Ответ отправлен: 02.11.2006, 11:29


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное