[ Foro de C ]
histograma vertical?
Hola estaba haciendo unas prácticas y no puedo hacer uno de los ejercicios, éste dice: hacer un histograma vertical para hasta al menos 10 números en un rango de 1 a 25. Éstos deben ser grabados a un vector y el dibujo debe ser desplegado directamentes, sin usar una matriz.
Ejemplo: 4
               2 5 8 7Â
   *
   * *
   * *
  * * *
  * * *
  * * *
* * * *
*Â * * *
--------
2 5 8 7
me podéis ayudar?Â
Tendrás que dibujar por filas, desde los valores más altos a los más bajos. Yo harÃa algo asÃ:
para cada altura desde 25 descencendiendo hasta 1
para cada barra del histograma desde 1 hasta 10 (o el maximo que te digan)
si la valor del histograma >= altura escribir "*"
si no escribir [espacio en blanco]
fin para
fin para
(sólo falta convertirlo a C ;-) )
y como determino el más alto?
Tienes dos opciones:
a) No determinar el más alto. Si son valores de 1 a 25, llenarás exactamente toda la pantalla.
b) Dar una pasada con un "for" para comprobar antes cual es realmente el más alto (yo no lo creo necesario):
maximo = primero
desde i = segundo hasta ultimo
si dato[i] > dato[maximo], entonces maximo = i
fin desde
es que no puedo nada mas llenar toda la pantalla, necesito saber l mas alto para a partir de el imprimir las estrellas, como n el ejemplo q puse, q no queden espacios en blanco, ya pude encontrar el maximo, pero no se como hacer para imprimir las estrellas en l orden de los datos y sin dejar espacios en blanco antes del mas alto(o sea que las estrellas empiecen de una vez en el numero insertado mas alto) :s
Ya en la primera respuesta te dije cómo lo plantearÃa yo: no hace falta buscar el máximo, sino que recorres todos los valores posibles i, desde 25 (o el máximo admisible) hasta 1, descendiendo. Si el valor de la barra es mayor o igual que i, dibujar una estrella; si no, dibujas un espacio:
#include <stdio.h>
#define NUMBARRAS 4
#define VALORMAX 10
int valores[NUMBARRAS] = {
8, 6, 2, 7
};
int main() {
int i, j;
for (j=VALORMAX; j>=0; j--) {
for (i=0; i<NUMBARRAS; i++)
if (valores[i] >= j)
printf("*");
else
printf(" ");
printf("\n");
}
}
(No se puede continuar esta discusión
porque tiene más de dos meses de antigüedad.
Si tienes dudas parecidas, abre un nuevo hilo.)