1 Востаннє редагувалося lichmanmaksim (30.04.2014 00:05:09)

Тема: оператори циклу

№1 Ось зробив програму, але не знаю чи працює вона правильно. Перевірте будь ласка. Саме завдання звучить так: знайти суму n елементів ряду ( з використанням оператора for).   

program dsg;
const n=8; x=0.6;
var  s,a: real; fact:longint; 
i:integer;
begin 
s:=1;  fact:=1;  
for i:=1 to n do 
begin
fact:=fact*i;
a:=((sqr(n)+1)/fact)*(exp(n*ln(x/2)));
s:=s+a;
end;
writeln('s=',s:4:2);
readln;
end.

№2
Дайте якусь настанову що до створення цієї ж задачі, тільки потрібно знати масив сум S елементів ряду для кожного значення заданої послідовності x(з використанням оператора for). Кожну суму шукати з точністю до  e.

формула прикріплена в вигляді зображення

Post's attachments

Снимок4.JPG 15.97 kb, 337 downloads since 2014-04-29 

2

Re: оператори циклу

Ви самі рахувати пробували?

Прихований текст

3 Востаннє редагувалося lichmanmaksim (30.04.2014 00:21:58)

Re: оператори циклу

ні, а сайт цікавий, що Ви скинули

4

Re: оператори циклу

так хтось допоможе у вирішенні проблеми?

5 Востаннє редагувалося quez (02.05.2014 12:49:26)

Re: оператори циклу

А чому ви не знаєте, чи правильно ця програма працює? Ви її запускали?

У вас в коді фігурує експонента, якої немає у формулі. До речі, яка степінь у формулі?

По другому пункту — вам фактично потрібно зробити те саме, тільки кілька разів. Тому цикл for можна вкласти у інший for, який буде пробігати по масиву значень іксів.

6 Востаннє редагувалося Odin88 (02.05.2014 12:49:09)

Re: оператори циклу

quez написав:

А чому ви не знаєте, чи правильно ця програма працює? Ви її запускали?

У вас в коді фігурує експонента, якої немає у формулі. До речі, яка степінь у формулі?

Насправді, все з експонентою гаразд.В математичному аналізі часто використовується такий трюк,який допомагає позбутися невизначеності певного типу.Просто вираз a^n еквівалентний виразу exp(n*ln(a)).

Подякували: lichmanmaksim, Torbins2

7

Re: оператори циклу

Odin88 написав:
quez написав:

А чому ви не знаєте, чи правильно ця програма працює? Ви її запускали?

У вас в коді фігурує експонента, якої немає у формулі. До речі, яка степінь у формулі?

Насправді, все з експонентою гаразд.В математичному аналізі часто використовується такий трюк,який допомагає позбутися невизначеності певного типу.Просто вираз a^n еквівалентний виразу exp(n*ln(a)).

Про трюк знав, почав щось підозрювати, коли відправив повідомлення, але не міг перевірити.

Подякували: lichmanmaksim1

8

Re: оператори циклу

Судячи з формули, потрібно починати з нульового члена, а не з першого.

Подякували: lichmanmaksim1

9

Re: оператори циклу

quez написав:

Судячи з формули, потрібно починати з нульового члена, а не з першого.

Якщо проблема лише в цьому,тоді fact дорівнюватиме нулю :

var  s,a: real; fact:longint;
i:integer;
begin
s:=1;  fact:=1;
for i:=0 to n do
begin
fact:=fact*i;
a:=((sqr(n)+1)/fact)*(exp(n*ln(x/2)));
s:=s+a;
end;
Подякували: lichmanmaksim1

10

Re: оператори циклу

Odin88 написав:
quez написав:

Судячи з формули, потрібно починати з нульового члена, а не з першого.

Якщо проблема лише в цьому,тоді fact дорівнюватиме нулю

Мало чому що дорівнюватиме, якщо рахувати не за правильними формулами. За визначенням 0!=1.

Подякували: lichmanmaksim1

11 Востаннє редагувалося Odin88 (02.05.2014 13:08:34)

Re: оператори циклу

quez написав:
Odin88 написав:
quez написав:

Судячи з формули, потрібно починати з нульового члена, а не з першого.

