Affichage histogramme en c

Bonjour,
je bloque sur un programme qui construit un histogramme.Je l'ai fait mais j'ai l'affichage inverse de ce qui est demandée,voici l'énoncé complet:
On se propose de construire un histogramme décrivant la répartition des valeurs des
éléments d’un vecteur tel que celui-ci :
{ 2, 3, 7, 6, 9,11,12,15,18,17, 14,13,12, 7, 8, 7, 5, 3, 2, 1, 1, 0, 2, 8,11,13,12,11, 6, 3};
Le programme affichera l’histogramme dans la fenêtre du terminal, en utilisant des blancs et des étoiles.
1. Écrire une fonction dont le prototype est : void histog(int v[], int nb)
2. Modifier le programme afin de pouvoir choisir la hauteur de l’histogramme. Le
prototype devient : void histog(int v[], int nb, int H).

voici mon code source:


#include <stdio.h>
#include <stdlib.h>

void histog(int v[], int nb)
{
int i,j,k;
for(i=0;i<nb;i++)
{
k=v[i];
for(j=0;j<k+1;j++)
{

printf("*");

}
printf("\n");

}

}
int main()
{
int v[]={2,3,7,6,9,11,12,15,18,17,14,13,12,7,8,7,5,3,2,1,1,0,2,8,11,13,12,11,6,3};
histog(v,30);

return 0;
}

4 réponses

  1. Bonjour,

    Qu'est-ce que tu appelles l'affichage inverse?
    Le programme trace bien l'histogramme (avec 2*, puis 3*, ...)

    Mais l'énoncé semble indiquer qu'il faudrait plutôt (1 espace+étoile, 2espaces + étoile, ...)
    0
    1. En fait, il faut afficher 3 étoiles de maniere verticale,ensuite 4 étoiles,toujours de maniere verticale et ainsi de suite.Or moi j'ai l'affichage de maniere horizontale.
      c'est a dire comme ça:
      °°°
      °°°°
      °°°°°°°°
      l'affichage doit se faire verticalement.
      0
  2. void histog(const int v[], int nb)
    {
        int i;
    
        // rechercher le max de la table
        int mx = 0;
    
        for ( i = 0 ; i < nb ; i++ )
        {
            if ( v[i] > mx )
                mx = v[i];
        }
    
        // tracer les points visibles de l'histogramme en commeçant par le plus haut
        for ( ; mx >= 0 ; mx-- )
        {
            for ( i = 0 ; i < nb ; i++ )
            {
                if ( v[i] >= mx )
                    fputc( '*' , stdout );
                else
                    fputc( ' ' , stdout );
            }
            printf( "\n" );
        }
    }
    0
    1. Merci, mais il y'a des choses que j'ai pas compris:
      a quoi sert cette boucle:for ( ; mx >= 0 ; mx-- ), la syntaxe aussi je ne l'ai pas bien compris.
      0
  3. c'est bon j'ai compris!mais j'ai des problemes pour tracer l'histogramme avec une hauteur choisie
    0
    1. Bonjour,

      La première partie de la fonction détermine la hauteur.
      La seconde trace l'histogramme de la hauteur calculée.

      Pour une fonction recevant la hauteur, j’ôterais la première partie.
      0