23 de Noviembre del 2009
Histograma con números aleatorios y asteriscos
Bueno, tal vez el título quedó muy poco descriptivo, pero la idea es pedir un número de personas, luego se le pediría a cada persona su peso pero nosotros solo vamos a generar un número aleatorio en determinado rango. Luego se clasificaría a esas personas en rangos de peso y al final mostrar una tabla que muestre la frecuencia de cada rango con asteriscos, así:
51-60 ***
61-70 **
71-80 ***
80-91 *
91-mas *****
El código en C++ sería así:
#include<stdlib.h> #include<iostream> using namespace std; int main() { int n,c,c2,peso[500],cat[5]={0},lim; // n -> numero de personas // c y c2 para ciclos // peso[500] arreglo para guardar el peso de las personas // cat[5] arreglo para guardar el número de personas en cada categoria de peso srand(time(NULL)); // Inicializa los números aleatorios cout<<"Introduce el número de personas: ";cin>>n; for(c=0;c<=n-1;c++) { peso[c]=51+rand()%(120-51); //guarda un número aleatorio del 51 al 120 en cada elemento del arreglo // según su valor se aumenta un elemento de nuestro otro arreglo if(peso[c]>50 && peso[c]<=60) cat[0]++; if(peso[c]>60 && peso[c]<=70) cat[1]++; if(peso[c]>70 && peso[c]<=80) cat[2]++; if(peso[c]>80 && peso[c]<=90) cat[3]++; if(peso[c]>90) cat[4]++; } cout<<"\n"; for(c=0;c<=4;c++) { switch(c) { // segun cada caso imprime algo diferente case 0: cout<<"51-60\t"; break; case 1: cout<<"61-70\t"; break; case 2: cout<<"71-80\t"; break; case 3: cout<<"81-90\t"; break; case 4: cout<<"90- \t"; break; } lim=cat[c]; // no podemos usar un arreglo como limite del ciclo (la verdad // no se porque), entonces lo pasamos a una variable normal for(c2=1;c2<=lim;c2++) cout<<"*"; cout<<"\n\n"; } cin.get();cin.get(); // detiene la ejecución al final (es como getch();) }
A propósito, este programa fue una petición especial de un usuario.