Partage
  • Partager sur Facebook
  • Partager sur Twitter

for(x=x;...)

Sujet résolu
    23 septembre 2018 à 23:48:54

    Bonjour, 

    La semaine dernière, j'ai eu une interro en C et on m'a compté une erreur pour " for(x=x ; x<=y ; x++)  ", en disant qu'il fallait mettre une autre variable que x pour l'initialisation. J'ai testé comme ça et ça marche, donc y a t-il une raison particulière pour ne pas faire ça ?

    Merci d'avance ^^

    -
    Edité par ConanGuy 23 septembre 2018 à 23:49:39

    • Partager sur Facebook
    • Partager sur Twitter
      24 septembre 2018 à 0:09:59

      Hello,

      Faut avouer que x=x ça ne rime pas à grand chose.

      Si tu n'as pas d'initialisation pour ta boucle for, tu écris for( ; x <= y ; x++)

      -
      Edité par edgarjacobs 24 septembre 2018 à 0:14:18

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        24 septembre 2018 à 12:33:53

        Ça dépend de ce qu'était censée faire la boucle. S'il s'agissait de parcourir tous les nombres de x à y, ça peut marcher, mais ça aura modifié la valeur de x. En général, c'est une erreur de modifier la valeur de x. Mais ça dépend du contexte.
        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2018 à 13:18:44

          Et si x n'était pas précédemment initialisée, c'est un undefined behavior.

          • Partager sur Facebook
          • Partager sur Twitter

          Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

            24 septembre 2018 à 18:16:43

            Oui mais le problème serait le même avec le for attendu : for (int i = x ; i <= y ; i++). Pour moi, le « vrai » problème de la boucle de ConanGuy, c'est qu'on modifie x.

            • Partager sur Facebook
            • Partager sur Twitter
              24 septembre 2018 à 18:52:36

              @robun
              int x=0,y=32;
              int k[32];
              
              for(;x<y;x++)
                  k[x]=x;
              
              Je modifie x, où est le souci ?

              -
              Edité par edgarjacobs 24 septembre 2018 à 18:54:59

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                25 septembre 2018 à 10:02:38

                Ça dépend du contexte. Imaginons un programme qui gère des contrats de location. On veut connaître la somme totale des loyers perçus durant un contrat. Pour ça, on a besoin d'un boucle allant de la première année du contrat à la dernière année, qu'on peut appeler x et y (par exemple). Si on utilise cette même variable x comme indice de boucle, on perd l'information sur la première année du contrat. Après, si c'est fait dans une fonction où x est recopié par valeur, pas de souci, sauf si cette fonction a encore besoin de la date de première année de contrat après la boucle.

                Autre exemple : on souhaite extraire une sous-matrice dans une matrice, par exemple on veut aller de la x-ème ligne à la y-ème ligne, et de même avec les colonnes. Si la boucle interne modifie sa valeur initiale, ça n'ira pas car on a encore besoin de cette valeur pour l'itération externe suivante.

                À mon avis ce n'est pas pour rien que le C, depuis 1999, permet de déclarer une variable de boucle interne à la boucle.

                Mais bon, je dis des banalités.

                -
                Edité par robun 25 septembre 2018 à 10:04:58

                • Partager sur Facebook
                • Partager sur Twitter

                for(x=x;...)

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown