Pair / impair / ascii

Bonjour , j'aimerais savoir quel est le signe pair ou impair en langage c , mettons si j'ai la variable a et que je veux écrire si a est impair , en C çà donne quoi , a = '?';
autre chose , si je veux que la variable a me représente une lettre , je peux écrire a = 'b'; et ensuite putchar(a); mais j'aimerais déclarer la lettre b par son code ascci , comment faire svp?

merci

14 réponses

  • Votes
  • Date
  • Date décroissante
  1. euh je n'ai pas très bien saisi , peux tu me donner un exemple avec putchar(a) , car je ne comprends vraiment pas...
    1. Modérateur
      [lamitest@localhost bin]$ cat ascii_char.c
      #include <stdio.h>
      
      main()
      {
       char c;
       int i=65; /*code ASCII du la lettre A */
      
       c=i; /* affectation du entier i à une variable caractère */
       putchar(c); /* affiche A */
       putchar('\n');
      }
      [lamitest@localhost bin]$ gcc -o ascii_char ascii_char.c
      [lamitest@localhost bin]$ ./ascii_char
      A
      [lamitest@localhost bin]$
      
      1. Modérateur
        Salut,

        1.

        Un numéro impaire a la forme

        2k+1 (non divisible avec 2)

        Un numéro paire à la forme

        2k ( divisible avec 2)

        Utilise l'opérateur % (modulo) pour tester le reste de la division d'un entier avec 2

        2.

        Pour obtenir le code ASCII d'un caractère il suffit d'affecter le caractère à une variable entière.

        i=c

        Pour obtenir le caractère qui correspond à un code ASCII il suffit d'affecter l'entier à une variable caractère

        c=i
        1. Modérateur
          Re,

          Pour les Majuscules

          65 à 90

          Pour les minuscules

          97 à 122

          donc c'est bien +32

          Prenons 2 exemples:

          Code paire
          -----------------------------------------------
          On teste le code ASCII 66qui correspond à B.
          
          Donc en ce cas 66 est paire puisque 66 se divide avec 2. Ou le reste de la division 66 avec 2 égal 0.
          
          la répresentation de 66dans la forme 2k est 2 x 33
          
          En C tu teste le reste avec l'opérateur % (modulo)
          Donc que fait modulo? Il recupere le reste d'une division
          
          i=66
          j=2
          reste=i%j ( en ce cas reste égal 0)
          
          si reste égal 0
          alors paire ->putchar( code +32)   affiche minuscule
          sinon impaire ->putchar(code)  affiche majuscule


          ---------------------------------------------------------------
          Code impaire
          -----------------------------------------------
          On teste le code ASCII 65 qui correspond à A.
          
          Donc en ce cas 65 est impaire puisque 65 ne se divide pas avec 2. Ou le reste de la division 65 avec 2 égal 1.
          
          la répresentation de 65 dans la forme 2k +1 est 2 x 32 +1
          
          En C tu teste le reste avec l'opérateur % (modulo)
          Donc que fait modulo? Il recupere le reste d'une division
          
          i=65
          j=2
          reste=i%j (en ce cas reste égal 1)
          
          si reste différent de 0
          alors impaire ->putchar( code)   affiche majuscules
          sinon paire ->putchar(code+32)  affiche minuscule
          


          Tu crois que c'est clair?
          1. ok , çà va mieux avec ton exemple , et pour tester si le code d'une lettre est impair ou pair , as tu un indice à me donner ? ( pas de code tout fait stp ) , car en fait moi je veux coder une fonction qui m'affiche l'alphabet en écrivant une lettre en majuscule sur 2 , donc mon algo dans ma tête c'est :

            tant que le code ascii est pair , on affiche en minuscule , si le code est impair on affiche en majuscule ( c'est +32 je crois ) , donc çà c'est clair , mais il me faut un indice pour dire en C : si le code de la lettre est pair , tu me dis 2k + 1 , reste de division différent de 2 , c'est pas clair ans mon esprit...
            1. je ne comprends vraiment pas "Donc en ce cas 66 est paire puisque 66 se divise avec 2. Ou le reste de la division 66 avec 2 égal 0."

              66%2 = 33 , quel rapport avec le reste = 0 , je suis un peu perdu là , c'est ce putin de pair et impair qui me bloque , et le nombre de variables à déclarer ...
              1. Modérateur
                66%2 n'est pas égal avec 33 mais avec 0

                Donc 66 % 2 donne le reste de la division du numéro 66 avec 2

                Numéro paire

                C'est un numéro qui se divide par 2. Ou qui est divisible avec 2.

                2 4 6 8

                2 divisé par 2 égal 1 reste 0 ( 2 * 1 = 2)
                4 divisé par 2 égal 2 reste 0 ....
                6 divisé par 2 égal 3 reste 0 .....
                8 divisé par 2 égal 4 reste 0 ( 2 * 4 = 8) donc la forme 2 * k

                Numéro impaire

                C'est un numéro qui ne se divise pas avec 2. Ou qui n'est pas divisible avec 2

                3 5 7 9

                3 divisé par 2 égal 1 reste 1 (2 * 1 + 1 = 3)
                5 divisé par 2 égal 2 reste 1 .......
                7 divisé par 2 égal 3 reste 1 ......
                9 divisé par 2 égal 4 reste 1 (2 * 4 +1 = 9) donc la forme 2 * k +1

                Maintenant tu comprends?

                Donc en ce cas 66 est paire puisque 66 se divise avec 2.

                Ou le reste de la division 66 avec 2 égal 0."

                Le deux affirmations sont vraies.
                1. Modérateur
                  En fait si tu as remarqué dans mon message précedent, le reste de la division des numéros avec 2 est :

                  0 pour les numéros paires
                  et
                  1 pour les numéros impaires

                  Donc pour tester si un numéro est pair ou impair il faut tester le reste de la division du numéro avec 2.

                  Si reste égal 0 alors pair
                  Si reste égal 1 alors impair

                  Et le reste tu l'obtiens avec l'opérateur %.

                  Tu comprends maintenant?
                  1. ben alors je crois que je ne savais pas ce que voulait dire l'opérateur modulo , quand on écrit 100 % 2 , çà donne 50 - 0 ? modulo = résultat + reste? et combien de variables faut il utiliser ?
                    1. Modérateur
                      100 % 50 égal 0

                      le résultat du modulo c'est le reste de la division

                      101 : 50 = 2 reste 1 donc 101 % 50 = 1

                      si tu veux

                      Numéro = Quotient * Diviseur + Reste

                      101 = 2 * 50 + 1 = 100 + 1 = 101

                      Reste = Numéro - Diviseur * Quotient

                      1 = 101 - 50 * 2 = 101 - 100 = 1

                      Le résultat du modulo c'est le reste. Plus clair que ça désolé mais je ne peux pas.
                      1. #include  <stdio.h>
                        
                        int main()
                        
                        {
                        
                        char c = a;
                        
                        while ( c <= z )
                        ++c;
                        if ( c % 2 != 0 )
                        putchar(c);
                        if ( c % 2 = 0 )
                        putchar(c+32);
                        return 0;
                        
                        }
                        


                        qu'est ce qui ne va pas dans ce code?
                        1. Modérateur
                          Il y a des erreur de syntaxe par exemple

                          char c = a;

                          il faut écrire

                          char c='a';

                          Pour while il faut utiliser des accolades pour le bloc d'instructions.

                          Pour les tests c'égalité on utilise == et pas = qui correspond à une affectation.

                          Donc il faut se documenter un peu avant de commencer la programmation.

                          http://c.developpez.com/
                          http://membres.lycos.fr/tonysoueid/cour_c/cour_1/
                      2. #include  <stdio.h>
                        
                        int main()
                        
                        {
                        
                        char c = 'a';
                        
                        while ( c <= ' z' )
                        {
                        ++c;
                        if ( c % 2 != 0 )
                        putchar(c);
                        if ( c % 2 == 0 )
                        putchar(c+32);
                        }
                        return 0;
                        
                        }
                        
                        
                        


                        quand j'exécute ce code , j'ai cegikmoqsuwy...