Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Новички в программировании > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 23.09.2017, 16:57   #1
Max$$
Пользователь
 
Регистрация: 23.09.2017
Сообщений: 14
Репутация: 10
По умолчанию Паскаль.Почему условие не срабатывает?

Добрый день! Нужна ваша помощь. По л/р на Pascal написал прогу.
Код:

 x: real;
  y: real;
begin
  x := -10;
  while x <= 2 do
  begin
    if (x>=-8) and (x<0) then y:=cos(x);
    if x<-8 then y:=cos(x)/cos(x) + (power (x,0.1*x)); 
    if x>=0 then y:=(power(x,1/3))/sin(x) + x*x*x;
    if (x>-10) and (x<>-8.8) and (x<-7.9) then writeln ('x=',x,'  функция не определена') else writeln('x=',x,'  y=',y);
    x := x + 0.3;
  end;
end.

Вопрос такой: почему условие (x<>-8.8) не срабатывает? Когда х=-8.8 все равно выводится ФУНКЦИЯ НЕ ОПРЕДЕЛЕНА.
Мне самому не нравится, как выглядит эта строка, но я не нашел подходящее исключение, чтобы вместо вывода NaN на экран выводить текст. А он выводится в результате вычисления (power (x,0.1*x)) при отрицательном дробном Х.



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.09.2017 в 22:16.
Max$$ вне форума   Ответить с цитированием
Старый 23.09.2017, 22:21   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 22,792
Репутация: 5078
По умолчанию

вещественные числа НЕЛЬЗЯ сравнивать на совпадение.
(т.е. нельзя для них использовать операции =, <=, >= )
Это особенности машинного представления вещественных (дробных) чисел.

почему так - смотрите, например, в темах на форуме:
http://www.programmersforum.ru/showp...05&postcount=9
http://www.programmersforum.ru/showthread.php?t=307730
http://programmersforum.ru/showthread.php?p=1281382

вот, попробуйте заменить строчку на такую:
Код:

if (x>-10) and (abs(x+8.8)>0.0001) and (x<-7.9) 
   then writeln ('x=',x,'  функция не определена') else writeln('x=',x,'  y=',y);

только мне не понятно - зачем сначала вычислять, а потом оперделять, что функция не определена?
может быть, стоит делать наоборот - проверять область допустимых значений и только если функция определена, тогда вычислять её?

Последний раз редактировалось Serge_Bliznykov; 23.09.2017 в 22:26.
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 24.09.2017, 16:55   #3
Max$$
Пользователь
 
Регистрация: 23.09.2017
Сообщений: 14
Репутация: 10
По умолчанию

Спасибо. Условие сработало, но теперь при значении переменной -8,8 программа выводит ответ NaN, хотя калькулятор говорит, что значение есть (0,147521...). Не понимаю, в чём дело.

Значение -8,8 рассчитывается вот этой функцией:
if x<-8 then y:=cos(x)/cos(x) + (power (x,x/10));

Калькулятор её считает нормально, паскаль выводит NaN. Кто прав?
Max$$ вне форума   Ответить с цитированием
Старый 24.09.2017, 17:07   #4
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,021
Репутация: 741

skype: aleksandr.gryb
По умолчанию

offtop
Код:

cos(x)/cos(x)

__________________
Mailto: media.project@ukr.net
"спасибо" принимаются на webmoney: R676842461689, Z243088649038, U164738001305; AdvancedCash: U853633661253, E181662999107; ПриватБанк.UA
Aleksandr H. на форуме   Ответить с цитированием
Старый 24.09.2017, 17:24   #5
Max$$
Пользователь
 
Регистрация: 23.09.2017
Сообщений: 14
Репутация: 10
По умолчанию

согласен ) . Была формула такая дана.

if x<-8 then y:= 1 + (power (x,0.1*x));

Паскаль выдает:

x=-8.8 y=NaN
Max$$ вне форума   Ответить с цитированием
Старый 24.09.2017, 17:44   #6
Max$$
Пользователь
 
Регистрация: 23.09.2017
Сообщений: 14
Репутация: 10
По умолчанию

хотя -8.8^-0.88 считается на калькуляторе вполне: 0,14752147583696697713276877352338
Max$$ вне форума   Ответить с цитированием
Старый 24.09.2017, 18:53   #7
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 16,802
Репутация: 5909
По умолчанию

Возведение в действительную степень не определено для отрицательных чисел. А power в данном случае считает его действительным и вычисляет как Exp(-0.88 * Ln(-8.8)). Чему равен логарифм от -8.8? То-то и оно. А если показатель степени считать рациональным, то нет проблем - корень 100 степени из (-8.8)^88 ну и обратить - все ok, что и посчитал калькулятор. Умней чем паскаль на компьютере )) По идее калькулятор должен сдохнуть, если предложить посчитать -8.8^-0.87, разве что с комплексными умеет работать
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.09.2017 в 18:57.
Аватар на форуме   Ответить с цитированием
Старый 24.09.2017, 23:38   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 22,792
Репутация: 5078
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
По идее калькулятор должен сдохнуть, если предложить посчитать -8.8^-0.87
угу. но мелкософт так не думает.
windows 7. стандартный виндовый калькулятор спокойно считает -8.8^-0.87
причём, он выдаёт одинаковый ответ и для -8.8^-0.87 и для 8.8^-0.87
Serge_Bliznykov на форуме   Ответить с цитированием
Старый 25.09.2017, 00:52   #9
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,353
Репутация: 3624
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
По идее калькулятор должен сдохнуть, если предложить посчитать -8.8^-0.87, разве что с комплексными умеет работать
Если не ошибаюсь, операция возведения отрицательного числа в дробную степень не определена в принципе.
А логарифм от отрицательных чисел вполне вычисляем - но только на множестве комплексных чисел.
Если что, ОБЩАЯ ФОРМУЛА вычисления логарифма записывается так: Ln(z) = ln(|z|) + i*arg(z). У положительных действительных чисел аргумент равен нулю, поэтому мнимой части у результата нет. По такой формуле можно вычистить логарифм любого, отличного нуля, комплексного числа. Действительные числа также являются комплексными.

Но ни в одном из известных мне ЯП логарифм отрицательного числа нигде не давал комплексного результата - в лучшем случае - это NaN, в худшем - ошибка Invalid floating point operation.
Встроенный ЯП в MathCAD - исключение - он вычисляет логарифм на множестве комплексных чисел.

Последний раз редактировалось Вадим Мошев; 25.09.2017 в 00:58.
Вадим Мошев вне форума   Ответить с цитированием
Старый 25.09.2017, 16:42   #10
Max$$
Пользователь
 
Регистрация: 23.09.2017
Сообщений: 14
Репутация: 10
По умолчанию

Т.е. нет программного решения? Если есть, то как в программе описать, я не понял, извините...
Max$$ вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль! Как сделать условие: чем дальше планеты от солнца, тем медленнее они крутятся? Почему Луна немного косит? Jenee Помощь студентам 3 16.04.2017 10:09
Что-то не срабатывает в коде: Почему не происходит пропорциональное масштабирование DIV'а ne4Euusmvyo HTML и CSS 2 15.02.2017 21:37
Почему не срабатывает preg_replace? Karyuudo Помощь студентам 3 20.09.2015 02:16
Не срабатывает условие сравнения чисел. Solvinder Помощь студентам 1 28.04.2011 23:01
Условие не срабатывает segail Microsoft Office Excel 5 15.08.2010 15:10




16:11.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


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

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru