PDA

Visualizza la versione completa : [c] Istogramma Con Asterischi


Skass89
23-12-2009, 20:49
vi posto subito il problema:

Scrivere un programma per caricare un vettore di numeri interi e rappresentare i valori di ogni elemento sottoforma di istogramma: al fianco di ogni numero visualizzare una barra di asterischi, proporzionale al numero stesso.

secondo la mia idea di programma, dovrei utilizzare due vettori uno per caricare i numeri e l'altro per gestire gli asterischi di fianco ad ogni numero....correggetemi se sbaglio (sicuramente)....però mi blocco a mettere in relazione i due vettore ad esempio:

elementi vettore:
1
2
3
4
output:
1 *
2 **
3 ***
4 ****

come faccio a dire al secondo vettore che deve stampare tanti asterischi quant'è il valore di ogni singolo elementi del primo vettore?

(ke macello...... :master: )

MItaly
23-12-2009, 21:43
Non vedo dove sia il problema... scorri il primo vettore e usa il valore che ne ricavi come indice per il secondo; l'elemento corrispondente ad esso andrà incrementato di uno.

Skass89
23-12-2009, 21:45
e per stampare gli *?

potresti anche spiegarti con un piccolo esempio?

MItaly
23-12-2009, 22:08
putchar in un ciclo che viene eseguito tante volte quanto vale il corrispondente elemento nel secondo vettore.

Skass89
23-12-2009, 22:46
niente da fare....non c'ho capito una mazza....

Skass89
24-12-2009, 11:49
qualc'uno riesce a spiegarmi questo? "scorri il primo vettore e usa il valore che ne ricavi come indice per il secondo; l'elemento corrispondente ad esso andrà incrementato di uno."

MItaly
24-12-2009, 17:33
Ammetto di essere stato un po' criptico, ma non mi pare così complesso...

Scorri il primo vettore = usa un for per ciclare su ciascun elemento del primo vettore
Usa il valore che ne ricavi come indice per il secondo = ad ogni iterazione vai a considerare il valore dell'elemento del primo vettore su cui ti trovi; usa questo per accedere al corrispondente elemento del secondo vettore
l'elemento corrispondente ad esso andrà incrementato di uno = non so come renderlo più semplice...

Esempio:


#define ARRSIZE(arr) (sizeof(arr)/sizeof(*(arr)))
int vettoreInput[50];
int vettoreProb[100]={0};
/* ... riempimento vettoreInput ... */
/* Calcolo vettore probabilità */
int i, j, maxVI=0;
for(i=0;i<ARRSIZE(vettoreInput);i++)
{
/* Evitiamo di fare danni */
if(vettoreInput[i]>=ARRSIZE(vettoreProb))
{
/* il vettore probabilità è troppo piccolo, gestisci l'errore in qualche maniera (visualizza un qualche messaggio di errore, ...) */
break;
}
vettoreProb[vettoreInput[i]]++;
maxVI=max(maxVI, vettoreInput[i]);
}
for(i=0; i<=maxVI; i++)
{
printf("%d: ",i);
for(j=0; j<vettoreProb[i]; j++)
putchar('*');
putchar('\n');
}

Naturalmente se l'insieme dei possibili valori di vettoreInput è particolarmente sparso risulta più conveniente una struttura dati più flessibile, come l'hashtable.

Loading