ayuda con histograma

Iniciado por Realser86, 30 Octubre 2017, 22:55 PM

0 Miembros y 1 Visitante están viendo este tema.

Realser86

Buenas Tardes
He estado haciendo un proyecto para mi clase de algoritmos, en el ultimo punto me piden una grafica o histograma de las ventas por dia, estos datos ya lo tengo en un arreglo de 31 datos  logre hacer el código para que me muestre un gráfico de barras con asteriscos de las ventas de cada uno de los 31 dias del mes

   
 
Código (cpp) [Seleccionar]
ventas_por_dia();
 
int valor[] = {total_dia1,total_dia2,total_dia3,total_dia4,total_dia5,total_dia6,total_dia7,total_dia8,total_dia9,total_dia10,total_dia11,total_dia12,total_dia13,total_dia14,total_dia15,total_dia16,total_dia17,total_dia18,total_dia19,total_dia20,total_dia21,total_dia22,total_dia23,total_dia24,total_dia25,total_dia26,total_dia27,total_dia28,total_dia29,total_dia30,total_dia31};
  int i;
  int j;
  int max;
 
  max = 0;
  for (i = 0; i < 31; i++)
     if (valor[i] > max)
        max = valor[i];
 
  for (i = max; i > 0; i--){
     for (j = 0; j < 31; j++)
        if (valor[j] >= i)
        {
cout<<" *";
        }
           
        else
           cout<<"  ";
           
   
     putchar('\n');
  }



lo que me gustaria es que ademas de mostrarme las barras de ventas de cada dia me cree una guia del eje vertical y el horizontal, por que solo me muestra los asteriscos

es decir


el codigo me muestra algo asi

*
*    * *
*    * *
*    * * * *
*    * * * *  

y quiero que me lo muestre asi

n
.
.
.
7
6
5 *
4 *    * *
3 *    * *
2 *    * * * *
1 *    * * * *  
  1 2 3 4 5 6 7 8 9 10 11 12 . . . . .  . .. 31


con las guías del eje horizontal de los 31 días del mes y del eje vertical dependiendo la cantidad de ventas por dia




· Los códigos deben ir en etiquetas GeSHi
· No se debe escribir en mayúsculas
>aquí las reglas del foro
-Engel Lex

Serapis

#1
Al hacerlo por consola, exige escribirlo al revés, es decir primero las últimas líneas y al final la primera.

La forma adecuada de hacerlo, como si nada pasara, pero, en vez de escribir en pantalla, "escribes" en un array de strings, al final, realizas un bucle imprimiendo desde la última línea hasta el comienzo y así te quedará como tu quieres.
Esto es la primera línea a meter en tu array sería:

miArray(0) = "----------  01  02  03  04  05  06 ... 29  30  31"
n = .... //calcular número de asteriscos según valor (probablemente un solo asterisco represente, pongamos por ejemplo 1325 euros)
miArray(1) = "1 *  " concatenar  asteriscos(n)
n = ....  // ídem como más arriba
miArray(2) = "3 *  " concatenar  asteriscos(n)

bucle desde k hasta 0 retrocediendo  //k es el último índice guardado en el array, el cual (el array) podría ser mayor por ejemplo declarado desde 0 a 255.
    imprimir miArray(k)
Fin bucle


Si eres capaz de controlar las cordenadas de la pantalla, entonces podrás 'dibujar' en el orden que te dé la gana, si no, esa es la forma... guarda en un array y al final imprime en orden inverso a como lo guardas.
Pudiera ser que la forma en que lo plantees no exija escribirlo TODO al revés, si no sólo la lógica general y las filas escribirlas en ordenr directo o inverso...