Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment sortir une valeur d'un for pour l'échanger

    29 septembre 2021 à 12:14:16

    Salut, j’ai un problème... Je veux sortir une valeur de depuis les deux for (ex : n = 1 ou n = ... 3) et les echanger mais ça ne marche pas, les variables que j’ai réservées au stockage ne stockent pas bien... Je travaille sur geany et j’apprends C.
    ```
    #include <stdlib.h>
    #include <stdio.h>
    
     int boucle (){
        int n,x,z;
        printf("wich range value  for the list ?");
        scanf("%d", &x);
        for (n = 1;  n<=x ;n++){
        
          printf(" n = %d\n", n);
    }
    printf("wich value z do you wish to put out of the list ?");
        scanf("%d", &z);
        z = n;
        printf("z =%d", z);
        return z;
        
    }
    
        
        
    
    
     int boucle2(){
        int a,y,r;
        printf("wich value for the list ?");
        scanf("%d%d", &y,&r);
        for (a = 10; a >=y ; a--){
        
        printf("a = %d\n", a);
    }
        r = a;
        printf("r = %d", r);
        return r;
    
        
    }
    
     void reverse (int *r, int *z){
         int boucle();
         int boucle2();
         int StockageValue;
         StockageValue = *r;
         *r = *z;
         *z = StockageValue;
         printf("%d%d", r,z);
        
    }
        
        
        
    
    
        
    
    
    
    
     int main(void){
        int a,b;
        boucle();
        boucle2();
        reverse(&a, &b);
        printf("a = %d et b = %d", a,b);
        
    
         return 0;
    
    }


    ```

    -
    Edité par AdJR1 29 septembre 2021 à 12:15:10

    • Partager sur Facebook
    • Partager sur Twitter
      29 septembre 2021 à 13:41:19

      Il y a de nombreux problème dans ton code !

      Si on prend rien que ta fonction main : tu déclares deux variables a et b non initialisée,

      ensuite tu appelles deux fonctions qui n'ont aucune influence sur la suite de ta fonction main,

      ensuite tu échanges les deux variables a et b (toujours non initialisé),

      et tu affiches tes deux variables non initialisées.

      La fonction d’échange qui fonctionne, mais qui a deux déclaration de fonction dans son bloc, qu'on se demande ce qu'elle viennent faire ici et un affichage bancale qui n'a rien a y faire.

      Pour ce qui est des deux autre fonctions, je n'ai pas vraiment compris ce que tu cherche à faire avec. Dans leur boucles for il n'y a que de l'affichage, je ne vois pas ce que tu veux sortir de ces boucles ? Une petite explication s'impose.

      • Partager sur Facebook
      • Partager sur Twitter
      ...
        29 septembre 2021 à 14:37:07

        mon but est de dresser une liste de valeur incrémentée de 1 grâce à mes boucles for et de choisir un cran de chacune des listes et de les échanger grâce à la fonction reverse les printf sont là pour m'assurer que les valeurs sont les bonnes exemple : z au lieu de prendre la valeur n que je veux lui attribuer s'affiche systématiquement comme valant 11 ce qui cause des soucis
        • Partager sur Facebook
        • Partager sur Twitter
          29 septembre 2021 à 15:07:50

          Ce n'est pas plus clair qu'avant ?!

          Allons y doucement, dresser une listes de valeur ? Qu'entends tu par liste de valeur ? As-tu créé ta liste de valeurs ?

          AdJR1 a écrit:

          les printf sont là pour m'assurer que les valeurs sont les bonnes...

          avec des printf de la sorte :

               printf("%d%d", r,z);

          tu ne dois pas voir grand chose.



          • Partager sur Facebook
          • Partager sur Twitter
          ...
            29 septembre 2021 à 15:09:42

            Alors, je dois être fatigué aujourd'hui ... je n'ai rien compris.
            Donnes un exemple avec des nombres.
            Sortir une valeur d'un for ou enlever un élément d'un tableau?
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              29 septembre 2021 à 15:21:12

              je vais essayer d'être plus clair : j'ai dressé deux liste de valeur grâce à deux boucle for bornées par un scanf chacune, l'une s'incrémente de 1 et l'autre se décrémente de 1, donc pour la première boucle le compilateur affichera 1,2,3...  jusqu'à n, ce que je veux c'est trouver comment parcourir chacune des boucles de choisir le rang qui me convient pour chacune afin que les valeurs correspondant aux rangs sélectionnés soient échangées grâce à la fonction reverse.
              • Partager sur Facebook
              • Partager sur Twitter
                29 septembre 2021 à 15:45:09

                AdJR1 a écrit:

                j'ai dressé deux liste de valeur grâce à deux boucle for bornées par un scanf chacune

                Pour info les boucle for sont bornées par des accolades { }, scanf sert à faire des saisies utilisateur !

                Personnellement, je ne vois aucune liste, c'est pour cela que je te demande : qu'entends tu par liste ?

                AdJR1 a écrit:

                donc pour la première boucle le compilateur affichera 1,2,3...  

                Le compilateur affiche les warnings et les erreurs de ton code lors de la compilation !

                Au vu de ton code, tu devrais réviser ton cours et reprendre ton problème du départ, parce que là, c'est très mal engagé et on a des difficultés à comprendre ce que tu veux faire. Si c'est un exercice, poste l'intitulé de l'exercice, on comprendra peut-être mieux.





                • Partager sur Facebook
                • Partager sur Twitter
                ...
                  29 septembre 2021 à 15:48:38

                  Tu affiches des valeurs incrémentées, par exemple : 1, 2, 3, 4, 5

                  Tu affiches des valeurs décrémentées, par exemple : 10, 9, 8, 7

                  Tu demandes à l'utilisateur une valeur de la première liste, exemple : 4

                  Tu demandes à l'utilisateur une valeur de la seconde liste, exemple : 9

                  Il faut alors afficher :

                  1, 2, 3, 9, 5

                  10, 4, 8, 7

                  Est-ce que c'est bien ça ?

                  Si oui :

                  • Tu ne sais pas expliquer un problème. Il faut être précis et donner des exemples.
                  • Il faut mémoriser les valeurs dans un tableau. Par exemple tab1 et tab2. Pour les échanger, il faudra trouver les indices i et j correspondant, et appeler la fonction d'échange avec &(tab1[i]) et &(tab2[j]).

                  -
                  Edité par robun 29 septembre 2021 à 15:51:02

                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 septembre 2021 à 17:57:40

                    qu'est ce que ça veut dire "sortir une valeur d'un for" ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      29 septembre 2021 à 17:59:19

                      dans les choses qui vont pas, ligne 13, z correspond à la saisie utilisateur; ligne 14, z vaut n (valeur de sortie de ta boucle)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        29 septembre 2021 à 18:02:57

                        > qu'est ce que ça veut dire "sortir une valeur d'un for" ?
                        De la même façon que tu sort ta boule de cristal ...
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                          29 septembre 2021 à 18:17:42

                          robun a écrit:

                          Tu affiches des valeurs incrémentées, par exemple : 1, 2, 3, 4, 5

                          Tu affiches des valeurs décrémentées, par exemple : 10, 9, 8, 7

                          Tu demandes à l'utilisateur une valeur de la première liste, exemple : 4

                          Tu demandes à l'utilisateur une valeur de la seconde liste, exemple : 9

                          Il faut alors afficher :

                          1, 2, 3, 9, 5

                          10, 4, 8, 7

                          Est-ce que c'est bien ça ?

                          Si oui :

                          • Tu ne sais pas expliquer un problème. Il faut être précis et donner des exemples.
                          • Il faut mémoriser les valeurs dans un tableau. Par exemple tab1 et tab2. Pour les échanger, il faudra trouver les indices i et j correspondant, et appeler la fonction d'échange avec &(tab1[i]) et &(tab2[j]).

                          Si tu as deviné juste BRAVO !

                          Sur les arguments à passer à la fonction d'échange on peut faire plus simple sans les parenthèses, donc : &tab1[i] et &tab2[j].

                          La raison est que, selon la norme du C, & et [] sont des opérateurs, et que l'opérateur [] a préséance sur l'opérateur &. C'est donc bien l'adresse de l'emplacement où se trouve l'élément i ou j du tableau qui sera renvoyée sans qu'il soit nécessaire d'ajouter des parenthèses.

                          https://en.cppreference.com/w/c/language/operator_precedence

                          • Partager sur Facebook
                          • Partager sur Twitter

                          comment sortir une valeur d'un for pour l'échanger

                          × 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