Deather Опубликовано 12 декабря, 2006 Жалоба Поделиться Опубликовано 12 декабря, 2006 Как ни странно, прога работает, но при изменении параметров ввода результата никакого. Код: uses crt; var e,a,x:real; n:integer; begin clrscr; e:=0.001; n:=1; x:=0.45; writeln ('Obchislennya znachennya sumi ryadu'); if abs(a)<=e then begin a:=ln(n+1)*exp(-1)*((ln(2*n)*exp(x))/((2*n)*(2*n-1))); n:=n+1; end; writeln ('Znachennya sumi z zadanou tochnistyu ',e:5:3,' = ',a:5:5); writeln ('Pidsumovano ',n,' elementiv ryadu'); readln; end. Условие: вычислить сумму ряда с точностью e (эпсилон). Под приближенными значениями суммы ряда с точностью е подразумевается сумма тех додатков, для которых выполняется условие |An|>e Формулу вклеить не могу, пишу словами: Сумма от n=1 до бесконечности додатков (-1) в степени (n+1)*(x в степени 2n/(2n*(2n-1))), где: х=0,45 Спасибо всем заранее. Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 13 декабря, 2006 Жалоба Поделиться Опубликовано 13 декабря, 2006 (изменено) Deather: Как ни странно, прога работаетРаботать-то она работает :) . Работающую прогу написать несложно. Сложно написать прогу, которая работает правильно, а делающую это эффективно - сложнее в квадрате. Но вернемся к нашим баранам. if abs(a)<=e then ... Значит, при первом запуске программы проверяем значение a, которое нам даровали боги. Никто его не задавал. Поэтому при изменении параметров ввода результата никакого.При повторных запусках программа ничего вычислять не будет, поскольку значение a, отменяющее вычисления по формуле, будет даровано уже предыдущим запуском программы. Ну, а дальше при первом запуске программы что-то, конечно, вычисляется, но совсем не то. Формула для члена ряда неправильно записана (правильно, ограничиваясь положительными значениями x, было бы a:=(2*(n mod 2)-1)*exp(2*n*ln(x))/(2*n*(2*n-1)) ), кроме того, цикла в программе нет, значит, вычисляться будет не сумма ряда, а только один член ряда. P.S. Да и прямое вычисление членов ряда по исходной формуле неэкономично, лучше использовать рекуррентный метод - вычисление каждого члена ряда через предыдущий, это резко сокращает объем вычислений, подробнее в топике Вычисление значения суммы членов бесконечного ряда. Изменено 13 декабря, 2006 пользователем Тролль Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти