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