/*
 *  sol2003_07_08.c
 *  
 *
 *  Created by Claudio Sartori on Mon Jul 07 2003.
 *  Copyright (c) 2003 __Universita' di Bologna__. All rights reserved.
 * La memoria del problema richiede, per ogni classe, un intero per contare il numero
 *    di classificazioni e un intero per ricordare la posizione dell'ultimo letto
 *    di quella classe. La struttura dati e' quindi costituita da due array di M+1 elementi
 *    In alternativa si potrebbe definire una struct con coppie di interi e farne un array
 * Algoritmo:
 - inizializza a zero i contatori delle classi e la memoria delle posizioni
   (una classe che rimane vuota avra' anche ultima posizione 0)
 - ripeti N volte
   - sollecita inserimento valore
   - leggi valore xi
   - decidi la classe di appartenenza
         - test per verificare appartenenza a una delle classi estreme
         altrimenti calcola la classe troncando xi+0.5
   - incrementa il conteggio rispettivo e aggiorna la posizione dell'ultimo letto
 - visualizza i conteggi e le ultime posizioni, per ogni classe
 *
 */

#define N 10 /* numero valori letti */
#define M 3  /* classe piu' elevata */

int main(void){
    int classi[M+1]; /* conteggio classi */
    int ultimaPos[M+1]; /* memoria ultima posizione */
    float xi;       /* valore letto */
    int i;          /* numero d'ordine */
    int c;          /* classe di appartenenza */

    for (i=0;i<M+1;i++){
        classi[i]=0;
        ultimaPos[i]=0;
    }
    for (i=1;i<=N;i++){
        printf("inserire valore %d: ",i);
        scanf("%f",&xi);
        if (xi<0.5) c=0;
        else if (xi>=M-0.5) c=M;
        else c = (int) (xi+0.5); // esegue l'arrotondamento tramite troncamento del numero +0.5
        classi[c]++;             // incrementa il contatore relativo alla classe
        ultimaPos[c]=i;          // ricorda il numero d'ordine dell'ultimo trovato per la classe c
    }
    for (i=0;i<M+1;i++)           // visualizza la frequenza assoluta delle classi
        printf("Classe %3d:%3d\t Ultimo %3d\n",i,classi[i],ultimaPos[i]);
} /* main */