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 :

boucle for et problème de cout


Sujet :

C++

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut boucle for et problème de cout
    bonjour

    je fais en c++ l'exercice avec le code ci dessous
    je rentre un nombre de lapins et un nombre de renards
    par une boucle for je vois l'évolution de la population des renards et des lapins en fonction d'un taux d'attaque des lapins par les renards de 5% d'un taux de croissance des lapins de 3% et de 0.08 pour les renards et d'un taux de mortalité des renards de 1%.
    en appliquant les formules ci dessous et pendant 50 mois
    et j'affiche à chaque fois le nombre de renards et le nombre de lapins
    je m'aperçois que au 25 ième mois , il ne reste plus personne et que voudrais donc que l'affichage s'arrête là à 25 mois
    et je n'arrive pas comment faire
    ( en fait comme l'exercice plus complet se fait avec des taux d'attaque variables , pour certains il n'y a plus personne à 25 mois pour d'autre à 35 mois)
    de plus quand il y a moins de 2 renards ou moins de 2 lapins on arrondit à 0 le nombre
    quelqu'un peut il m'aider; j'ai essayé les boucles do while mais je n'y arrive pas
    merci d'une aide car j'y ai passé des heures sans succès
    cordialement



    #include <iostream>
    #include <iomanip> // pour setprecision()
    using namespace std;
    int main()
    {
    cout << setprecision(4);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    double taux_croissance_lapins(0.3);
      double taux_attaque(0.05);
      double taux_croissance_renards(0.008);
      double taux_mortalite(0.1);
      int duree(50);
      double renards_i(0.0);
      double lapins_i(0.0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    cout << "Combien de renards au départ (>= 2) ? ";
                             cin>>renards_i;
     
                              cout << "Combien de lapins au départ  (>= 5) ? ";
                                cin>>lapins_i;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout <<  endl << "***** Le taux d'attaque vaut "<< taux_attaque * 100 << "%" <<  endl;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double population_renards(renards_i);  	
      double population_lapins (lapins_i);  
      double m(0.0),n(0.0),k(0.0);

    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
    for(int i(1);i<=duree;++i){ 
     
     
    	population_lapins=(lapins_i*(1.0+taux_croissance_lapins-taux_attaque*renards_i));
      	population_renards=(renards_i*(1.0+taux_attaque*lapins_i*taux_croissance_renards-taux_mortalite));
      	lapins_i=population_lapins;
      	renards_i=population_renards;
     
      	if (population_renards < 2) {renards_i=0;}
      	if (population_lapins < 2) {lapins_i=0;}
     
      	m=renards_i;
      	n=lapins_i; 
      	k=i;  
     
     
      	 cout << " Après "<< k << " mois, il y a "<< n << " lapins "<< " et "<< m << " renards "<<endl; }
      	}

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    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
     
    int i{1};
    while(i<=duree && renards_i>0.0 && lapins_i>0.0)
    { 
            population_lapins=(lapins_i*(1.0+taux_croissance_lapins-taux_attaque*renards_i));
            population_renards=(renards_i*(1.0+taux_attaque*lapins_i*taux_croissance_renards-taux_mortalite));
            lapins_i=population_lapins;
            renards_i=population_renards;
     
            if (population_renards < 2) {renards_i=0;}
            if (population_lapins < 2) {lapins_i=0;}
     
            m=renards_i;
            n=lapins_i; 
            k=i;
     
            cout << " Après "<< k << " mois, il y a "<< n << " lapins "<< " et "<< m << " renards "<<endl;
            i++     
    }

  3. #3
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    C'est une bonne solution. Un peu de texte pour l'expliquer ():

    Si on veut s'arreter quand une condition est vraie, il suffit de ne continuer que si cette condition n'est pas vérifiée.

    Si la condition pour s'arreter est "le temps est écoulé ou il n'y a plus de lapins ou il n'y a plus de renard", on doit utiliser la simplification de la négation:
    non (a ou b) = non a et non b.
    • le temps est écoulé: i >= durée, négation: i < durée
    • il n'y a plus de lapin: lapins_i <= 0, négation: lapins_i >0
    • il n'y a plus de renard: renards_i <= 0, négation: renards_i > 0

    Donc, on continue tant que i < durée && lapins_i > 0 && renards_i > 0.
    En améliorant un poil, on peut aussi écrire lapins_i > 1 et renards_i > 1 (pour ne pas avoir à écrire dans la boucle if (... == 1) ... = 0;Je t'invite à prendre l'habitude de formuler plutot les conditions pour continuer à itérer: ici, on continue tant que la durée limite n'est pas atteinte et qu'il reste des lapins et qu'il reste des renards.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  4. #4
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Si l'on ne veut pas afficher "après X mois il y a 0 lapin et 0 renard", il faudra bouger le test dans la boucle.
    Globalement ton problème est l'algo et la traduction en C++ du texte de l'énoncé - pourtant très clair.
    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.

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut réponse
    merci mais cela ne semble pas marcher
    avec le code tel que conseillé par toi
    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
    int i{1};
    while(i<=duree and renards_i>0.0 and lapins_i>0.0)
    { 
            population_lapins=(lapins_i*(1.0+taux_croissance_lapins-taux_attaque*renards_i));
            population_renards=(renards_i*(1.0+taux_attaque*lapins_i*taux_croissance_renards-taux_mortalite));
            lapins_i=population_lapins;
            renards_i=population_renards;
     
            if (population_renards < 2) {renards_i=0;}
            if (population_lapins < 2) {lapins_i=0;}
     
            m=renards_i;
            n=lapins_i; 
            k=i;
     
            cout << " Après "<< k << " mois, il y a "<< n << " lapins "<< " et "<< m << " renards "<<endl;
            i++  ;}}
    voilà ce qui s'affiche



    Combien de renards au d├®part (>= 2) ? 20
    Combien de lapins au d├®part (>= 5) ? 500
    Le taux d'attaque vaut 5%
    Après 1 mois, il y a 150 lapins et 22 renards
    Après 2 mois, il y a 30 lapins et 21.12 renards
    Après 3 mois, il y a 7.32 lapins et 19.26 renards
    Après 4 mois, il y a 2.466 lapins et 17.39 renards
    Après 5 mois, il y a 0 lapins et 15.67 renards

    (program exited with code: 0)
    Appuyez sur une touche pour continuer...

    alors qu'il devrait s'afficher

    après 25 mois , il y a 0 lapins et 0 renards

    merci d'une aide
    il semble arrêter la boucle if quand un des objectifs est atteint à savoir 0 lapins

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    ah, tu veux qu'il continue tant que le temps n'est pas écoulé et qu'il reste encore des lapins ou des renards?
    Et bien, comment exprimes tu cela?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

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

    Informations forums :
    Inscription : Octobre 2013
    Messages : 19
    Points : 9
    Points
    9
    Par défaut boucle
    rebonjour
    enfait je veux qu'il fasse la boucle qu'il arrête et sorte de la boucle quand il reste 0 renards et 0 lapins soit au 25 ième mois dans ce cas ou le taux d'attaque est 5%
    et qu'i affiche seulement alors après 25 mois il reste o renards et 0 lapins
    mais je n'y arrive pas
    c'est pour cela que je demande de l'aide
    merci d'avance
    cordialement

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 069
    Points : 12 113
    Points
    12 113
    Par défaut
    Un petit effort de logique, SVP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(i<=duree and (renards_i>0.0 or lapins_i>0.0)){
    ...
    }

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

Discussions similaires

  1. Problème avec une boucle for
    Par cisse18 dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 29/03/2006, 16h50
  2. [FLASH 8] Problème Boucle For
    Par Begood dans le forum Flash
    Réponses: 6
    Dernier message: 21/03/2006, 11h36
  3. [Eval] Problème de boucle for sur des tableaux
    Par battle_benny dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/01/2006, 23h55
  4. [VB6] Problème contrôle Timer et boucle For-Next ...
    Par Stéphane BEHMENBURG dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/12/2005, 17h36
  5. Problème avec une DLL dans une boucle For
    Par BraDim dans le forum Langage
    Réponses: 5
    Dernier message: 20/09/2005, 12h22

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