Annonce

Réduire
Aucune annonce.

Cours langage C n°6 - Les itérations

Réduire
Ceci est une discussion importante.
X
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • Cours langage C n°6 - Les itérations

    LES ITÉRATIONS


    Ah enfin ! J'en vois déjà qui vont se dire "on va commencer les choses sérieuses", super... Oui mais vous verrez que tout ce qu'on a vu précédemment est impératif avant même de commencer cette partie, ça fait partie des aléas de tout langage.

    Introduction

    Imaginons, que nous devions trouver tous les nombres paires allant de 0 à 1000, sans itération, on comprend bien le problème

    Code:
    int n;
    
    n = 0;
    
    if (n%2 == 0) /* l'opérateur modulo permettant d'avoir le reste de la division par 2, si ça vaut 0, le nombre est divisible par 2, et donc paire */
    {
        puts("paire");
    }
    else
    {
        puts("impaire");
    }
    
    n = n+1 /* n vaut 1 maintenant */
    
    if (n%2 == 0) /* l'opérateur modulo permettant d'avoir le reste de la division par 2, si ça vaut 0, le nombre est divisible par 2, et donc paire */
    {
        puts("paire");
    }
    else
    {
        puts("impaire");
    }
    
    n = n+1 /* n vaut 2 maintenant */
    
    /* ... et cela jusqu'à n = 1000 */
    Bref c'est impossible, on va économiser encore une fois vos petites mimines...

    La boucle FOR

    On peut traduire cette boucle par pour...

    Sa syntaxe est la suivante:

    Code:
    int i;
    int valeurMax = 1000;
    
    for (i=0; i<valeurMax; i++)
    {
        /* suite du code */
    }
    On la traduirait donc de cette façon

    Code:
    POUR i allant de 0 à valeurMax exclu
        ... suite du code
    Remarques:

    Déclaration de la variable i avant de commencer notre boucle for.
    i++, nouvelle vision d'une incrémentation, n'ayez pas peur, c'est équivalent à i = i+1.
    valeurMax est la valeur jusqu'où i sera incrémentée, mais cette valeurMax sera exclue. Exemple si valeurMax = 1000, i variera de 0 à 999.

    Pour notre problème, on arrive à ce code très simple

    Code:
    int i;
    int valeurMax = 1000;
    
    for (i=0; i<valeurMax; i++)
    {
        if (i%2 == 0)
        {
            puts("paire");
        }
        else
        {
            puts("impaire");
        }
    }
    Simple non? Bon là vous allez voir que de l'affichage du style, paire, impaire, paire, ... etc. Il faudra un peu formater votre affichage avec la fonction printf par exemple.

    La boucle WHILE

    On peut traduire cette boucle par tant que...

    Sa syntaxe est la suivante:

    Code:
    int i = 0;
    int valeurMax = 1000;
    
    while (i < valeurMax)
    {
        /* suite du code */
        i += 1;
    }
    On la traduirait donc de cette façon

    Code:
    Tant que i inférieur à valeurMax
        ... suite du code
        on incrémente i de 1
    Remarques:

    Déclaration et initialisation de la variable i avant de commencer notre boucle while.
    i+=1, nouvelle vision d'une incrémentation, n'ayez pas peur, c'est équivalent à i = i+1 ou i++.
    valeurMax est la valeur jusqu'où i sera incrémentée, mais cette valeurMax sera exclue. Exemple si valeurMax = 1000, i variera de 0 à 999.

    Pour notre problème, on arrive à ce code très simple

    Code:
    int i=0;
    int valeurMax = 1000;
    
    while (i < valeurMax)
    {
        if (i%2 == 0)
        {
            puts("paire");
        }
        else
        {
            puts("impaire");
        }
        i += 1;
    }
    Simple aussi, il ne faut surtout pas oublier l'initialisation de i et l'incrémentation de i, sinon nous aurons droit à une boucle infinie (ne cherchez pas à comprendre) et le système d'exploitation n'aime pas. Si ça vous arrive, essayez d'interrompre votre programme par un CTRL+C, CTRL+Z, voir stoppez net le PC au pire des cas (freeze de l'écran)

    Boucle FOR ou WHILE

    Pourquoi les deux existeraient, si ils peuvent faire le même boulot ?

    Il faut savoir que si vous choisissiez l'un ou l'autre, l'efficacité en change pas, le code machine lue sera strictement le même, donc la machine ne voit pas la différence... Je comprend plus, ça sert à quoi alors d'avoir deux syntaxes ?

    C'est une question de sémantique, de grammaire informatique et de lisibilité du code...

    La boucle for permet la répétition un nombre de fois défini à l'aide d'un compteur
    La boucle while permet la répétition autant de fois qu'il le faut tant que la condition n'est pas remplie


    EXERCICES

    Exercice n°1

    Compléter le code suivant

    Code:
    #include <stdio.h>
    
    int main (void)
    {
        int multiplicateur = 7;
    
        int i;
        /* boucle for ou while + affichage de l'opération et résultat */
    
        return 0;
    
    }
    le principe est l'affichage de table de multiplication par 7 pour des valeurs allant de 0 à 10 inclus, à vous d'utiliser
    • boucle for
    • boucle while (initialiser i)


    Merci de m'avoir lu et à bientôt pour le prochain cours

  • #2
    Voici pour moi avec la boucle For:

    Code:
    #include <stdio.h>
    
    int main(void)
    {
        int multiplicateur = 7;
    
        int i;
        /* boucle for ou while + affichage de l'opération et résultat */
        for (i=0;i<=10;i++)
        
         printf(" %2d  x 7 = %2d\n",i,i*7);
        
        return 0;
    
    }
    Puis avec la boucle While :

    Je planche dessus

    Commentaire


    • #3
      Voici pour moi avec la boucle For:

      Code:
      #include <stdio.h>
      
      int main(void)
      {
          int multiplicateur = 7;
      
          int i;
          /* boucle for ou while + affichage de l'opération et résultat */
          for (i=0;i<=10;i++)
          
           printf(" %2d  x 7 = %2d\n",i,i*7);
          
          return 0;
      
      }
      Puis avec la boucle While :

      Code:
      #include <stdio.h>
      
      int main(void)
      {
          int multiplicateur = 7;
      
          int i=0;
          /* boucle for ou while + affichage de l'opération et résultat */
          while (i<=10)
      {
          printf(" %2d  x 7 = %2d\n",i,i*7);
          i += 1;
      }
          return 0;
      
      }
      En fait facile le 2nd juste que j'avais mis i=0; et oublier le int du coup ca me renvoyer 0x 0x etc... et une erreur int mais vu que le log donne la nature du bug en réflechissant un peu ca a passer tout seule les 2 sont fonctionnels.

      Commentaire


      • #4
        Ok, mais pourquoi avoir mis 7 (on connaît le nom de la variable) dans ton printf ?

        Commentaire


        • #5
          Effectivement bien vu le soucis est que je code trop vite ,j'oublis des ; des valeurs du coup souvent je fait des petites erreurs grossières.Je voulais garder le timbre de ton exercice du coup j'ai mis 2X.
          Code:
          #include <stdio.h>
          
          int main(void)
          {
              
              int i;
              /* boucle for ou while + affichage de l'opération et résultat */
              for (i=0;i<=10;i++)
              
               printf(" %2d  x 7 = %2d\n",i,i*7);
              
              return 0;
          
          }
          Code:
          int main(void)
          {
              
          
              int i=0;
              /* boucle for ou while + affichage de l'opération et résultat */
              while (i<=10)
          {
              printf(" %2d  x 7 = %2d\n",i,i*7);
              i += 1;
          }
              return 0;
          
          }

          Commentaire


          • #6
            Oui mais le 7 dans ton printf, j'en veux plus en fait. En gros le 7 n'est présent qu'à l'initialisation de la variable multiplicateur, tu vois ?

            Commentaire


            • #7
              OK je pense avoir compris mon erreur j'ai remis 7 alors que je lui ai donner déjà une interprétation : J'ai tout repris à zero je vais trop vite je sais et je commet des erreurs.Mais bon j'apprends de mes erreurs.

              Code:
              int main(void)
              {
                  int multiplicateur = 7;
              
                  int i;
                  /* boucle for ou while + affichage de l'opération et résultat */
                  printf("  Table de 7:  \n");
                  printf("________________\n");
                  for (i=0; i<=10; i++)
                  {
                      printf(" %d  x %d =%d \n",i,multiplicateur,i*7);
              
                  }
                  return 0;
              
              }
              et

              Code:
              int main(void)
              {
                  int multiplicateur = 7;
              
                  int i=0;
                  /* boucle for ou while + affichage de l'opération et résultat */
                  printf("  Table de 7:  \n");
                  printf("________________\n");
                  while (i<=10)
                  {
              
                      printf(" %d  x %d =%d \n",i,multiplicateur,i*7);
                      i += 1;
                  }
                  return 0;
              
              }
              Dernière modification par DreAmuS, 03 juillet 2014, 16h48.

              Commentaire


              • #8
                Ok ça roule, on aurait pu juste enlever le "Table de 7:" de la boucle (le placer avant la boucle) car l'affichage fait répétitif, mais sur le principe, les boucles tu as compris...

                Commentaire


                • #9
                  Salut ! :s

                  Code:
                  #include <stdio.h>
                  
                  int main (void)
                  {
                      int multiplicateur = 7;
                      int valeurMax = 10;
                      int i;
                  
                      printf("Table de multiplication par 7 :\n\n");
                  
                      for(i=0; i < valeurMax + 1; i++)
                      {
                          printf("%d * %d = %d\n", multiplicateur, i, i*multiplicateur);
                      }
                  
                      return 0;
                  
                  }
                  deux et deux font cinq

                  Commentaire


                  • #10
                    Bonjour et merci

                    Code:
                    #include <stdio.h>
                    
                    int main (void)
                    {
                        int multiplicateur = 7;
                        int max = 11;
                        int resultat;
                        int i = 0;
                    
                        /* Exercice 1 */
                    
                        for (i=0; i<max; i++)
                        {
                            resultat = i * multiplicateur;
                            printf("%d * %d = %d\n", i, multiplicateur, resultat);
                        }
                    
                        /* Exercice 2 */
                    
                        while (i<max)
                        {
                            resultat = i * multiplicateur;
                            printf("%d * %d = %d\n", i, multiplicateur, resultat);
                            i++;
                        }
                    
                        return 0;
                    
                    }

                    Commentaire


                    • #11
                      Exercice n°1:

                      Code:
                      #include <stdio.h>
                      
                      int main (void)
                      {
                          int multiplicateur = 7;
                      
                          int i;
                          /* boucle for ou while + affichage de l'opération et résultat */
                          puts("Table de multiplication de 7 ! \n");
                          puts("\n Boucle for : \n");
                          for (i=0; i<11; i++)
                              printf("%d * %d = %d \n", multiplicateur, i, i*multiplicateur);
                          puts("\n Boucle while : \n");
                          i = 0;
                          while (i<11)
                          {
                              printf("%d * %d = %d \n", multiplicateur, i, i*multiplicateur);
                              i++;
                          }
                          puts("\n Done ! \n");
                      
                          return 0;
                      
                      }
                      Pour l'instant je comprends tout, merci pour tout ce travail !
                      Mon blog : http://rootsheep.info

                      Commentaire


                      • #12
                        Pour l'instant je comprends tout, merci pour tout ce travail !
                        Bouton Thanks

                        Commentaire

                        Chargement...
                        X