/* 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; }