Explication sur un code

johan -  
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 :

#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

6 réponses

johan
 
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;
}
0
CrazyCanuck Messages postés 66 Statut Membre 67
 
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é...
0
johan
 
ben je ne comprends pas , j ne peut pas valloir 0 , vu que on l'incrémente dans le for ?
0
Ne0 Messages postés 52 Statut Membre 3
 
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
johan
 
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????
0
Ne0 Messages postés 52 Statut Membre 3
 
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 ^^
0