/*---------------------------------------------------------------
                             ordina

Il programma  accetta  in  ingresso dei valori numerici (max 15).
Quindi li ordina tramite funzione qsort.  Poi richiede dei valori
numerici e tramite bsearch determina se il valore e' presente op-
pure no. Se presente, stampa la posizione in  cui e' stato trova-
to (partendo da 0).
---------------------------------------------------------------*/

#include <stdio.h>
#include <stdlib.h>

/*-----configurazione-----*/
const int dim_vect = 15;
/*---fineconfigurazione---*/

int confr (void *val1, void *val2)
{
  int *a, *b;

  a = (int *) val1;
  b = (int *) val2;
  return (*a - *b);
}

int main (void)
{
  int   i, j, (*pf)(), *pos, val, *vector; 

  if ((vector = (int *) malloc (dim_vect * sizeof (int))) == NULL)
    {
      fprintf (stderr, "malloc error\n");
      exit (EXIT_FAILURE);
    }
  for (i = j = 0; i < dim_vect; i++, j++)
    {
      printf ("valore> ");
      fscanf (stdin, "%d", &vector [i]);
      if (feof (stdin))
        break;
    }
  clearerr (stdin);

  printf ("\n");
  pf = confr;
  qsort ((void *) vector, (size_t) j, (size_t) sizeof (int), pf);
  for (i = 0; i < j; i++)
    printf ("%2d %6d\n", i, vector [i]);
  printf ("---------------------------------------------\n");

  printf ("> "), fscanf (stdin, "%d", &val);
  while (! feof (stdin))
    {
      pos = (int *)bsearch ((void *)&val, (void *) vector, j, sizeof (int), pf);
      if (pos)
        printf ("%d in %d^ posizione\n", val, (int) (pos - vector));
      else
        printf ("%d non presente\n", val);
      printf ("> "), fscanf (stdin, "%d", &val);
    }
  printf ("\n");
  exit (EXIT_SUCCESS);
}