Якщо проблема лише в цьому,тоді fact дорівнюватиме нулю

Мало чому що дорівнюватиме, якщо рахувати не за правильними формулами. За визначенням 0!=1.

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Подякували: lichmanmaksim1

12 Востаннє редагувалося quez (02.05.2014 13:11:42)

Re: оператори циклу

Odin88 написав:
quez написав:
Odin88 написав:

Якщо проблема лише в цьому,тоді fact дорівнюватиме нулю

Мало чому що дорівнюватиме, якщо рахувати не за правильними формулами. За визначенням 0!=1.

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Або просто додати в кінці одиничку.

Проблема не лише в цьому. Вольфрам нарахував 1.88, а код 2.01. Це ж не може бути похибкою округлень?

Подякували: lichmanmaksim1

13

Re: оператори циклу

quez написав:
Odin88 написав:
quez написав:

Мало чому що дорівнюватиме, якщо рахувати не за правильними формулами. За визначенням 0!=1.

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Або просто додати в кінці одиничку.

Або ж нічого не додавати :

s:=1;
Подякували: lichmanmaksim1

14 Востаннє редагувалося quez (02.05.2014 13:18:19)

Re: оператори циклу

Знайшов

Одиниця непотрібна, поки ще не зрозумів толком чому. Потрібно не рахувати вісім раз восьмий член, а таки знайти суму:

a:=((sqr(i)+1)/fact)*(exp(i*ln(x)));
Подякували: Odin88, lichmanmaksim2

15

Re: оператори циклу

Odin88 написав:
quez написав:
Odin88 написав:

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Або просто додати в кінці одиничку.

Або ж нічого не додавати :

s:=1;

Ось чому :)

Подякували: lichmanmaksim1

16 Востаннє редагувалося lichmanmaksim (02.05.2014 13:48:29)

Re: оператори циклу

quez написав:

Знайшов

Одиниця непотрібна, поки ще не зрозумів толком чому. Потрібно не рахувати вісім раз восьмий член, а таки знайти суму:

a:=((sqr(i)+1)/fact)*(exp(i*ln(x)));

чому ви в рівнянні підносите до i степеня якщо потрібно до n?

17

Re: оператори циклу

quez написав:
Odin88 написав:
quez написав:

Мало чому що дорівнюватиме, якщо рахувати не за правильними формулами. За визначенням 0!=1.

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Або просто додати в кінці одиничку.

Проблема не лише в цьому. Вольфрам нарахував 1.88, а код 2.01. Це ж не може бути похибкою округлень?

хочете сказати що відповідь  1.88 ? а то я зовсім заплутався..

18

Re: оператори циклу

lichmanmaksim написав:

Знайшов
Одиниця непотрібна, поки ще не зрозумів толком чому. Потрібно не рахувати вісім раз восьмий член, а таки знайти суму:

a:=((sqr(i)+1)/fact)*(exp(i*ln(x)));

чому ви в рівнянні підносите до i степеня якщо потрібно до n?

…якщо потрібно до n, яке змінюється від члена до члена, а не дорівнює 8 для всіх.

Подякували: lichmanmaksim, koala2

19

Re: оператори циклу

lichmanmaksim написав:
quez написав:
Odin88 написав:

Ви сам код бачили?
Звичайно, доцільніше зробити окрему функцію для обчислення факторіала або ж просто використати цикл розгалуження.

Або просто додати в кінці одиничку.

Проблема не лише в цьому. Вольфрам нарахував 1.88, а код 2.01. Це ж не може бути похибкою округлень?

хочете сказати що відповідь  1.88 ? а то я зовсім заплутався..

Якщо тут https://www.wolframalpha.com/input/?i=s … n%3D0+to+8 правильна формула, то так.

Подякували: lichmanmaksim1

20

Re: оператори циклу

Так,ніби,вже все правильно :

const n=8; x=0.6;
var  s,a: real; fact:longint;
i:integer;
begin
s:=1;  fact:=1;
for i:=1 to n do
begin
fact:=fact*i;
a:=((sqr(i)+1)/fact)*(exp(i*ln(x/2)));
s:=s+a;
end;
writeln('s=',s:4:2);
readln;
end.
Подякували: lichmanmaksim1