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++

  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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Par défaut
    Bonsoir,
    il me semble qu'il te manque quelques notions principales en C++ ... il faudrait que tu lises des cours sur ce langage.

    Outre cela, ton dernier programme a beaucoup d'erreurs:

    comme dit précédemment
    for (int n;n<=p;++n)
    doit être remplacé par quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int n=0;
    cin >>n;
     
    for(int t=n; t<=p;++t){}
    De plus, cette ligne me rend sceptique:
    cout << h = (n*2) << endl;
    Je pense que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    h=t*2;
    cout << h << endl;
    serait plus propre...

    Pense à mettre des commentaires

    Cordialement.

  9. #9
    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
    quelqu'un peut il me donner le bon code pour résoudre l'exercice que j'ai exposé lors de mon premier message en début de discussion
    en effet j'ai essayé tout ce que vous proposez mais rien ne marche
    et je ne comprends pas pourquoi
    comme j'y ai passé des heures , quelqu'un aurait il la gentillesse de m'apporter la solution pour que j'essaie de comprendre ce que je ne maitrise pas
    par ailleurs quelqu'un peut i l me conseiller des cours de programmation avec exercices et en progression lente car cet exercice m'était soumis par des mooc de l'école de Lausanne et je pensais avoir compris les cours mais visiblement non
    ou la progression du cours est trop rapide et les exercices demandés trop difficiles
    ou je suis trop nul
    cordialement

  10. #10
    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
    Voila ce que nous t'avons dit. Il manquait peu de choses dans ton code.
    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
    28
    29
    30
    31
    32
    33
    34
    #include <iostream>
    using namespace std;
     
    int main()
    {
    	int n( 0 );
    	int p( 0 );
     
    	cout << "Entrer le minimum et le maximum a rechercher" << endl;
    	cin >> n >> p;
     
    	for ( int i = n ; i <= p ; ++i ) {
    		int a( 0 );
    		int t( i );
    		cout << t << " -> ";
     
    		while ( t > 0 ) {
    			if ( t % 3 == 0 ) {
    				t = t + 4;
    				a = a + 1;
    			}
    			else if ( ( t % 3 != 0 )  &&  ( t % 4 == 0 ) ) {
    				t = t / 2;
    				a = a + 1;
    			}
    			else { 
    				t = t - 1;
    				a = a + 1;
    			}
    		}
    		cout << a << endl;
    	}
    	return 0;
    }

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Par défaut
    En ce qui concerne un cours sur le C++, le livre avec lequel j'ai appris est Principes et pratiques avec C++ de Bjarne Stroustrup agrémenté de recherches sur Internet quand cela est nécessaire.

    Ce n'est qu'un avis parmi d'autres et je suis sûr que les autres membres du forum ne le partageront pas tous mais voilà, tu as mon point de vue.

    Cordialement.

  12. #12
    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.

  13. #13
    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 livre de Stroustrup
    Citation Envoyé par Gwynbleidd Voir le message
    En ce qui concerne un cours sur le C++, le livre avec lequel j'ai appris est Principes et pratiques avec C++ de Bjarne Stroustrup agrémenté de recherches sur Internet quand cela est nécessaire.

    Ce n'est qu'un avis parmi d'autres et je suis sûr que les autres membres du forum ne le partageront pas tous mais voilà, tu as mon point de vue.

    Cordialement.
    Merci de ta réponse
    le problème pour le livre de Stroustrup , c'est qu'il semble indisponible chez l'éditeur depuis longtemps et ils ne semblent pas donner de date de réimpression
    penses tu qu'on peut se le procurer en pdf ou ebook ou autre sur le net et si oui ou
    sinon penses t u que quelq'un serait prêt à en vendre un exemplaire en bon état?
    Dans l'attente d'une réponse
    cordialement

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 34
    Par défaut
    Bonjour,
    je pense que cela dérive un petit peu du sujet originel, c'est pourquoi c'est la dernière réponse que j'envoie sur ce sujet...

    Il me semble avoir acheté ce livre il y a deux ou trois ans et il est effectivement possible qu'il ne soit plus trouvable en neuf.

    Mais, c'est à vous de chercher sur leboncoin ou autres pour trouver ce livre, je pense que vous y parviendrez sans trop de mal.

    Cordialement.

+ 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