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

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

Форум «Всё о Паскале» _ Задачи _ итерационный цикл

Автор: -олег- 9.01.2007 23:43

помогите найти ошибку

Код

program c;
var N:integer; YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN:=YN1;YN1:=YN2;
N:=1;
repeat
N:=N+1;YN:=0.352*YN1+ cos(1.57 + YN2)
until ABS (YN - YN1)<E;
writeln ('predel ',YN:12:8)
end.

Автор: мисс_граффити 9.01.2007 23:47

 YN:=YN1;

а чему равно YN1?

Автор: Гость 9.01.2007 23:55

YN:=Y(n-1); это вписать?

Автор: мисс_граффити 10.01.2007 0:05

еще б знать, что такое Y и что должна делать программа... совсем круто было бы

Автор: Гость 10.01.2007 0:23

Код
program c;
var N:integer; Y,YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN:=YN1;
YN1:=Yn-1;
YN1:=YN2;

N:=1;
repeat
N:=N+1;YN:=0.352*YN1+ cos(1.57 + YN2)
until ABS (YN - YN1)<E;
writeln ('predel ',YN:12:8)
end.

вычислить предел последовательности .но результат один и тот же выходит

Автор: мисс_граффити 10.01.2007 1:21

ну естественно!!!
вот в этом месте чему у тебя равен YN1?

YN:=YN1;

Что ты пытаешься записать в YN?
С высокой степенью вероятности 0, хотя не факт.

Автор: Гость 10.01.2007 1:43

Код
program c;
var N:integer; Y,YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN1:=Yn-1;
YN2:=YN-2;
N:=1;
repeat
N:=N+1;YN:=0.352*YN1+ cos(1.57 + YN2)
until ABS (YN - YN1)<E;
writeln ('predel ',YN:12:8)
end.


если тока вот так

Автор: Malice 10.01.2007 3:27

Сдается мне ты вот такое хотел изобразить:

program c;
var N:integer; Y,YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN1:=0; yn:=0;
repeat
YN2:=YN1;
YN1:=YN;
YN:=0.352*YN1+ cos(1.57 + YN2);
until ABS (YN - YN1)<E;
writeln ('predel ',Yn:12:8)
end.

Но если просят условие, трудно ответить ?

Автор: Archon 10.01.2007 3:29

lol.gif Извини, но приведи задание, а?

Автор: Гость 10.01.2007 3:50

задание привел надо выщитать предел YN:=0.352*YN1+ cos(1.57 + YN2);
ну запутался малость dry.gif

Автор: Гость 10.01.2007 3:56

Код
program c;
var N:integer; Y,YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN1:=0; yn:=0;
repeat
YN2:=YN1;
YN1:=YN;
YN:=0.352*YN1+ cos(1.57 + YN2);
until ABS (YN - YN1)<E;
writeln ('predel ',Yn:12:8)
end.

это неправильно!
результат один и тотже

Автор: мисс_граффити 10.01.2007 4:03

blink.gif
это какой-то вычислительный рекурсивный метод?
а как ты определяешь, что ответ неправильный?
что должно получиться?

Автор: Гость 10.01.2007 4:06

ээээ вводиш разные е результат разный
или так должно быть?

Автор: Гость 10.01.2007 4:07

результат одинаковый всмысле

Автор: Archon 10.01.2007 4:13

E - это точность. Чем меньше E, тем результат точнее.

Цитата
это какой-то вычислительный рекурсивный метод?
Это сходящаяся рекурентная последовательность (ряд).

Автор: Гость 10.01.2007 4:15

так чо с самого начало моя прога выдавала првильный результат ????

Автор: Archon 10.01.2007 4:23

Нет. С самого начала твоя прога вязла в бесконечном цикле.

Автор: Гость 10.01.2007 4:32

Код
program c;
var N:integer; Y,YN,YN1,YN2,e:real;
begin
writeln('vvedite e');
readln (e);
YN1:=0; yn:=0;
repeat
YN2:=YN1;
YN1:=YN;
YN:=0.352*YN1+ cos(1.57 + YN2);
until ABS (YN - YN1)<E;
writeln ('predel ',Yn:12:8)
end.

а это правильно хоть?

Автор: Гость 10.01.2007 20:59

ктонить знает как посчитать глубину рекуретной формулы? huh.gif

Код
YN:=0.352*YN1+ cos(1.57 + YN2);

Автор: Гость 10.01.2007 21:54

обясните хоть что такое глубина рекурентной формулы