[ Foro de C ]

histograma vertical?

14-May-2008 18:07
Mariah Mndez
5 Respuestas

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? 


14-May-2008 18:19
Nacho Cabanes (+31)

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 ;-) )

17-May-2008 05:46
Mariah Mndez

y como determino el más alto?
17-May-2008 11:59
Nacho Cabanes (+31)

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


18-May-2008 07:49
Mariah Mndez

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


22-May-2008 23:14
Nacho Cabanes (+31)

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.)