IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Переполнение, Цикл...сумма элементов
Zundell
сообщение 20.01.2007 17:44
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Ниче не понимаю пачиму ошибку переполнения выдает(((
Пасмарите плиз:
Используя оператор цикла, найти сумму элементов!При определении суммы членов ряда использовать реккурентную формулу.
Найти сумму ряда с точностью Е=10^-3 , общий член которого равен An=n!/(3n^n).
Вот текст моей программки:
CONST
i=0.1E-2;
var
n: integer;
AN, summa:extended;
begin
summa:=0; n:= 1; AN:= 1/2;
while AN>i do
begin
summa:= summa + AN; n:=n+1;
AN:= An*(ln(n+1)*((n+1)/n));
end;
writeln ( 'summa=', summa:2:4);
Writeln ('4islo=', AN:2:4);
readln;
end.




Рекурентку я посчитал,она представленна в тексте программы.Очень нужна помощь.Заранее очень благодарен
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 15)
arhimag
сообщение 20.01.2007 19:53
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


Я не вникал, но переполнение возникает из-за того что AN изначально больше i и оно не убывает, а даже шустро возрастает во время исполнения программы.

Добавлено:
я не считал сумму этого ряда, но эта программа должна работать правильно:
Код

CONST
i=0.1E-2;
var
n: integer;
AN, summa:extended;
function factorial(n:integer):real;
var i: integer;
    f: real;
begin
     f:=1;
     for i:=1 to n do
         f:=f*i;
     factorial:=f;
end;
function power(a,b : real):real;
begin
     power:=exp(b*ln(a));
end;
begin
summa:=0; n:= 1; AN:= 1/2;
while AN>i do
begin
AN:=factorial(n)/3*power(n,n);
summa:= summa + AN; n:=n+1;
end;
writeln ( 'summa=', summa:2:4);
Writeln ('4islo=', AN:2:4);
readln;
end.


Сообщение отредактировано: arhimag - 20.01.2007 19:59


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.01.2007 19:57
Сообщение #3


Гость






arhimag, а прочтение условий что, НЕ для тебя?
Цитата
При определении суммы членов ряда использовать реккурентную формулу.
А объясни-ка мне, что такое рекуррентная формула во-первых, и где она у тебя в программе - во вторых...
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 20.01.2007 19:57
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Ты правда считаешь, что 3n^n и (3n)^n - это одно и то же?
Цитата
Я не вникал,

Заметно.
Цитата
но переполнение возникает из-за того что AN изначально больше i и оно не убывает, а даже шустро возрастает во время исполнения программы.

Правда?
Приближенные значения:
0.333
0.167
0.074
0.031
0.013
...

Сообщение отредактировано: мисс_граффити - 20.01.2007 20:04


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
arhimag
сообщение 20.01.2007 19:59
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


Про рекуррентную формулу я забыл sad.gif
а по поводу возражения мисс граффити, то я думал что там (3n)^n, но этот глюк исправлен.


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 20.01.2007 20:10
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Рекуррентная формула:
A(n+1)=(n+1)!/(3(n+1)^(n+1))=n!*(n+1)/(3*(n+1)^n*(n+1))=n!/(3(n+1)^n)
A(n)=n!/(3n^n)
A(n+1)=A(n)*(n^n)/((n+1)^n)=A(n)*(n/(n+1))^n
У меня так получилось...
а откуда взялось
Цитата
AN:= An*(ln(n+1)*((n+1)/n));
?
Это ты так пытался в степень возвести? Или я ошиблась при выводе формулы?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
arhimag
сообщение 20.01.2007 20:17
Сообщение #7


Знаток
****

Группа: Пользователи
Сообщений: 424
Пол: Мужской

Репутация: -  2  +


Код
CONST
i=0.1E-2;
var
n: integer;
AN, summa:extended;
function power(a,b : real):real;
begin
     power:=exp(b*ln(a));
end;
begin
summa:=0; n:= 1; AN:= 1/3;
while AN>i do
begin
summa:= summa + AN;
AN:=AN*power(n/(n+1),n);
n:=n+1;
end;
writeln ( 'summa=', summa:2:4);
Writeln ('4islo=', AN:2:4);
readln;
end.

Вольво, найдешь ошибки, скажи, исправлю.

Добавлено:
Только заметил, с формулой мисс граффити опередила

Сообщение отредактировано: arhimag - 20.01.2007 20:17


--------------------
Чего хочет женщина – того хочет Бог
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 20.01.2007 22:24
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


мисс_граффити

у меня рекурентка получилась An*(n+1)^(n+1)/n
может я тоже чтот неправильно посчитал?

Добавлено:
тьфу...т.е An*((n+1)/n)^(n+1)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 20.01.2007 22:46
Сообщение #9


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


напиши, как выводил


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 20.01.2007 23:45
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Мисс Графити,извиняюсь..я у себя ошибку нашел,немного не так считал...ты правильно вывела...но вот только если писать A(n)*(n/(n+1))^n,то Паскаль всеравно перевыполнение выдает,но вот если An*((ln(n)*n)/(ln(n)*(n+1))),то все нормс считает!Спасибо всем за помощь...все дело в рекуррентке было.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 21.01.2007 0:37
Сообщение #11


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


считает-то нормально, только совсем другое smile.gif))


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 21.01.2007 2:23
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Почему???там ведь при выводе рекуррентки и в числителе в степени N,так и в знаменателе N!почему ошибка то?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 21.01.2007 2:28
Сообщение #13


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Ты думаешь, что ln(n)*n=n^n?
А почему?
Возьмем для примера число е (чтобы проще было считать).
ln(e)*e=1*e=e
Это совсем не то, что e^e, правда?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 21.01.2007 14:15
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


хм...а вот так прральна буит?An*(exp(ln(n)*n))/(exp(ln(n)*(n+1))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 21.01.2007 14:37
Сообщение #15


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


да... но так ты приходишь к варианту arhimagа.
причем у него переполнение будет возникать с меньшей степенью вероятности: он сначала считает n/(n+1), а потом это число (заведомо меньше 1) возводит в степень. ты же по отдельности считаешь n^n и n^(n+1) и только после этого делишь. вот переполнение и вылезает.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Zundell
сообщение 21.01.2007 15:15
Сообщение #16


Пионер
**

Группа: Пользователи
Сообщений: 65
Пол: Мужской

Репутация: -  0  +


Я щя проверил,мой вариант...переполнения не возникает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 3:16
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"