{ File:  sequenz2.pas }

{ Scopo: ciclo repeat }

program MassimaSequenzaDi0;
{ 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. }

var
  bit     : 0..2;       { l'elemento della sequenza appena letto }
  cont    : integer;    { lunghezza attuale della sequenza di zeri }
  maxlung : integer;    { valore temporaneo della massima lunghezza }
  prec    : 0..2;       { elemento della sequenza precedentemente letto }

begin
  writeln('Inserisci una sequenza di 0, 1 terminata da 2');
  cont := 0;                  { non abbiamo ancora letto niente }
  maxlung := 0;               { all'inizio la lunghezza massima e' nulla }
  prec := 2;                  { inizializza prec a un valore diverso da 0 }
  repeat
    read(bit);
    if bit = 0 then           { abbiamo letto un altro 0 }
      cont := cont + 1        { dobbiamo aggiornare la lunghezza della
                                sequenza corrente }
    else                      { abbiamo letto un 1 (o il 2 finale) }
      if prec = 0 then        { l'1 letto segue una sequenza di 0 }
      begin
        if cont > maxlung then  { aggiorna eventualmente il massimo temporaneo}
          maxlung := cont;
        cont := 0             { dobbiamo azzerare la lunghezza della sequenza
                                corrente }
      end;
    prec := bit               { il bit letto diventa quello precedente per
                                l'iterazione successiva }
  until bit = 2;              { abbiamo letto il 2 e terminiamo il ciclo }
  writeln('La piu'' lunga sottosequenza di soli zeri e'' lunga ', maxlung)
end. { MassimaSequenzaDi0 }