Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2007, 22:10   #1
dido171
 
Регистрация: 12.11.2007
Сообщений: 5
По умолчанию Паскаль. Схема горнора, многочлен.

Пожалуйста, помогите!
Дополнить алгоритм вычисления значения многочлена в заданной точке по схеме горнера вычислением значения его производной в той же точке.
Решение. Добавление нового коэффициента соответствует переходу от многочлена Р(х) к многочлену Р(х)*х + с. Его производная в той же точке равна Р'(х)*х + Р(х). Это решение обладает забавным свойством: не надо знать заранее степень многочена.
dido171 вне форума Ответить с цитированием
Старый 14.11.2007, 14:26   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Если вам нужно внести изменение в программу, то хотелось бы ее увидеть. Код в студию...
_Dmitry вне форума Ответить с цитированием
Старый 14.11.2007, 21:15   #3
dido171
 
Регистрация: 12.11.2007
Сообщений: 5
По умолчанию

дело в том, что я не знаю как вообще подступить к решению...так что кода нет(..извините
dido171 вне форума Ответить с цитированием
Старый 14.11.2007, 21:30   #4
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Дан полином степени n: P(x)=a0*x^n+a1*x^(n-1)+a2*x^(n-2)+...+an
вычислить его значение при x=s по схеме Горнера:
b0=a0
b1=a1+b0*s
b2=a2+b1*s
b3=a3+b2*s
.....
bn=an+b(n-1)*s
в результате P(s)=bn
_Dmitry вне форума Ответить с цитированием
Старый 14.11.2007, 21:38   #5
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Код будет таким
Код:
b0:=a[0];
for i:=1 to n do
  begin
    b:=a[i]+b0*s;
    b0:=b;
  end;
А про производную можно подробнее
_Dmitry вне форума Ответить с цитированием
Старый 15.11.2007, 10:16   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Вот окончательное решение с полиномом и его производной:
Код:
uses crt;
const n_max = 50;
var
  i,n: integer;
  b0,b,c0,c,x: real;
  a: array[0..n_max] of real;
begin
  clrscr;
  write('n = '); readln(n);
  write('x = '); readln(x);
  for i:=0 to n do
    begin
      write('a[',i,'] = '); readln(a[i]);
    end;
  b0:=a[0]; c0:=(n+1)*a[0];
  for i:=1 to n do
    begin
      b:=a[i]+b0*x;
      c:=(n+1-i)*a[i]+c0*x;
      b0:=b; c0:=c;
    end;
  c:=(c-b)/x;
  writeln;
  writeln('P =',b:1:6);
  writeln('P''=',c:1:6);
  readln;
end.
Здесь n - степень полинома, x - координата точки в которой его считаем,
a[0..n] - коэффициенты полинома, a[0] у x^n, a[n] - свободный член,
b - значение полинома в точке, c - его производная.
_Dmitry вне форума Ответить с цитированием
Старый 15.11.2007, 15:16   #7
dido171
 
Регистрация: 12.11.2007
Сообщений: 5
По умолчанию

спасибо большое!!! Ты даже и не представляешь, как ты меня выручил!!!!
dido171 вне форума Ответить с цитированием
Старый 30.05.2008, 14:08   #8
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Это все возможное производные?
file вне форума Ответить с цитированием
Старый 30.05.2008, 14:18   #9
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Блок-схема правельная? Помогите доделать.
Изображения
Тип файла: jpg blok-shema.jpg (11.6 Кб, 233 просмотров)
file вне форума Ответить с цитированием
Старый 31.05.2008, 11:28   #10
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Процедура считает значение полинома и все его производные
Код:
procedure Polinom(n:integer; x:double; a:array of double; var p:array of double);
var
  i,j,k,m: integer;
begin
  p[0]:=a[n];
  for i:=1 to n do p[i]:=p[i-1]*(n+1-i);
  for i:=n-1 downto 0 do
    begin
      p[0]:=a[i]+p[0]*x;
      k:=1;
      for j:=1 to n do
        begin
          m:=i+1-j;
          if m <= 0 then break;
          k:=k*m;
          p[j]:=a[i]*k+p[j]*x;
        end;
    end;
end;
n - степень полинома, x - координата,
a: array[0..n] of double; - массив коэффициентов полинома, a[0] - свободный член, a[n] - коэффициент при x^n,
p: array[0..n] of double; - массив результатов расчета, p[0] - значение полинома, p[1] - первая производная, p[2] - вторая производная и т.д.
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блок схема Лёха Помощь студентам 32 18.12.2010 18:42
Блок схема katya777 Помощь студентам 2 28.10.2010 17:01
Схема микроЭВМ Anna_fors Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.08.2007 23:00