Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Обработка числовой последовательности-паскаль

Автор: maximmax 4.11.2007 20:30

М
Теги !



есть такое задание- Найти сумму не четных членов последовательности....
последовательность ((-1)^k*p^k*cos^k(2*x))/k*(k-1)
где x=max(a,b)+min(c,d) p=p0+(i-1)*h i=1,...,m
с клавы вводим значения- a=3.5 b=2.4 c=6.1 d=-3.5 p0=1 h=0.2 m=6и длинна n=4

саму прогу я написал так-


program Rekur2 (input, output);
uses crt;
Var a, b, x0, h, p, x, max, min, ak, s, c, d, p0: real;
n, m, l, g, i, k: integer;
begin
clrscr;
writeln('ВВЕДИТЕ a, b, c, d, p0, h, m, n');
read(a, b, c, d, p0, h, m, n);
if a>b
then
max:=a
else
max:=b;
if c>d
then
min:=d
else
min:=c;
{perebor X}
for i:=1 to m do
begin
x:=max+min;
ak:=p*cos(2*x);
p:=p0+(i-1)*h;
writeln('p=',p:6:(2*n-1));
write('a1=', ak:6:(2*n-1));
s:=ak;
{vi4islenie po rekkurentnoi formule}
for k:=2 to n do
begin
ak:=-ak*p*cos(2*x)/k*(k-1);
write('a',k,'=',ak:6:(2*n-1));
end;
if k = (2*n-1)
then
s:=s+ak;
writeln;
writeln('s=',s:6:(2*n-1),' при x=',x:6:(2*n-1));
readkey
end;
end.
end.


Значения X считает нормально, p тоже.....а сумму нет....
если не сложно помогите пожалуйста

Автор: volvo 4.11.2007 21:35

Цитата
Значения X считает нормально, p тоже.....а сумму нет....
Естественно... У тебя по крайней мере две ошибки... Первая:

for k:=2 to n do
begin
ak:=-ak*p*cos(2*x)/k*(k-1);
write('a',k,'=',ak:6:(2*n-1));
end;

{ Начиная вот отсюда, ты не должен обращаться к переменной K !!! }


Потому что по окончании работы цикла естественным путем ее значение не определено. Там может быть и 1 и 0 и 10000.

Второе...
по формуле:
((-1)^k*p^k*cos^k(2*x))/k*(k-1)
ты же считаешь:
for k:=2 to n do
begin
ak:=-ak*p*cos(2*x)/k*(k-1);
...
end;

Это все прекрасно и удивительно, но надо вот так:

ak:=-ak*p*cos(2*x)/(k*(k-1)); { Обрати внимание на скобки в знаменателе }

Автор: maximmax 4.11.2007 21:58

я дубина еще в формуле ((-1)^k*p^k*cos^k(2*x))/k*(k-1) факториал забыл
надо ((-1)^k*p^k*cos^k(2*x))/k*(k-1)!
и как прекратить обращение к переменной к???
я....того.... тупо по методичке делал изменяя под своё условие что как....а до этого в паскале и еще где нить не писал ничего

Автор: Гость 5.11.2007 20:05

Цитата
Потому что по окончании работы цикла естественным путем ее значение не определено. Там может быть и 1 и 0 и 10000.

по идее, там должно быть n+1.

Автор: volvo 5.11.2007 20:07

С чего бы? Доки читать срочно... Или ссылку привести?

Автор: maximmax 6.11.2007 1:11

вот че то исправил....
считает правильно только первый и второй член последовательности третий и четвертый нет((((
сумму тоже не считает и знак в члене не верный(((
program Rekur2 (input, output);

uses crt;
Var a, b, x0, h, p, x, max, min, ak, s, c, d, p0: real;
n, m, l, g, i, k: integer;
begin
clrscr;
writeln('VVEDITE a, b, c, d, p0, h, m, n');
read(a, b, c, d, p0, h, m, n);
if a>b
then
max:=a
else
max:=b;
if c>d
then
min:=d
else
min:=c;
{perebor X}
for i:=1 to m do
begin
x:=max+min;
p:=p0+(i-1)*h;
ak:=p*cos(2*x);
writeln('p=',p:6:(2*n-1));
write('a1=', ak:6:(2*n-1));
s:=ak;
{vi4islenie po rekkurentnoi formule}
for k:=2 to n do
begin
l:=1;
l:=l*(k-1);
ak:=-ak*p*cos(2*x)/(k*l);
write('a',k,'=',ak:6:(2*n-1));
end;
if k = (2*n-1)
then
s:=s+ak;
writeln;
writeln('s=',s:6:(2*n-1),' pri x=',x:6:(2*n-1));
readkey
end;
end.
end.



а как поменять это непонимаю