/* Demonstrira pokazivace na funkcije */
#include <stdio.h>

int kvadrat(int n) {   
  return n*n;
}

int kub(int n) {
  return n*n*n;
}

int parni_broj(int n) {
  return 2*n;
}


/* Funkcija izracunava sumu \sum_{i=1}^n f(i), gde je f data funkcija 
   prvi argument funkcije sumiraj je 
		int (*f) (int) 
   sto je pokazivac na funkciju koja ima jedan argument tipa int i 
   vraca vrednost tipa int
*/
int sumiraj(int (*f) (int), int n) {
  int i, suma=0;
  for (i=1; i<=n; i++)
	suma += (*f)(i);

  return suma;
}

int main() {
   printf("Suma kvadrata brojeva od jedan do 3 je %d\n",
          sumiraj(kvadrat,3));
   printf("Suma kubova brojeva od jedan do 3 je %d\n",
          sumiraj(kub,3));
   printf("Suma prvih pet parnih brojeva je %d\n",
          sumiraj(parni_broj,5));

   return 0;
}