jazykc  2013.3
upoljazykc
 All Classes Files Functions Variables Typedefs Macros Pages
prumer-cisel.c
Go to the documentation of this file.
1 
30 //Povolené knihovny:
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <stdarg.h>
34 
35 #include <assert.h> //takto "poresime" chyby
36 
44 long double prumer (char *format, ...) {
45  va_list args;
46  char f;
47  int i = 0;
48  double d;
49  long double ld, suma = 0.0L;
50 
51  va_start(args, format);
52  for (i=0; format[i] ; i++) {
53  switch (format[i]) {
54  case 'i': suma += va_arg(args, int); break;
55  case 'd': suma += va_arg(args, double); break;
56  case 'l': suma += va_arg(args, long double); break;
57  default://neznamy format
58  assert(("neznamy format",0));
59  }
60  }
61  va_end(args);
62  return suma / i;
63 }
64 
65 int main (void) {
66  long double ld;
67  ld = prumer("iii", 1, 2, 3);
68  printf("prumer(iii,1,2,3) = %Lg\n", ld);
69  printf("prumer(iii,1,2,4) = %Lg\n", prumer("iii", 1,2,4));
70  printf("prumer(ddd,1,2,4) = %Lg\n", prumer("ddd", 1,2,4));
71  printf("prumer(lll,1,2,4) = %Lg\n", prumer("lll", 1.1L,2.2L,4.4L));//musi byt 1.1L!!!
72 
73 //pokud by format parametr byl v printf stylu, lze u GNUC pouzit __atributte !!!
74  printf("prumer(iii,1,2,?) = %Lg\n", prumer("iii", 1,2));//chybi!!!
75  printf("prumer(iiii,1,2,?,?) = %Lg\n", prumer("iiii", 1,2));//chybi!!! => nesmysly!
76  printf("prumer(dddd,1,2,?,?) = %Lg\n", prumer("dddd", 1,2));//chybi!!! => nesmysly!
77 
78  printf("prumer(x,1,2,?,?) = %Lg\n", prumer("xx", 1,2));//assert abort
79 
80  return 0;
81 }
long double prumer(char *format,...)
Definition: prumer-cisel.c:44