Explication sur un code
johan
-
Ne0 Messages postés 52 Statut Membre -
Ne0 Messages postés 52 Statut Membre -
Bonsoir , voici le code d'un programme qui affiche un histogramme vertical de la fréquence des lettres rencontrées en entrée :
J'aimerais simplement et clairement savoir ce que c'est que ce cette variable j dans la dernière boucle , à quoi sert elle , que représente t'elle?
merci de votre aide
#include <stdio.h>
int main(void)
{
int a, i, j;
int tab[26];
for ( i = 0; i <26; i++)
tab[i] = 0;
while ( ( a = getchar() ) != EOF )
{
if (( a >= 97) && (a =< 122) )
tab[a-'a']++;
}
for ( j = 0; j < 26; j++ )
{
printf("%c :", j+97);
}
printf("\n");
while(j!=0)
{
j=0;
for(i=0;i<26;i++)
{
if (tab[i])
{
j++;
tab[i]--;
printf( "|" );
}
else
{
printf(" ");
}
}
}
return 0;
}
J'aimerais simplement et clairement savoir ce que c'est que ce cette variable j dans la dernière boucle , à quoi sert elle , que représente t'elle?
merci de votre aide
A voir également:
- Explication sur un code
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Scanner un qr code sur pc - Guide
6 réponses
petite rectification du code
#include <stdio.h>
int main(void)
{
int a, i, j;
int tab[26];
for ( i = 0; i <26; i++)
tab[i] = 0;
while ( ( a = getchar() ) != EOF )
{
if (( a >= 97) && (a <= 122) )
tab[a-'a']++;
}
for ( j = 0; j < 26; j++ )
{
printf("%c :", j+97);
}
printf("\n");
while(j!=0)
{
j=0;
for(i=0;i<26;i++)
{
if (tab[i])
{
j++;
tab[i]--;
printf( "|" );
}
else
{
printf(" ");
}
}
putchar("\n");
}
return 0;
}
la variable j sert a sortr de la boucle while, quand le tableau sera vide, la variable j vaudra 0 et la boucle sera terminé...
hello world !
en fait je me posais la question aussi.
mais il doit y avoir un moment ou tab[i] vaudra false. Du coup j ne sera pas incrémenté et vaudra 0.
en fait je me posais la question aussi.
mais il doit y avoir un moment ou tab[i] vaudra false. Du coup j ne sera pas incrémenté et vaudra 0.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alors la boucle while veut dire en français :
On parcourt toutes les cases du tableau , si l'une des cases contient une valeur , on affiche | et on décrémente la case où on a affiché | , sinon on affiche un espace .
mais le j je vois vraiment pas ce qu'il représente , une ligne????
On parcourt toutes les cases du tableau , si l'une des cases contient une valeur , on affiche | et on décrémente la case où on a affiché | , sinon on affiche un espace .
mais le j je vois vraiment pas ce qu'il représente , une ligne????
salut
je suis un peu plus reveillé ce matin.
en fait, le code va affiché un histogramme. En haut, on aura une première ligne avec les lettres de a à z, et en dessous de chacune d'elle une barre verticale. Il y a autant de barres verticales en dessous de la lettre qu'il y a d'occurence de la lettre dans le texte.
Le code va donc afficher toutes les lettres :
for ( j = 0; j < 26; j++ )
{
printf("%c :", j+97);
}
printf("\n");
Ensuite il va parcourir le tableau une fois, pour ecrire la deuxieme ligne, si tab[i] ne vaut pas 0; il met une barre et il passe à la lettre suivante. Une fois arrivé à 26 il passe à la ligne suivante et recommence l'opération avec le tableau qui a été decrémenté à chacune de ces cases.
Ceci est exécuté autant de fois que le nombre maximum du tableau.
C'est la qu'intervient "j"; il va servir à savoir si on a dessiné une barre sur la ligne ou pas.
Si oui, on l'incrémente (il ne vaudra plus 0), et on devra faire la ligne suivante quand on aura fini la ligne en cours.
Si non, j ne sera pas incrémenté, du coup la boucle while va s'arreter. Toutes les lugnes auront été dessiné.
J'espere que j'ai été à peu près clair ^^
je suis un peu plus reveillé ce matin.
en fait, le code va affiché un histogramme. En haut, on aura une première ligne avec les lettres de a à z, et en dessous de chacune d'elle une barre verticale. Il y a autant de barres verticales en dessous de la lettre qu'il y a d'occurence de la lettre dans le texte.
Le code va donc afficher toutes les lettres :
for ( j = 0; j < 26; j++ )
{
printf("%c :", j+97);
}
printf("\n");
Ensuite il va parcourir le tableau une fois, pour ecrire la deuxieme ligne, si tab[i] ne vaut pas 0; il met une barre et il passe à la lettre suivante. Une fois arrivé à 26 il passe à la ligne suivante et recommence l'opération avec le tableau qui a été decrémenté à chacune de ces cases.
Ceci est exécuté autant de fois que le nombre maximum du tableau.
C'est la qu'intervient "j"; il va servir à savoir si on a dessiné une barre sur la ligne ou pas.
Si oui, on l'incrémente (il ne vaudra plus 0), et on devra faire la ligne suivante quand on aura fini la ligne en cours.
Si non, j ne sera pas incrémenté, du coup la boucle while va s'arreter. Toutes les lugnes auront été dessiné.
J'espere que j'ai été à peu près clair ^^