/*
Uso de listas de argumentos de longitud variable - Deitel&Deitel - Página 484 (Otros temas de C) - Capítulo 14
UTN - FRP | 2014 | Informática II
*/
#include <stdio.h>
#include <stdarg.h> // Nuevo
double promedio(unsigned int i, ...); /*
* Protito de una función con una lista de argumentos variable.
* Observación: los "..." siempre van al final.
*/
// Main
int main(int argc, char *argv[])
{
double W = 37.5,
X = 22.5,
Y = 1.7,
Z = 10.2;
printf("%s%.1f\n%s%.1f\n%s%.1f\n%s%.1f\n\n", "W = ", W, "X = ", X, "Y = ", Y, "Z = ", Z);
printf("%s%.3f\n%s%.3f\n%s%.3f\n\n",
"El promedio de W y X es ", promedio(2, W, X), /* Nuevo */
"El promedio de W, X y Y es ", promedio(3, W, X, Y), /* Nuevo */
"El promedio de W, X, Y y Z es ", promedio(4, W, X, Y, Z) /* Nuevo */ );
system("PAUSE");
return 0;
}
// Calculo de promedio a través de la función definida anteriormente
double promedio(unsigned int i, ...)
{
// Variables
double total = 0;
// Contador para seleccionar argumentos
unsigned int j;
va_list ap; // -> Almacena la información necesaria para va_start y va_end // Nuevo
va_start(ap, i); // Inicialización del objeto va_list // Nuevo
// Procesar lista de argumentos de longitud variable
for (j = 1; j <= i; j++)
total += va_arg(ap, double); // Nuevo
// Limpia la lista de argumentos de longitud variable
va_end(ap); // Nuevo
return total/i;
}
Comments