| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите с решением задачи с циклом while... |
| Автор: ZimAN 23.1.2008, 00:38 |
| Помогите пожалуйста. Вот такая задача: Даны действительные числа x, Е (x<>0, E > 0). Вычислить с точностью E: http://radikal.ru/F/i007.radikal.ru/0801/aa/f3a00c916c37.jpg.html Считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем E, - это и все последующие слагаемые можно уже не учитывать. Помогите пожалуйста, 2 дня мучаюсь, ничего не выходит... Заранее благодарен. |
| Автор: source777 23.1.2008, 00:56 | ||
А в чём проблема то?
|
| Автор: volvo877 23.1.2008, 01:08 |
В том, что во-первых, здесь - не Дельфи, а Паскаль... Переписывать все библиотеки тоже будешь, чтобы твоя программа хотя бы компилировалась? А во-вторых, ZimAN, не надо считать факториалы и степень каждый раз с начала и до конца - тысячу раз говорилось: ДОМНОЖАЕМ на очередной итерации текущий член на <что-то>... Вот выведи, что есть это самое <что-то>, а потом берись за реализацию... |
| Автор: ZimAN 23.1.2008, 15:53 | ||
вот что у меня выходит, знаю что это не правильно... помогите, исправьте пожалуйста мои ошибки... єто запускается, но Результат всегда равен 0. |
| Автор: source777 23.1.2008, 21:41 |
| ZimAN, а чем тебя мой код не устаивает? Убери {$APPTYPE CONSOLE} и будет тебе Паскаль, а не Delphi... Возитесь с этим Паскалем, как с писанной торбой, пора уж забыть о нём... |
| Автор: source777 23.1.2008, 23:53 | ||
разделил k+1 член ряда на k-ый... Кстати ещё лучше будет так:
|
| Автор: ZimAN 24.1.2008, 00:52 |
| спасибо за помощь, но меня интересует еще один вопрос: в условии задачи сказано, что "считать, что требуемая точность достигнута, если очередное слагаемое оказалось по модулю меньше, чем Е, - это и все последующие слагаемые можно уже не учитывать" . Но при перепроверке на листке бумаги и обнаружил , что программа не отбрасывает первое слагаемое , которое является меньшим чем Е.. В условии пишет ----- """ - это и все последующие не учитывать""", то есть если ввести Е=1 и Х=1, то в итоге результат Rez=1.5, а не 1. 0,5 , которое является меньшим чем Е(1) не отбрасывет ... как это исправить ? если что-то путаю, то извините.. |
| Автор: source777 24.1.2008, 01:06 |
| Мля, ZimAN, я для кого правильный код писал? что ты тупишь? |
| Автор: mmvds 24.1.2008, 08:55 | ||
Спокойнее, для начала тоже проверьте на бумажке, подставляя в исходную формулу. x=1 E=1 K=0 Первое слагаемое=1, сумма=1; 1 не меньше 1 (по условию именно < а не <=), значит считаем далее K=1 Второе слагаемое=0.5, сумма=1,5; 0,5<1, значит результат найден - 1,5 Что собственно и считает моя прога, у Вас source777, результат равен 1.
С каких пор 1<1 - истина? |
| Автор: mmvds 24.1.2008, 09:15 | ||
| А все, извиняюсь, еще не проснулся Если есть желание, переставь местами строчки R:=exp(2*k*ln(x))/(exp(k*ln(2))*Factorial(k)); и Rez:=Rez+R; и Rez:=1 замени на Rez:=0 Код source777 действительно правильнее, т.к. позволяет считать с большим К, затрачивая меньше вычислений, лучше использовать его.
Действительно |
| Автор: volvo877 24.1.2008, 14:38 |
Вот не устраивает, и все тут. Во-первых, ты когда исправляешь - хотя бы говорил об этом, а то втихую поправил и все тут, и мой пост как-бы вообще ни при чем, да? А во-вторых, если уж ты снизошел до ответов в разделе Паскаль, то будь добр поставить себе компилятор Паскаля (а не Дельфи в консольном режиме) и откомпилировать то, что ты привел. Получилось? Я тебе безо всякого компилятора скажу, что НЕТ. Тебя сюда что, кто-то под дулом автомата загнал? Не нравится - вообще не заходи в раздел, чего ты СЮДА-то явился, если пора забыть? Забудь уже тогда... |
| Автор: source777 24.1.2008, 21:01 | ||||||||
Хотя я думаю, что это:
|
| Автор: orthrus 25.1.2008, 04:48 | ||
Мой профиль->Отображение разделов->Там дальше наверное поймешь |