zadach191.PAS

{* Задача 191 *}

Unit ZADACH191;
Interface
Implementation
Begin
 writeln('Даны действительные числа a0,..., a5, многочлен Р(х) шестой степени. Получить действительные числа d0,..., d7, такие, что P(x)=d0+d1(x−a0)+d2(x−a0)(x−a1)+…+d7(x−a0)(x−a1)…(x−a5).');
End.

Program p5;

Uses zadach191.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключение модулей *}
Const {* Предопределенные *}
  N = 7;
Var {* Объявление переменных *}
  b               : Array[1..N] Of integer;
  d               : Array[1..N] Of integer;
  a               : Array[1..N - 1] Of integer;
  i               : integer;
  j               : integer;
  ind             : integer;
Function coef(m : integer);
u               : integer);
Var {* Необходимые переменные *}
  c1 : integer;
  c2 : integer;
  c3 : integer;
  c4 : integer;
  c5 : integer;
  s  : integer;
Begin
  s := 0;
  If (m = 1) Then
    For c1 := 1 To u Do {* Переменная c1 увеличивается с 1 до u *}
      s := s + a[c1];
  If (m = 2) Then
  Begin
    For c1 := 1 To u Do {* Переменная c1 увеличивается с 1 до u *}
      For c2 := c1 + 1 To u Do
        s := s + a[c1] * a[c2];
  End;
  If (m = 3) Then
  Begin
    For c1 := 1 To u Do {* Переменная c1 увеличивается с 1 до u *}
      For c2 := c1 + 1 To u Do
        For c3 := c2 + 1 To u Do
          s := s + a[c1] * a[c2] * a[c3];
  End;
  If (m = 4) Then
  Begin
    For c1 := 1 To u Do {* Цикл для c1 => [1 .. u] *}
      For c2 := c1 + 1 To u Do
        For c3 := c2 + 1 To u Do
          For c4 := c3 + 1 To u Do
            s := s + a[c1] * a[c2] * a[c3] * a[c4];
  End;
  If (m = 5) Then
  Begin
    For c1 := 1 To u Do {* Увеличиваем c1 от 1 до u с шагом 1 *}
      For c2 := c1 + 1 To u Do
        For c3 := c2 + 1 To u Do
          For c4 := c3 + 1 To u Do
            For c5 := c4 + 1 To u Do
              s := s + a[c1] * a[c2] * a[c3] * a[c4] * a[c5];
  End;
  If (m = 6) Then
    s := a[1] * a[2] * a[3] * a[4] * a[5] * a[6];
  coef := s;
End;
Begin
  clrscr; {* Стираем всё с экрана *}
  For i := 1 To N Do {* Увеличиваем i от 1 до N с шагом 1 *}
    b[i] := 1;
  For i := 1 To N - 1 Do {* Увеличиваем i от 1 до N с шагом 1 *}
    a[i] := i;
  For i := N Downto 1 Do
  Begin
    d[i] := b[i];
    ind := 1;
    For j := i + 1 To N Do
    Begin
      d[i] := d[i] + d[j] * coef(j - i, j - 1) * ind;
      ind := ind * ( - 1);
    End;
    
  End;
  For i := 1 To N Do {* Цикл для i => [1 .. N] *}
    writeln('d[', i, ']=', d[i]);
  readln; {* Приостановка программы. Ожидание Enter *}
End.