#include <stdio.h>
#include <string.h>

int compara_float(void *a, void *b) {
if (*(float *)a==*(float *)b) return 0;
  if (*(float *)a<*(float *)b) return -1;
  if (*(float *)a>*(float *)b) return 1;
}

int compara_int(void *a, void *b) {
  if (*(int *)a==*(int *)b) return 0;
  if (*(int *)a<*(int *)b) return -1;
  if (*(int *)a>*(int *)b) return 1;
}

int compara_string(void *a, void *b) {
  return strcmp((char *)a,(char *)b);
}

void avalia(void *dado1, void *dado2, int (*func_comp)(void *a, void *b)) {
  int valor;
  valor = func_comp(dado1,dado2);
  if (valor == 0) printf ("As duas vari veis sÆo iguais.\n");
  if (valor == -1) printf ("A primeira vari vel ‚ menor que a segunda.\n");
  if (valor == 1) printf ("A primeira vari vel ‚ maior que a segunda.\n");
}


main() {
  int num1 = 18, num2 = 45;
  float num3 = 2.78, num4 = 1.25;
  char *str1 = "bala", *str2 = "bolo", *str3 = "casa";

  printf ("Avaliando num1=%d e num2=%d:\n",num1,num2);
  avalia(&num1,&num2,compara_int);
  num2=18;
  printf ("Avaliando num1=%d e num2=%d:\n",num1,num2);
  avalia(&num1,&num2,compara_int);

  printf ("Avaliando num3=%f e num4=%f:\n",num3,num4);
  avalia(&num3,&num4,compara_float);

  printf ("Avaliando str1=\"%s\" e str2=\"%s\":\n",str1,str2);
  avalia(str1,str2,compara_string);
  printf ("Avaliando str3=\"%s\" e str2=\"%s\":\n",str3,str2);
  avalia(str3,str2,compara_string);
}

