/* Claudio Sartori - Universita' di Bologna - 2004 * * Legge un file testuale contenente numeri e analizza le sequenze non decrescenti * * Struttura dati: * per verificare la proprieta' "locale" di sequenza non decrescente e' sufficiente * analizzare due valori consecutivi, non e' richiesta alcuna elaborazione che consideri * contemporaneamente piu' valori, quindi e' sufficiente predisporre dati per i * due valori e dati per i conteggi. L'algoritmo richiede quindi uno spazio di memoria * costante rispetto alla dimensione del problema (che e' data dal numero di valori * contenuti nel file) * * Algoritmo: * - acquisisce nome del file * - apre il file in lettura e in caso di errore termina * - inizializza i contatore di posizione=1 e di sequenze=0 * - legge il primo valore i v_prec * - ripete finche' ci sono dati nel file * - legge un valore in v_att * e incrementa il contatore di posizione * - se v_att < v_prec riconosce il termine di una sequenza * - incrementa il contatore di sequenza e visualizza * - memorizza il valore attuale v_att in v_prec * - al termine del file l'ultima sequenza risulta non terminata, quindi * incrementa il contatore di sequenza e visualizza * - visualizza il numero di sequenze */ #include <stdio.h> #define NF "valori.txt" // nel caso sostituire con dich. di variabile e input int main(){ int no, /*numero d'ordine*/ ns, /*numero di sequenze rilevate*/ v_att, /*valore attuale letto dal file*/ v_prec; /*valore precedente letto dal file*/ FILE *f; if((f=fopen(NF, "r"))==NULL){ printf("Impossibile aprire il file %s\n",NF); return 1; } no=0; ns=0; if (fscanf(f, "%d", &v_prec)==EOF){ printf("File %s vuoto - Fine Lavoro\n",NF); return 1; } // se il test risulta falso v_prec ha ottenuto un valore valido while(fscanf(f, "%d", &v_att)!=EOF){ // ripeti lettura finche' non finisce il file if (v_att<v_prec){ // test di fine sequenza printf("V:%d NO:%d\n", v_prec, no); ns++; } no++; v_prec=v_att; } ns++; // chiusura ultima sequenza printf("V:%d NO:%d\n", v_att, no); printf("Sequenze: %d\n", ns); return 0; }