IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

boucles for et while


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Par défaut boucles for et while
    bonjour
    on me demande l'exercice suivant:
    Considérons les opérations suivantes applicables à un nombre entier (positif) :
    — si ce nombre est divisible par 3, on lui ajoute 4 ;
    — s’il n’est pas divisible par 3 mais divisible par 4, on le divise par 2 ;
    — s’il n’est divisible ni par 3, ni par 4, on lui soustrait 1.
    On répète ces opérations successivement jusqu’à arriver à 0. Concrètement, par-
    tant d’un entier n0, on applique les opérations à n0 pour obtenir n1, puis si n1
    n’est pas nul, on lui applique à nouveau les opérations précédentes, et ainsi de
    suite jusqu’à obtenir un nombre nk valant 0.
    Par exemple, si on part de 7, on trouve successivement les valeurs : 6, 10, 9, 13,
    12, 16, 8, 4, 2, 1 et 0. Le nombre
    k
    de répétitions des opérations décrites ci-dessus
    est alors 11. Par contre, si on part de 1, on tombe tout de suite sur 0, et le nombre
    de répétitions est alors de
    k
    = 1
    .
    On vous demande d’écrire un programme qui affiche le nombre de répétitions
    des opérations précédentes nécessaires pour tomber à 0, en partant tour à tour de
    chacun des entiers compris entre deux entiers saisis au clavier.
    Par exemple, si l’on demande ce nombre de répétitions pour chaque entier entre 1
    et 7, l’affichage produit par votre programme devra être :
    1 -> 1
    2 -> 2
    3 -> 12
    4 -> 3
    5 -> 4
    6 -> 10
    7 -> 11


    voilà le programme que j'ai écrit



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #include <iostream>
    using namespace std;
     
    int main()
    {
      int n(0);
      int a(0);
      int p(0);
      int t(0);
        cin >> n ; 
     
        cin >> p ; 
        t=n;
     
      for (int t;t<=p;++t)
     
       {while (t>0) {if (t%3==0) { t=t+4;
    	                            a=a+1;}
    	              else { if((t%3 !=0) and (t%4==0)) {t=t/2;
    					                                a=a+1;}
    	                      else {(t=t-1); (a=a+1);}cout << a << endl; cout << t << endl;}}
     
    }
     
      return 0;
    }
    cela compile bien mais à l'exécution il se contente d'afficher n et p c'est tout
    pourtant dans mon esprit après avoir saisi n et p je fait une boucle partant de n mais que j'ai mis dans t et je lui rajoute 1 jusqu'à ce quelle arrive à p
    à l'intérieur de chaque boucle for je fait un while et j'affiche a qui me donne le nombre de tours pour arriver à o et n ( c'est pour cela que j'ai créé t dans laquelle j'ai mis n pour pouvoir garder le n de départ

    quelquun aurait il la gentillesse de m'aider et de me dire ou cela cloche
    merci d'avance car je bloque depuis des heures et ne comprends pas
    cordialement

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Parce que tu crées une deuxième variable t, locale à la boucle for, non initialisée et qui masque la vraie variable.
    Tu as un U.B. (<- Undefined Behaviour)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Par défaut boucle for et while
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    #include <iostream>
     using namespace std;
     
     int main()
     {
     int n(0);
     int a(0);
     int p(0);
     
     cin >> n ; 
     
     cin >> p ; 
     
     
     for (int n;n<=p;++n)
     
     {while (n>0) {if (n%3==0) { n=n+4;
     a=a+1;}
     else { if((n%3 !=0) and (n%4==0)) {n=n/2;
     a=a+1;}
     else {(n=n-1); (a=a+1);}cout << a << endl; cout << n << endl;}}
     
     }
     
     return 0;
     }
    voilà j'ai fait comme tu as dis et quand je fais exécute et que je saisis n et p rien ne se passe
    donc ton explication n'est pas bonne
    le problème est ailleurs mais où?
    cordialement

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,
    Maintenant tu as une double variable n, dont la seconde est non initialisée, toujours un U.B.
    Et utilise des balise # pour poster ton code.

    Il fallait plutôt faire for (int t=n;t<=p;++t) ou bien for (;t<=p;++t).
    Et à l'intérieur du bloc for, il faudra initialiser 'a' au bon endroit et l'afficher au bon endroit.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2013
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Par défaut boucle for and while suite
    bonjour
    j'ai essayé ce que tu me dis sans succès je n'arrive pas à obtenir ce que je veux
    je reprends tout à o
    et je tape le code suivant sur un sujet tout autre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #include <iostream>
    using namespace std;
    int main()
    {
     int n(0);
     
     int p(0);
     int h(0);
     
     cin >> n ;
     
     cin >> p ; 
     
     
     for (int n;n<=p;++n)
     
     {cout << h = (n*2) << endl;}
     
      return 0;
    }
    pourquoi ce code ne m'affiche t il rien quand je rentre un n à 3 et un p à 5
    il me dit que la compilation est un succès ainsi que le built et puis cela n'affiche rien à part le 3 et le 5 que j'ai rentré.
    ou fais je une faute
    j'utilise geany
    connais tu un logiciel qui permettrait de voir pas à pas ce que fait le programme et de voir l'erreur que je fais
    cordialement

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Merci d'utiliser les balises CODE pour montrer correctement ton code.

    Tes deux int n(0); et for (int n;n<=p;++n) sont deux variables distinctes. Et celui dont tu te sers dans la boucle n'est initialisé à aucune valeur et a une valeur aléatoire, sans nul doute supérieure à p = 5 si tu ne vois rien s'afficher.
    Je te conseille la lecture de : Où dois-je déclarer mes variables locales ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Citation Envoyé par partouchefrancis Voir le message
    j'utilise geany
    connais tu un logiciel qui permettrait de voir pas à pas ce que fait le programme et de voir l'erreur que je fais
    Je ne connais pas geany, il faut activer le debugger qui doit être gdb et avoir l'option -g dans la commande g++.

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par partouchefrancis Voir le message
    Considérons les opérations suivantes applicables à un nombre entier (positif) :
    — si ce nombre est divisible par 31, on lui ajoute 42 ;
    — s’il n’est pas divisible par 3 mais divisible par 43, on le divise par 24 ;
    — s’il n’est divisible ni par 3, ni par 45, on lui soustrait 16.
    On répète ces opérations successivement jusqu’à arriver à 0.
    En suivant juste l'énoncé avec de l'algorithmique triviale..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    unsigned int countOperations(unsigned int n) {
      unsigned int i = 0;
      for(i = 0; n != 0; ++i) {
        if (n%3 == 0) // <sup>1</sup>
          n += 4; // <sup>2</sup>
        else if(n%4 == 0) // <sup>3</sup>, on sait qu'il est non divisible par 3 sinon on serait entré dans le premier if..
          n /= 2; // <sup>4</sup>
        else // <sup>5</sup>
          n -= 1; // <sup>6</sup>
      }
      return i;
    }
    Tu peux expliquer où tu bloques ? C'est de la traduction mot à mot de l'énoncé sans aucune arcane ni astuce.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle for Vs While sur un Iterator
    Par thierryler dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2010, 13h30
  2. Boucle for ou while
    Par auberstar dans le forum Débuter
    Réponses: 5
    Dernier message: 01/05/2010, 20h22
  3. Boucle For et While
    Par mairou dans le forum Débuter
    Réponses: 6
    Dernier message: 20/09/2008, 20h33
  4. [Optimisation] Boucles for ou while et mysql_result ?
    Par sorenson dans le forum Langage
    Réponses: 5
    Dernier message: 22/12/2006, 09h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo