/* File:  sequenz2.c */
/* Time-stamp: "2001-03-13 12:52:05 calvanes" */
/* Scopo: ciclo do-while */

#include <stdio.h>

/* Legge da tastiera una sequenza di 0 e 1, terminata da 2.
   Calcola la lunghezza della piu` lunga sottosequenza di 0, e la stampa.

   ESEMPIO: 0 0 1 0 1 0 0 0 1 0 1 2 ---> 3

   Versione ottimizzata che aggiorna la lunghezza massima solo alla fine di una
   nuova sottosequenza di 0 di lunghezza superiore alle precedenti.
*/

int main(void)
{
  int bit;            /* l'elemento della sequenza appena letto    */
  int cont = 0;       /* lunghezza attuale della sequenza di zeri;
                         inizialmente non abbiamo ancora letto nulla */
  int maxlung = 0;    /* valore temporaneo della massima lunghezza;
                         inizialmente e` 0 */
  int prec = 2;       /* elemento della sequenza precedentemente letto;
                         deve essere inizializzato ad un valore diverso da 0 */

  printf("Inserisci una sequenza di 0, 1 terminata da 2\n");
  do {
    scanf("%d", &bit);
    if (bit == 0)                               /* e` stato letto un altro 0 */
      cont++;               /* aggiorna la lunghezza della sequenza corrente */
    else                              /* e` stato letto un 1 (o il 2 finale) */
      if (prec == 0) {                  /* l'1 letto segue una sequenza di 0 */
        if (cont > maxlung)   /* aggiorna eventualmente il massimo temporaneo*/
          maxlung = cont;
        cont = 0;             /* azzera la lunghezza della sequenza corrente */
      }

    prec = bit;                       /* il bit letto diventa quello precedente
                                         per l'iterazione successiva */
  } while (bit != 2);                  /* quando si legge 2 il ciclo termina */

  printf("La piu` lunga sottosequenza di soli zeri e` lunga %d\n", maxlung);

  return 0;
}