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

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

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

Автор: NTL 13.12.2006 21:22

Дано х -действительное. Составить программу для вычисления многочлена по схеме Горнера:
y1 = x^10 + 2*x^9 + 3*x^8+...+ 10*x + 11
y2 = 11*x^10 + 10*x^9 + 9*x^8+...+ 2*x + 1

Код
uses crt;
var  y2,y1,x,s:real;
       i,j:integer;
begin
clrscr;
writeln('x = ');read(x);
y1:=11;y2:=1;s:=1;
for i:=10 downto 1 do
begin
  for j:=1 to i do s:=s*x;

  y1:=y1+(10-j+1)*s
  y2:=y+(j+1)*s
end;

writeln('y1 = ',y:2:10);
writeln('y2 = ',y1:2:10);
readkey
end.


Ответ получается неразумный

Помогите плиз...
^ - есть степень

Автор: мисс_граффити 13.12.2006 21:49

что сразу бросилось в глаза:

begin
for j:=1 to i do s:=s*x;{<--действия в цикле...}

y1:=y1+(10-j+1)*s; {<--а вот это будет выполняться ПОСЛЕ цикла}
y2:=y+(j+1)*s;
end;

Автор: NTL 13.12.2006 22:04

Цитата(мисс_граффити @ 13.12.2006 17:49) *

что сразу бросилось в глаза:
begin
for j:=1 to i do s:=s*x;

y1:=y1+(10-j+1)*s; {<--действия в цикле...}
y2:=y+(j+1)*s; {<--а вот это будет выполняться ПОСЛЕ цикла}
end;


После цикла??? blink.gif После цикла по i, ты хочешь сказать?Хмм no1.gif Ты уверена?

Автор: мисс_граффити 13.12.2006 23:03

по j, разумеется, при чем здесь i?
или это так и задумано?...
тогда зачем используешь в формулах j?

кстати, в том виде, что ты выложил, оно не компилируется.

Автор: мисс_граффити 13.12.2006 23:16

вот так вроде работает...
проверила первую сумму на х=1 и х=2

uses crt;
var y2,y1,x,s:real;
i,j:integer;
begin
clrscr;
writeln('x = ');read(x);
y1:=11;y2:=1;s:=1;
for j:=1 to 10 do
begin
s:=s*x;
y1:=y1+(11-j)*s;
y2:=y2+(j+1)*s;
end;

writeln('y1 = ',y1:2:10);
writeln('y2 = ',y2:2:10);
readkey
end.

только это не схема Горнера, а прямое вычисление.

Автор: NTL 14.12.2006 2:01

Спасибо, все работает... cool.gif Кстати, почему у меня плюсы нельзя ставить? yes2.gif

Автор: мисс_граффити 14.12.2006 2:13

сообщений мало... 100 наберешь - тогда можно будет smile.gif

...но, повторюсь, это не схема Горнера.

Автор: NTL 14.12.2006 3:57

лишь бы для первых 20 чисел проходило. blum.gif

Автор: NTL 17.12.2006 20:52

Вот так будет правильнее

Код
uses crt;
var n:integer;
   a:array [0..25] of real;
   x,summa:real;
   i,e:integer;
   fr:integer;
begin
  clrscr;
  writeln('Input N');
  readln(n);
  writeln('Enter coefficient');
  for i:=n downto 0  do
     readln(a[i]);
  writeln('Input X');
  readln(x);
  summa:=a[n];
for e:=1 to n do summa:=summa*x+a[n-e];
  writeln(summa:3:5);
  readln;
end.

Автор: мисс_граффити 18.12.2006 20:23

да, это уже по схеме Горнера