Affichage histogramme en c
frez
-
Dalfab Messages postés 720 Statut Membre -
Dalfab Messages postés 720 Statut Membre -
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:
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
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, ...)
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, ...)
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" );
}
}
c'est a dire comme ça:
°°°
°°°°
°°°°°°°°
l'affichage doit se faire verticalement.