ПОЛИНОМЫ ЭРМИТА (рекурсия), ПОМОГИТЕ ПЛИЗЗЗ ЗАДАЧУ РЕШИТЬ... |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
ПОЛИНОМЫ ЭРМИТА (рекурсия), ПОМОГИТЕ ПЛИЗЗЗ ЗАДАЧУ РЕШИТЬ... |
FROL*[night_sniper] |
Сообщение
#1
|
Гость |
Задача такая:
Написать программу для вычисления n-ого полинома эрмита в заданной точке X. Исходные данные - порядок полинома и значение X. Hn(x) удовлетворяют рекуррентной формуле (где Hn(x) - полином n-ого порядка в точке x): Hn+1(x) = 2*x*Hn(x)-2*n*Hn-1 (x) H0(x) = 1, H1(x) = 2*x. нужно рекурсивное решение. в моём поимании рекурсии (видимо ошибочно) функция просто вызывает сама себя (ну там стэк при этом переполняется и всё такое...)... так вот, в моём исполнении при нахождении полинома более чем девятого порядка, эта сволочь пишет об ошибке с плавающей точкой... не знаю чё и делать... заранее благодарен))) |
volvo |
Сообщение
#2
|
Гость |
FROL*[night_sniper], так ты решил задачу? Чего же не присоединил файл? Может быть у тебя в мелочи какой недочет? Зачем же еще раз велосипед-то изобретать
Покажи, как решаешь. Если нужно - исправим... А вообще, стандартными средствами и факториал 14 тоже переполнение вызывает, приходится использовать спец. алгоритмы... |
Гость |
Сообщение
#3
|
Гость |
function pol(n:integer; x:real):real; вроде как-то так... хотя когда в универе делал до 9-ого порядка работало, а типерь ваапсче никак =(( |
volvo |
Сообщение
#4
|
Гость |
Во-первых: зациклить рекурсию не боишься?
function pol(n:integer; x:real):real; Ты передашь то же самое N, с которым вошел в рекурсию, зацикливаешься, и получаешь гарантированно переполнение стека. Ну и второе... Я не знаю, с какими значениями X ты запускаешь программу, но все-таки используй более емкие сопроцессорные типы, например Double... Я бы делал так: {$N+} { Для подключения сопроцессора } |
FROL*[night_sniper] |
Сообщение
#5
|
Гость |
Насчёт подключения сопроцессора - ругается, что неверная директива...
Рекурсия выполняется 7 раз, потом пишет, что неверная операция при операции с плавающей точкой(((( з.ы. X маленькие ставлю - не больше 10. |
volvo |
Сообщение
#6
|
Гость |
М-да...
Только что проверил на Turbo-Pascal. Действительно вылетает. Уже при n = 8... Что характерно - на FPC этой проблемы нет... Значит, ближе к теме: поскольку ошибка №207, то наиболее вероятная ее причина - "Переполнение стека сопроцессора". Избавляться будем, "разгружая" стек сопроцессора, то есть, работать придется с рекурсивной процедурой, а потом "завернем" эту процедуру в функцию. Смотри: procedure pol(n: integer; x: real; var r: real);При n = 19 все отработало даже при бОльших значениях X Этот вариант тебя устроит? |
FROL*[night_sniper] |
Сообщение
#7
|
Гость |
Ага))) Спасибо тебе ОГРОМНОЕ)))
|
how long does plaquenil take to |
Сообщение
#8
|
Гость |
Clomid Prix Forum
|
Текстовая версия | 14.10.2024 12:47 |