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