Rechercher : dans
Par :

Explication sur un code

Dernière réponse le 1 déc 2005 à 10:07:20 johan, le 30 nov 2005 à 23:57:01 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « explication sur un code » dans :
Le codage binaire Voir Présentation du binaire Bit Poids des bits Conversions Octet KiloOctets, MégaOctets Opérations en binaire Addition binaire Multiplication binaire Présentation du binaire Vers la fin des années 30, Claude Shannon démontra qu'à l'aide...
On peut cacher le code source d'une page HTML VoirMythe: On peut cacher le code source d'une page HTML. Réalité: FAUX. Explications: Pour pouvoir afficher une page web (HTML), le navigateur doit - à un moment où un autre - avoir le code HTML en clair. Il y a donc toujours moyen de le...
Il est possible de récupérer le code source PHP d'un site VoirMythe Un utilisateur peut récupérer le code source PHP d'un site web comme il peut récupérer le code HTML. Réalité FAUX Explications Les fichiers PHP (ASP, JSP, etc.) sont des fichiers interprétés côté serveur, ce qui signifie que le serveur web...
Codes d'erreur de Windows VoirLa liste ci-dessous détaille les codes d'erreur s'affichant dans les boîtes de dialogue sous Windows : Code Description ------------------------ 1 Fonction incorrecte. 2 Le fichier spécifié est introuvable. 3 Le chemin d'accès spécifié...
Télécharger Vista Codec Package VoirVista Codec Package est un ensemble de codec audio et vidéo. Il prend en charge les formats de fichier suivant : xvid, Windows Media Video 9, ffdshow, ogg, ac-3 acm, mpg, avi et bien plus encore. Lors de l’installation, vous pouvez choisir les...
Télécharger K-Lite Codec Pack Full VoirK-Lite Codec Pack est une collection de codecs et de filtres nécessaires pour encoder ou décoder des formats audio ou vidéo. K-Lite Codec Pack Full embarque l'ensemble des codecs et filtres nécessaires pour la plupart des formats audio et vidéo...
Code ASCII VoirLe codage des informations Le morse a été le premier codage à permettre une communication longue distance. C'est Samuel F.B.Morse qui l'a mis au point en 1844. Ce code est composé de points et de tirets (un codage binaire en quelque sorte...). Il...
Le codage RGB (RVB) VoirLe codage RGB Le codage RGB (Red, green, blue, pour Rouge Vert Bleu, en français RVB), mis au point en 1931 par la Commission Internationale de l'Eclairage (CIE) consiste à représenter l'espace des couleurs à partir de trois rayonnements...
Compression vidéo (codecs) VoirNotion de codec Une image d'une vidéo non compressée occupe une taille d'environ 1 Mo. Afin d'obtenir une vidéo paraissant fluide il est nécessaire d'avoir une fréquence d'au moins 25 ou 30 images par seconde, ce qui produit un flux de données...

1

johan, le 1 déc 2005 à 00:00:30

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;
}

Répondre à johan

2

CrazyCanuck, le 1 déc 2005 à 00:36:07

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é... Before asking a question, did you Googled it?

Répondre à CrazyCanuck

3

johan, le 1 déc 2005 à 00:58:08

Ben je ne comprends pas , j ne peut pas valloir 0 , vu que on l'incrémente dans le for ?

Répondre à johan

4

Ne0, le 1 déc 2005 à 01:00:52

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. Ne0

Répondre à Ne0

5

johan, le 1 déc 2005 à 02:06:59

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????

Répondre à johan

6

 Ne0, le 1 déc 2005 à 10:07:20

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 ^^ Ne0

Répondre à Ne0