Sommaire


Installer ce fichier dans votre répertoire de travail.

x_horner.h
utilitaire
 /* ---------------------------------- */
/* save as x_horner.h                  */
/* ---------------------------------- */
void p_P(
double *P)
{
   int c;
double coeff;
   int p0 = 1;
   int p = P[0]-1;

printf("   ");

for (c=1; c<P[0]; c++)
{
 coeff = P[c];

 --p;

 if(coeff)
 {
  p0 = 0;
  if(p)
  {
   if(p==1)
     {
           if(coeff ==  1)     printf("+ x  ");
      else if(coeff == -1)     printf("- x  ");
      else                     printf("%+.2f*x  ",coeff);
      }
   else
     {
           if(coeff ==  1)     printf("+ x**%d  ",p);
      else if(coeff == -1)     printf("- x**%d  ",p);
      else                     printf("%+.2f*x**%d  ",coeff,p);
      }
  }
  else printf("%+.2f  ",coeff);
 }
}
   if(p0){printf("   0");}
   printf("\n\n");
}
/* ----------------------------------------------------- */
double compute_horner(
double   x,
double *Px,
double *Pt,
double *Pa,
double *Pq
)
{
int  c;

 Pa[1]=Px[1];

for (c=1; c<(Px[0]-1); c++)
{
   Pt[c+1] = Pa[c]*x;
   Pa[c+1] = Pt[c+1]+Px[c+1];
   Pq[c]   = Pa[c];
}

 return ( Pa[c] );
}
/* ----------------------------------------------------- */
void p_horner(
double *Px,
double *Pt,
double *Pa
)
{
   int c;

printf("   ");
for (c=1; c<Px[0]; c++) printf("%+7.2f   ", Px[c] );
printf("\n");

printf("   ");
for (c=1; c<Pt[0]; c++) printf("%+7.2f   ", Pt[c] );
printf("\n");

printf("   ");
for (c=1; c<Px[0]; c++) printf("----------" );
printf("\n");

printf("   ");
for (c=1; c<Pa[0]; c++) printf("%+7.2f   ", Pa[c] );
printf("\n\n");
}


La première fonction imprime un polynôme. La deuxième utilise l'algorithme de Horner. La troisième affiche le tableau des résultats obtenue par la deuxième fonction.

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.