Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2010, 18:07   #1
Tomogochi
Пользователь
 
Аватар для Tomogochi
 
Регистрация: 08.06.2009
Сообщений: 15
По умолчанию Табулирование функции(Prolog)

Добрый день! Задача такова:написать программу,выполняющую табулирование функции.Программу я написала, она работет, но работает неправильно... То есть, у меня есть тесты правильные(от препода), так вот моя прога выдаёт результаты отличные от них. Не мог бы кто-нибудь проверить меня?Где моя ошибка?
Задание:


Моя программа:

domains
r=real
predicates
y(r,r,r)
w
goal
write("X0="),readreal(X0),nl,write( "Xk"),readreal(Xk),nl,write("H="),r eadreal(H),nl,y(X0,Xk,H).
clauses
w:-clearwindow,makewindow(25,26,203,"t abulirovanie",0,0,25,80).
y(X0,Xk,H):-X0>Xk+H/2,write("End").
y(X0,Xk,H):-
X0<Xk+H/2,X0>-0.000000001,X0<0.000000001,write("x =",X0," y=No"),nl,X=X0+H,y(X,Xk,H);
X0<Xk+H/2,X0>1.999999999,X0<2.000000001,wri te("x=",X0," y=No"),nl,X=X0+H,y(X,Xk,H);
X0<Xk+H/2,Z1=X0-2,Z2=X0/Z1,Z3=-X0/Z1,Z4=exp(Z2)-exp(Z3),Z5=exp(X0),Z6=Z5/Z4,write("x=",X0," y=",Z6),nl,X=X0+H,y(X,Xk,H).


Спасибо!
Tomogochi вне форума Ответить с цитированием
Старый 14.10.2011, 04:47   #2
mirakl
Новичок
Джуниор
 
Регистрация: 16.04.2010
Сообщений: 1
По умолчанию

формула синуса гиперболического расписана не верно... отсутствует деление на 2 "sh(x) = [exp(x) - exp(-x)]/2"
mirakl вне форума Ответить с цитированием
Старый 14.10.2011, 22:11   #3
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Код:
write("H="),r eadreal(H),
"readreal" пишется слитно(пробел лишний)

Код:
X0<Xk+H/2
эти условия(повторяется 3 раза) можно убрать, они тут лишние

Код:
w:-clearwindow,makewindow(25,26,203,"t abulirovanie",0,0,25,80).
вроде бы правило не используется - тоже можно убрать

Цитата:
То есть, у меня есть тесты правильные(от препода)
а у нас нет таких тестов, выкладывайте на форуме, тогда МБ и поможет кто-нибудь

Код:
X0>-0.000000001,X0<0.000000001
полагаю, вы тут с нулем сравниваете, но опасаетесь что ноль окажется не равен нулю(ну такое бывает...когда мусор в младших разрядах накапливается), у меня подозрения что в прологе этой проблемы не возникнет(хотя, не проверял). А ближе к теме...лучше не 0.0000(0)1 писать. а нечто типа (H/100) ну и (-H/100) во-первых это красивей чем константы такого чудного вида как у вас, а во вторых представьте что шаг меньше чем 0.000000001... хотя в данном случае, МБ и так сгодится

А еще красивей выделить это хозяйство в функцию сравнения с заданной точностью

Код:
Z2=X0/Z1,Z3=-X0/Z1
лучше:
Код:
Z2=X0/Z1,Z3=-Z2
А еще лучше вообще не использовать Z3, а просто, вместо него использовать -Z2

Последний раз редактировалось rrrFer; 14.10.2011 в 22:27.
rrrFer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Табулирование функции oksik_777 Паскаль, Turbo Pascal, PascalABC.NET 0 26.05.2010 19:27
Табулирование функции Dead Romantic Помощь студентам 2 25.12.2009 21:40
Табулирование функции vbas Общие вопросы .NET 1 17.12.2009 00:32
табулирование функции tonic Microsoft Office Excel 1 04.01.2008 00:38