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