un petit histogramme pas facile
Bonsoir à tous , j'ai l'exercice suivant :
écrire un programme en C qui affiche l'histogramme de la longueur ds mots rencontrés en entrée .
fonctions autorisées : getchar , putchar , printf
utilisation de boucles , variables , tableaux ( 1 seul tableau ) , rien d'autre .
Voici l'algorithme en français :
1Je parcours la chaine de caractère en entrée , chaque fois que j'arrive à la fin d'un mot je compte les lettres du mot , et j'incrémente la case du tableau correspondante , si le mot fait 5 lettres j'incrémente la case 5 .
2. je parcours le tableau tout en affichant l'histogramme , et une autre variable lit la valeur dans chaque case et affiche le signe _ tant que ce n'est pas fini .
exemple de ce que doit faire le programme :
phrase reçue en entrée :
Bonsoir , comment te portes tu petit coq , hi hi .
résultat à l'écran :
1:
2: ____
3: _
4:
5: _
6: _
7: _
8: _
9:
ce qui veut dire , 0 mot de 1 lettre , 4 mots de 2 lettres ...
voici mon code en C , je sais qu'il est presque bon mais il y a une petite erreur à mon avis sur la fin avec la variable i , car mon programme m'affiche un défilement infini de _ _ _ _ _
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include <stdio.h>
int main(void)
{
int a, i, j;;
int nlettre[10];
int nl = 0;
while ( ( a = getchar() ) != EOF && nl < 10)
{
if ( a == ' ' || a == '\n' || a == '\t' )
nl=0;
else
nl++;
nlettre[nl]++;
}
for ( j = 0; j < 10; j++)
{
printf("%d :", j);
for ( i=0; i<nlettre[j]; i++)
{
printf("_");
}
}
return 0;
}
le début est bon , je suis certain que le blème vient de la dernière boucle for...
PS : je n'ai pas besoin de rajouter de variables ni de tableaux , tout y est , mais mal disposé je pense , merci de votre aide . |
Re: un petit histogramme pas facile
Citation:
Envoyé par Bibouda
Voici l'algorithme en français :
1Je parcours la chaine de caractère en entrée , chaque fois que j'arrive à la fin d'un mot je compte les lettres du mot , et j'incrémente la case du tableau correspondante , si le mot fait 5 lettres j'incrémente la case 5 .
2. je parcours le tableau tout en affichant l'histogramme , et une autre variable lit la valeur dans chaque case et affiche le signe _ tant que ce n'est pas fini .
Le codage de l'algo est faux. L'enregistrement du compteur de lettres est mal placé...