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
   529   530   531   532   533   534   535   536   537   538   539