miércoles, 11 de septiembre de 2013

Ejemplos de C/C++ sencillos: Histograma de un arreglo de carácteres sin if ni case

Hola a todos,
Me han planteado un ejercicio que aunque no sea muy complicado sirve para entender que en programación todo se puede hacer de múltiples maneras y que el único límite es la imaginación.
El enunciado del problema dice algo de este estilo: "Haga un histograma que guarde la frecuencia de las letras de abecedario incluyendo mayúsculas y minúsculas en un arreglo y que imprima la frecuencia de la letra, todo ello sin usar if ni case."
Un histograma no es más que un recuento de elementos de cada tipo que tengamos, que normalmente se representa en gráficas como la siguiente:












Sin if.... sin switch/case... imposible? no.. complicado? tampoco, solo es saber ver el problema desde otro ángulo.  Aquí os dejo el código, creo que vale más la pena el código que toda explicación que pudiese hacer.

#include <iostream> 
#include <string.h> 
#include <stdlib.h>

int main(int argc, char** argv) 
{
char letras[256] = {"Hoy puede ser un gran dia, tomatelo así."};
char histograma[256] = {0};
int i,j;
for( i = 0 ; i < strlen(letras) ; ++i )
{
histograma[letras[i]]++;
}
for( i = 0 ; i < 256 ; ++i )
{
std::cout << (char) i << ": ";
for(j = 0 ; j < histograma[i]; ++j)
{
std::cout << "*";
}
std::cout << std::endl;
}
system("pause");
return 0;
}

Si copiáis este código y lo compiláis veréis que da el resultado que se pide, sin usar ni una sola operación de comparación.

Espero que os haya servido y gustado

Nos vemos



LordPakusBlog

2 comentarios :

  1. Muy bueno tu tutorial, necesito algo parecido, un arreglo que se llene aleatoriamente y luego imprima el histograma de acuerdo a los valores almacenados, ademas despues arreglarolo en forma de menor a mayor.
    Espero puedas ayudarme, abajo el enunciado.

    Existen diez alumnos:
    1. Luis
    2. Berta
    3. Maria
    4. Daniela
    5. Josue
    6. Fiorella
    7. Marcos
    8. Isabella
    9. Pedro
    10. Carlos
    Quienes recibirán 20 cables de longitudes distintas que van desde 1cm a 35 cm de manera al azar, no recibirán cables de longitudes iguales. Representar cada cable con * por cada centímetro y al final de cada cable su longitud representada en unidades. Ej:
    ************ 12
    Imprimir de manera automática todos los pasos de ordenamiento. Debe poder verse cada paso del ordenamiento en pantalla y diga en cuantos pasos se ha realizado una vez terminado el proceso de impresión de ordenamiento. Ej.
    Cables de Isabella
    =============
    ********* 9
    ****** 6
    *** 3
    ************ 12
    ******* 7
    ********** 10
    **** 4
    *************** 15
    ******** 8
    *********** 11
    ************** 14
    * 1
    ************* 13
    ***** 5
    **************** 16
    ******************** 20
    ******************* 19
    ************************* 25
    *************************** 27
    *********************************** 35
    N pasos después
    Cables de Isabella
    =============
    * 1
    *** 3
    **** 4
    ***** 5
    ****** 6
    ******* 7
    ******** 8
    ********* 9
    ********** 10
    *********** 11
    ************ 12
    ************* 13
    ************** 14
    *************** 15
    **************** 16
    ******************* 19
    ******************** 20
    ************************* 25
    *************************** 27
    *********************************** 35
    Cantidad de Pasos: N
    Se debe poder elegir que se haga el ordenamiento de manera automática de los 10 alumnos o poder ver los cables del alumno y luego decidir si queremos ordenarlos o no.

    ResponderEliminar
    Respuestas
    1. Yo te ayudo... pero no te haré la tarea.
      Las tareas que te encomiendan son para que practiques y aprendas, si te lo hago yo no ganarás nada.
      Intentalo hacer tu y si ves que te quedas encallado en algún punto pon el código y te echaré un cable en base a tu código.

      Nos vemos

      Eliminar

Entradas populares