Partage
  • Partager sur Facebook
  • Partager sur Twitter

Algorithme en C++ : Fonction Do-While (2)

    4 décembre 2018 à 12:12:28

    Bonjour à toutes et à tous,

    J'essaye tant bien que mal de faire cette exercice mais visiblement je suis bloqué quelque part mais je sais pas où..

    Voici la consigne :

    Entrer un nombre de secondes (Le forcer à être correct) et afficher les nombres d’heures minutes secondes correspondants. Ex : si l’utilisateur entre :    123 secondes, le programme affiche :  123 secondes = 0 h 2 min 3 sec

    Voici mon code :

    using namespace std;
    int main()
    {
        int Nbr_S;
        cout <<"Entrer un nombre de secondes : "<<endl;
        cin>>Nbr_S;
    While(Nbr_S>0)
    {
        
    	if (Nbr_S>0)
        {
            //Modulo selon la taille du nombre de départ
            int heures = (Nbr_S/3600)%10000000;
            int minutes = (Nbr_S/60)%60;
            int secondes = ((Nbr_S/1)%60);
        cout <<" "<<heures<<" h "<<minutes<<" m "<<secondes<<" s " <<endl;
        }
        else
        {
         cout <<"Entrer un nombre correct  !"<< endl;
        }
    	}	
        return 0;
    }
    
    
    Merci d'avance les amis
    • Partager sur Facebook
    • Partager sur Twitter
      4 décembre 2018 à 12:41:14

      int heures = (Nbr_S/3600);
      int minutes = (Nbr_S - ( heures * 3600))/60);
      int secondes = Nbr_S%60);
      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        4 décembre 2018 à 19:48:39

        Si je peux me permettre , je pense au plus profond de moi  qu'il y aura de toute manière dans cette exercice l'application du modulo à un certain moment .. ?

        En plus de ca,je pense que le While comme disposé n'est pas la meilleur structure à adopter dans ce cas n'est ce pas ? 

        Bien à vous .

        • Partager sur Facebook
        • Partager sur Twitter
          4 décembre 2018 à 21:34:42

          Pas nécessairement, la division entière et le modulo peuvent être remplacés par une boucle  basée sur la soustraction dans l'ensemble des entiers positifs. C'est exactement comme cela que tu as du apprendre à faire une multiplication/division à l'école primaire. Les opérateurs / et % ne sont que des écritures simplifiées de l'itération de soustractions:

          222 / 104:

          222 - 104 = 118 => 1 * 104

          118 - 104 = 14   => 1 * 104

          => 2 * 104 + 14  

          • Partager sur Facebook
          • Partager sur Twitter
          Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug
            4 décembre 2018 à 22:04:19

            Les proc contemporains font les deux en même temps. Calculer la division, avec ou sans modulo, ça coûte pareil. Ce ne sert plus à rien de s'embêter avec tout ça aujourd'hui. Ca ne fait que compliquer le code.
            • Partager sur Facebook
            • Partager sur Twitter
            C++: Blog|FAQ C++ dvpz|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS| Bons livres sur le C++| PS: Je ne réponds pas aux questions techniques par MP.
              14 décembre 2018 à 15:51:59

              Bonjour à tous, 

              Suite à la remarque de notre confrère lmghs, je me suis permis d'ignorer la notion de module dans mon code , malheuresement je n'atteins toujours pas le résultat escompté...

              #include <iostream>
              using namespace std;
              int main()
              {
                  int Nbr_S;
                  cout <<"Entrer un nombre de secondes : "<<endl;
                  cin>>Nbr_S;
              
              while (Nbr_S>0)
              {
              
                  if (Nbr_S>0)
                      {
                          int heures = (Nbr_S/3600);
                          int minutes = (((Nbr_S/3600)-Nbr_S)/60);
                          int secondes = ((((Nbr_S/3600)-Nbr_S)/60)-Nbr_S);
                          cout <<" "<<heures<<" h "<<minutes<<" m "<<secondes<<" s " <<endl;
                      }
                  else
                      {
                          cout <<"Entrer un nombre de secondes correct  !"<< endl;
                      }
                  }
              cout <<"Entrer un nombre de secondes correct !"<<endl;
                  return 0;
              }
              
              



              -
              Edité par SalimElAmrati 14 décembre 2018 à 15:56:24

              • Partager sur Facebook
              • Partager sur Twitter
                14 décembre 2018 à 16:06:14

                Le modulo m'embrouille moins l'esprit personnellement, je vais donc partir à contre-courant :p

                	int s = 76625;
                
                	int h = s / 3600;
                
                	s %= 3600;
                
                	int m = s / 60;
                
                	s %= 60;
                
                	std::cout << "76625 secondes = " << h << " heures " << m << " minutes et " << s << " secondes." << std::endl;



                -
                Edité par LilyKianii 14 décembre 2018 à 16:06:27

                • Partager sur Facebook
                • Partager sur Twitter
                  14 décembre 2018 à 16:40:17

                  Bonsoir,

                  Tout à fait logique :D très perspicace en tous cas ;).

                  Malheureusement lorsque j'impose la condition while, je n'obtiens pas le même résultat sans ..

                  #include <iostream>
                  using namespace std;
                  int main()
                  {
                      int Nbr_S;
                      cout <<"Entrer un nombre de secondes : "<<endl;
                      cin>>Nbr_S;
                  while (Nbr_S>0)
                          {
                              int heures = (Nbr_S/3600);
                              Nbr_S %= 3600; //Nbr_S = Nbr_S % 3600
                              int minutes = (Nbr_S/60);
                              Nbr_S %= 60;
                              int secondes = (Nbr_S);
                              cout <<" "<<heures<<" h "<<minutes<<" m "<<secondes<<" s " <<endl;
                          }
                  cout <<"Entrer un nombre de secondes correct ! "<<endl;
                      return 0;
                  }
                  
                  



                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 décembre 2018 à 17:24:23

                    Utilisez 2 variables différentes, l'une avec la valeur entrée par l'utilisateur, et une autre pour stocker les valeurs de travaille.

                    (Et changez la condition de boucle, et élargissez son scope, etc...

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
                      14 décembre 2018 à 17:53:59

                      #include <iostream>
                      using namespace std;
                      int main()
                      {
                          int Nbr_S;
                          cout <<"Entrer un nombre de secondes : "<<endl;
                          cin>>Nbr_S;
                          int Nbr_I;
                          Nbr_S = Nbr_I ;
                      while (Nbr_I>0)
                              {
                                  int heures = (Nbr_I/3600);
                                  Nbr_I %= 3600; //Nbr_I = Nbr_I % 3600
                                  int minutes = (Nbr_I/60);
                                  Nbr_I %= 60;
                                  int secondes = (Nbr_I);
                                  cout <<" "<<heures<<" h "<<minutes<<" m "<<secondes<<" s " <<endl;
                              }
                      cout <<"Entrer un nombre de secondes correct ! "<<endl;
                          return 0;
                      }

                       Toujours le même problème …

                      - Mon second code revient à la même chose qu'au premier vu que les deux variables sont égales

                      - Mise à part la fonction While je ne vois pas quoi utilisé :o Que veut tu dire par "Elargir son Scoop" ?

                      -
                      Edité par SalimElAmrati 14 décembre 2018 à 17:56:08

                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 décembre 2018 à 19:23:44

                        Toujours le même problème …

                        - Mon second code revient à la même chose qu'au premier vu que les deux variables sont égales

                        - Mise à part la fonction While je ne vois pas quoi utilisé :o Que veut tu dire par "Elargir son Scoop" ?

                        Voir Code du Haut
                        • Partager sur Facebook
                        • Partager sur Twitter
                          15 décembre 2018 à 20:08:27

                          Dans votre code, quelle est la valeur de Nbr_I ?

                          Pourquoi voulez-vous absolument mettre un while ? Je ne suis pas sure de comprendre ceque vous souhaitez faire... ?

                          La scope (portée en Anglais), definit le temps de vie d'une variable par exemple. 

                          Exemple : la portee de votre while est definie par des crochets { }

                          PS : excusez l'orthographe, je suis sur tablette

                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 décembre 2018 à 22:24:16

                            Pouvez-vous expliquer la ligne 9 de votre code ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                            Algorithme en C++ : Fonction Do-While (2)

                            × 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