/*---------------------------------------------------------------
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);
}