/****************************************/
/* 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;
}