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