/* File: ricbinit.c */
/* Time-stamp: "2001-05-25 15:06:28 calvanes" */
/* Scopo: ricerca in un vettore ordinato */

bool RicercaBinariaIterativa(TipoVettore A, TipoElemVettore elem, int n,
                             int *posiz)
  /* Effettua la ricerca binaria di elem tra i primi n elementi di A, usando
     l'iterazione.  Il valore di ritorno e` TRUE se elem e` presente in A,
     FALSE altrimenti.  Se elem e` presente in A, posiz contiene l'indice della
     componente pari ad elem. */
{
  int inf, med, sup;
  bool trovato = FALSE;

  inf = 0;
  sup = n-1;

  while (inf <= sup && !trovato) {
    med = (inf + sup) / 2;
    if (elem == A[med]) {                     /* l'elemento e` stato trovato */
      *posiz = med;
      trovato = TRUE;
    }
    else
      if (elem < A[med])
        sup = med - 1;                        /* cerca nella parte inferiore */
      else
        inf = med + 1;                        /* cerca nella parte superiore */
  }

  return trovato;
} /* RicercaBinariaIterativa */