Compréhension en C
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

Compréhension en C



  1. #1
    poche49

    Compréhension en C


    ------

    bonjour je suis débutant en C et je ne comprends pas tous ce programme :
    Code:
    void Chaine_convertirEntierEnChaine(char* dest, int valeur, int base) { 
       int digit;
     
       /* Allocation d'un tableau temporaire qui contiendra la chaîne résultat.
        * On la remplira en partant de la fin.
        * On positionne dont le pointeur ptr sur le dernier élément de ce tableau,
        * dans lequel on place le zéro de fin de chaîne.
        *
        * On alloue 33 octets : si le nombre doit être mis en forme en base 2, il faudra
        * au plus 32 caractères pour le représenter (1 caractère par bit)
        * + 1 octet pour le zéro terminal. */
       char tmp[33];
       char* ptr = &tmp[32]; 
       *ptr = 0; // ICI, Je ne comprends ce qu'il fait
     
       /* En base 10, un nombre négatif est noté avec un signe '-',
        * suivi de la valeur absolue du nombre */
       if(base == 10 && valeur < 0) { 
          valeur = -valeur;
          *dest = '-'; // ICI, Je ne comprends ce qu'il fait
          dest++; // ICI, Je ne comprends ce qu'il fait
       }
     
       /* La conversion s'effectue par divisions successives.
        * A chaque tour de boucle, on extrait un nouveau digit du nombre.
        * La progression se fait du digit le moins significatif au plus significatif. */
       do {
          /* Les digits sont obtenus par divisions successives du nombre à convertir
           * par la base de conversion */
          digit = (unsigned)valeur % base;
          valeur = (unsigned)valeur / base;
     
          /* La chaîne destination se remplit en partant de la fin.
           * Avant d'insérer un nouveau digit, on recule le pointeur d'une position. */
          --ptr;
     
          /* Si le digit est compris entre 0 et 9, on insère le code ASCII du caractère correspondant,
           * sinon, on insère le code ASCII d'une lettre */
          if(digit < 10)
             *ptr = digit + '0'; // ICI, Je ne comprends ce qu'il fait
          else
             *ptr = digit - 10 + 'A'; // ICI, Je ne comprends ce qu'il fait
     
          /* La conversion se poursuit jusqu'à ce que le nombre à convertir soit nul */
       } while(valeur != 0);
     
       /* Pour finit, on copie la chaîne temporaire à l'adresse destination */
       Chaine_copier(dest, ptr); 
    }
    Merci d'avance

    -----

  2. #2
    invite765732342432
    Invité

    Re : Compréhension en C

    Cette fonction est hyper-commentée... on peut difficilement faire plus compréhensible !
    Pour expliquer la totalité de cette fonction, il suffit de rassembler les commentaires...

    Qu'est-ce que tu ne comprends pas, précisément ?

  3. #3
    invite765732342432
    Invité

    Re : Compréhension en C

    Je viens de remarquer tes propres commentaires:
    *ptr = 0; // ICI, Je ne comprends ce qu'il fait
    A priori, il met le caractère "fin de chaine" à la dernière position de la chaine.
    Mais je n'aime pas trop cette façon de faire.

    *dest = '-'; // ICI, Je ne comprends ce qu'il fait
    Ben... il met le caractère '-' dans la chaine... peut-être parce que c'est un nombre négatif, non ?

    dest++; // ICI, Je ne comprends ce qu'il fait
    Là... c'est un gros problème: c'est une utilisation basique des pointeurs... On ne peut pas t'expliquer ça sans un cours complet sur les pointeurs (tu peux en trouver sur le net)

    *ptr = digit + '0'; // ICI, Je ne comprends ce qu'il fait
    Ca c'est un 'truc' assez connu: c'est la conversion d'un chiffre en caractère dans la table ASCII (si tu ne connais pas, il faut que tu te renseignes à ce sujet)

    *ptr = digit - 10 + 'A'; // ICI, Je ne comprends ce qu'il fait
    Ben là, c'est pour obtenir la "digit-10"ème lettre de l'alphabet...


    Note: c'est du code de base. Si tu as des problèmes de compréhension, il faut revoir l'intégralité de tes cours. Chercher à comprendre une fonction toute faite va créer en toi des incompréhensions graves que tu auras énormément de mal à corriger plus tard.

Discussions similaires

  1. Compréhension
    Par nicom974 dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 02/11/2008, 09h59
  2. problème de compréhension
    Par invite349478b9 dans le forum Chimie
    Réponses: 4
    Dernier message: 01/08/2008, 21h56
  3. le phénomène de compréhension
    Par franky04 dans le forum Psychologies (archives)
    Réponses: 5
    Dernier message: 12/10/2007, 16h34
  4. compréhension
    Par invite96641ddb dans le forum Physique
    Réponses: 1
    Dernier message: 21/08/2007, 11h17
  5. Compréhension de schéma
    Par invitefd5637a0 dans le forum Électronique
    Réponses: 1
    Dernier message: 13/05/2006, 14h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.