![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
maximmax |
![]()
Сообщение
#1
|
|||
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
есть такое задание- Найти сумму не четных членов последовательности.... последовательность ((-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 тоже.....а сумму нет.... если не сложно помогите пожалуйста Сообщение отредактировано: klem4 - 4.11.2007 16:34 |
|||
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Значения 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)); { Обрати внимание на скобки в знаменателе }
Сообщение отредактировано: volvo - 4.11.2007 17:36 |
maximmax |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
я дубина еще в формуле ((-1)^k*p^k*cos^k(2*x))/k*(k-1) факториал забыл
надо ((-1)^k*p^k*cos^k(2*x))/k*(k-1)! и как прекратить обращение к переменной к??? я....того.... тупо по методичке делал изменяя под своё условие что как....а до этого в паскале и еще где нить не писал ничего Сообщение отредактировано: maximmax - 4.11.2007 18:02 |
Гость |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата Потому что по окончании работы цикла естественным путем ее значение не определено. Там может быть и 1 и 0 и 10000. по идее, там должно быть n+1. |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
С чего бы? Доки читать срочно... Или ссылку привести?
|
maximmax |
![]()
Сообщение
#6
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: ![]() ![]() ![]() |
вот че то исправил....
считает правильно только первый и второй член последовательности третий и четвертый нет(((( сумму тоже не считает и знак в члене не верный((( 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.
а как поменять это непонимаю |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 3:04 |