Partage
  • Partager sur Facebook
  • Partager sur Twitter

Combinaison 4chiffre while

    5 août 2019 à 23:09:03

    bonsoir je suis confronter a un petit soucis j'ai pour énoncer de d'afficher toutes les différentes combinaison de deux nombres entre 00 et 99 dans l'ordre croissant 

    exemple :

    $>./a.out | cat -e
    00 01, 00 02, 00 03, 00 04, 00 05, ..., 00 99, 01 02, ..., 97 99, 98 99$>


    #include <unistd.h>
     
    int ft_putchar(char c)
    {
        write(1, &c, 1);
    }
    
     void ft_print_comb2(void)
     {
         int a;
         int b;
         int c;
         int d;
    
         while (a <= 9)
         {
             b = 0;
             while(b <= 9)
             {
                 c = 0;
                 while (c <= 9)
                 { d = 0;
                     while (d <= 9)
                     { 
                         ft_putchar(48 + a);
                         ft_putchar(48 + b);
                         ft_putchar(' ');
                         ft_putchar(48 + c);
                         ft_putchar(48 + d);
                         ft_putchar(',');
                         d++;
                     }
                   c++; 
                 }
                b++;
             }
             a++;
         }
     }
     int main ()
     {
         ft_print_comb2();
     }

    Sauf que sur la sortie ma dernière combinaison correspond a ça 

    99 98,99 99$


    j'ai un soucis au niveau de l'ordre d'incrémentation je crois

    si quelqu'un pourrais m'aidez merci 


    -
    Edité par leprincefou 5 août 2019 à 23:09:51

    • Partager sur Facebook
    • Partager sur Twitter
    Notre mesure du possible rend possible l'impossible  
      6 août 2019 à 1:13:01

      Il doit sûrement y avoir moyen de trouver une solution encore plus compliquée que la tienne, mais celle que je te propose est tout de même plus simple et répond à l'énoncé:

      #include <stdio.h>
      
      int main()
      {
      	for (int i = 0; i < 100; i++)
      		printf("%02d ", i);
      }



      -
      Edité par zoup 6 août 2019 à 1:13:14

      • Partager sur Facebook
      • Partager sur Twitter
        6 août 2019 à 5:08:06 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


          6 août 2019 à 5:09:31

          je n'est pas le droit d'utiliser for ni printf d'où la raison "compliquée" est ton code ne répond pas a l'énoncé 

          Si au moins tu pouvais me donner des piste 

          -
          Edité par leprincefou 6 août 2019 à 5:11:58

          • Partager sur Facebook
          • Partager sur Twitter
          Notre mesure du possible rend possible l'impossible  
            6 août 2019 à 7:32:34

            La variable a n'est pas initialisée.

            Et remarque que dans l'exemple, on n'a pas 01 00. Les deux nombres DANS L'ORDRE CROISSANT c'est écrit merdekoi.

            Essaie de prendre le probleme par le bon bout

            1. Boucle qui produit les paires de nombres (entiers)

            2. Les afficher (une fonction pour ne pas le faire deux fois)

            -
            Edité par michelbillaud 6 août 2019 à 7:40:14

            • Partager sur Facebook
            • Partager sur Twitter
              6 août 2019 à 15:18:07

              leprincefou a écrit:

              je n'est pas le droit d'utiliser for ni printf d'où la raison "compliquée" est ton code ne répond pas a l'énoncé 

              Si au moins tu pouvais me donner des piste 

              -
              Edité par leprincefou il y a environ 10 heures


              ???

              Mon code répondait parfaitement à ton énoncé.

              Merci de proposer un énoncé complet la prochaine fois afin de gagner du temps.

              Du coup, on a le droit à quoi finalement.

              -
              Edité par zoup 6 août 2019 à 15:19:11

              • Partager sur Facebook
              • Partager sur Twitter
                6 août 2019 à 15:34:42

                leprincefou a écrit:

                Sauf que sur la sortie ma dernière combinaison correspond a ça  99 98,99 99$

                En initialisant les variables à 0, moi j'obtiens : ...,99 98,99 99,

                Donc si je comprend bien tu as le signe '$' en trop ?



                • Partager sur Facebook
                • Partager sur Twitter
                  6 août 2019 à 16:31:50

                  Salut,

                  Tu peux aussi utiliser une variable et une fonction qui affiche un nombre avec quatre chiffres (dd dd). Ça donnerait ça. Dois-tu afficher les couples égaux ou pas ? J'ai l'impression que non.

                  void print_number(int n); /* Modulo et division et c'est bon */
                  
                  int main(void) {
                      for(int i = 0; i &lt; 10000; i++) {
                          /* On affiche le nombre */
                      }
                      return 0;      
                  }
                  

                  PS : note que int main() n'est pas standard. Utilise int main(void) ou int main(int argc, char *argv[]).

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Tutoriel Ruby - Bon tutoriel C - Tutoriel SDL 2 - Python avancé - Faîtes un zeste, devenez des zesteurs
                    6 août 2019 à 17:51:07

                    L'énoncé c'était sa 

                     

                    j'ai trouvé un autre moyen d'y arriver mais c'est pas ma méthode 

                    void	ft_print_comb2(void)
                    {
                    	int		i;
                    	int		j;
                    
                    	i = 0;
                    	while (i <= 98)
                    	{
                    		j = i + 1;
                    		while (j <= 99)
                    		{
                    			ft_putchar((i / 10) + 48);
                    			ft_putchar((i % 10) + 48);
                    			ft_putchar(' ');
                    			ft_putchar((j / 10) + 48);
                    			ft_putchar((j % 10) + 48);
                    			if (i != 98 || j != 99)
                    			{
                    				ft_putchar(',');
                    				ft_putchar(' ');
                    			}
                    			j++;
                    		}
                    		i++;
                    	}
                    }
                    

                    j'ai compris le principe avec les modulo mais je tenais a le faire de ma manière mais si je bloque total 

                    Rouloude le résultat sur ta sortie diffère c'est pas le signe $ qui pose soucis j'ai du le taper sans faire exprès mais le résultat lui même regard tu a comme moi 99 98, 99 99 alors qu'on voudrait 97 99, 98 99  

                    Oui pour la main faut je prenne l'habitude de le faire ainsi merci 

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Notre mesure du possible rend possible l'impossible  
                      6 août 2019 à 18:41:04

                      Zoup : tu n'as pas compris l'énoncé, il faut afficher deux nombres, ton programme n'en affiche qu'un.

                      leprincefou : je crois que tu as trouvé un bon algorithme. C'est vrai que sans les printf, ça complique...

                      -
                      Edité par robun 6 août 2019 à 18:43:47

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 août 2019 à 19:16:07

                        #include <unistd.h>
                        
                        int ft_putchar(char c)
                        {
                            return write(1, &c, 1);
                        }
                        
                        void ft_print_comb2(void)
                        {
                            int a=0;
                            int b;
                        
                            while (a <= 99)
                            {
                                b = a+1;
                                while(b <= 99)
                                {
                                    ft_putchar('0' + a/10);
                                    ft_putchar('0' + a%10);
                                    ft_putchar(' ');
                                    ft_putchar('0' + b/10);
                                    ft_putchar('0' + b%10);
                                    ft_putchar(',');
                                    b++;
                                }
                                a++;
                            }
                        }
                        
                        int main(void)
                        {
                            ft_print_comb2();
                        
                            return 0;
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          6 août 2019 à 21:32:40

                          Sans les printf, on botte en touche vers une fonction qui affiche un nombre sur deux chiffres. Rien de compliqué.

                          Je sais pas ce qu'on vous apprend, mais décomposer  le travail en fonctions qu'on réutilise (pour afficher a, puis b), c'est quand même la base de la programmation.

                          -
                          Edité par michelbillaud 6 août 2019 à 21:35:24

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Combinaison 4chiffre while

                          × 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