Page 534 - Informatica dalla A a Z
P. 534
/* Determina l’elemento centrale. */
m = (a + z) / 2;
if (m < a)
{
/* Non restano elementi da controllare: l’elemento cer-
cato */
/* non c’è. */
return -1;
}
else if (x < lista[m])
{
/* Si ripete la ricerca nella parte inferiore. */
return ricercabin (lista, x, a, m-1);
}
else if (x > lista[m])
{
/* Si ripete la ricerca nella parte superiore. */
return ricercabin (lista, x, m+1, z);
}
else
{
/* m rappresenta l’indice dell’elemento cercato. */
return m;
}
}
/* Inizio del programma. */
int main (int argc, char *argv[])
{
/* int lista[argc-2]; */
int *lista = (int *) malloc ((argc - 2) * sizeof (int));
int x;
int i;
/* Acquisisce il primo argomento come valore da cercare. */
sscanf (argv[1], "%d", &x);
/* Considera gli argomenti successivi come gli elementi */
/* dell’array da scandire. */
for (i = 2; i < argc; i++)
{
sscanf (argv[i], "%d", &lista[i-2]);
}
/* Esegue la ricerca. */
i = ricercabin (lista, x, 0, argc-2);
/* Emette il risultato. */
printf ("%d si trova nella posizione %d\n", x, i);
530