{ 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 }