Помощь - Поиск - Пользователи - Календарь
Полная версия: Метод Горнера
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
NTL
Дано х -действительное. Составить программу для вычисления многочлена по схеме Горнера:
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.


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

Помогите плиз...
^ - есть степень
мисс_граффити
что сразу бросилось в глаза:
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 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 Ты уверена?
мисс_граффити
по j, разумеется, при чем здесь i?
или это так и задумано?...
тогда зачем используешь в формулах j?

кстати, в том виде, что ты выложил, оно не компилируется.
мисс_граффити
вот так вроде работает...
проверила первую сумму на х=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
Спасибо, все работает... cool.gif Кстати, почему у меня плюсы нельзя ставить? yes2.gif
мисс_граффити
сообщений мало... 100 наберешь - тогда можно будет smile.gif

...но, повторюсь, это не схема Горнера.
NTL
лишь бы для первых 20 чисел проходило. blum.gif
NTL
Вот так будет правильнее
Код
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.
мисс_граффити
да, это уже по схеме Горнера
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.