/****************************************/
/* soubor FN_ARGX.C			*/
/* ukazuje pouziti funkce s promennym	*/
/* poctem argumentu ruznych typu	*/
/****************************************/

#include <stdio.h>
#include <stdarg.h>

const int konec = -12345;

double polynom(char *msg, ...)
/****************************************/
/* vycisli polynom zadany jako:		*/
/* an*x^n + an-1*x^n-1 + ... a1*x + a0	*/
/* nejprve je uvedeno x pak koeficienty	*/
/* kde					*/
/* 	koeficienty an jsou typu int	*/
/*	hodnota x je typu double	*/
/* pro ukonceni je pouzita zarazka konec*/
/****************************************/
{
 double hodnota = 0.0, x;
 va_list ap;
 int koef;

 va_start(ap, msg);
 x = va_arg(ap, double);
 koef = va_arg(ap, int);
 while (koef != konec)
  {
   hodnota = hodnota * x + koef;
   koef = va_arg(ap, int);
  }
 va_end(ap);
 return hodnota;
}

int main(void)
{
 double f;
 char *s;
 s = "polynom stupne 2";
 f = polynom(s, 2.0, 2, 3, 4, konec);	/* 2x^2 + 3x + 4,x=2 -> 18	*/
 printf("%s = %lf\n", s, f);

 s = "dalsi polynom";
 f = polynom(s, 3.0, 1, 0, 0, 0, konec);/* x^3          ,x=3 -> 27	*/
 printf("%s = %lf\n", s, f);

 return 0;
}