Programme nombre de moustiques

Signaler
Messages postés
15
Date d'inscription
mardi 2 novembre 2021
Statut
Membre
Dernière intervention
5 novembre 2021
-
Messages postés
2494
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
4 décembre 2021
-
Depuis le début de l’année 2017, deux scientifiques Marc et Alice étudient l’évolution d’une population de
moustiques sur l’île Chépaou. Ils ont réussi à obtenir l’estimation suivante sur l’évolution de la population :
si la population contient x moustiques au cours d’une année, alors il y a aura 1.09x − 200 moustiques
l’année suivante. Par contre, ils ne sont pour l’instant pas d’accord sur l’estimation de la population en
2017 : ils s’accordent seulement sur le fait que ce nombre est compris entre 8 000 et 12 000. Il faudra donc
considérer cette donnée comme une variable.
1. Écrire une fonction f qui prend en argument le nombre x de moustiques à une certaine année et qui
renvoie le nombre de moustiques l’année suivante. La valeur de retour de f doit arrondir la réponse
à l'entier inférieur. Comme les valeurs obtenues seront toujours positives, vous pouvez utiliser au
choix int(..) ou la fonction floor(. ) du module math. Exemple: int(4.5) vaut 4 et math.floor(6.75)
vaut 6.
pour ca j'ai trouvé:
from random import*
x=randint(8000,12000)
def f(x):
    r= 1.09*x-200
    return int(r)

2. Écrire une fonction nb_moustiques qui prend en arguments nb_debut, le nombre estiméde
moustiques en 2017, et un entier annee_voulue. La fonction doit renvoyer le nombre de
moustiques qu’il y aura en annee_voulue.
la j'ai bloqué voila ce que j'ai fait:
def nb_moustiques(nb_debut,annee_voulue):
    r= f(x)*annee_voulue
    return r

et du coup par exemple quand je mets
nb_moustiques(x,2)

au lieu de me donner le nombre de moustiques dans 2 ans, ca me donne le nombre de moustiques dans 1 an multiplié par 2
3. Écrire une fonction annee_atteindra qui prend en argument un entier seuil et un entier nb_debut
(qui correspondra au nombre de moustiques en 2017) et qui renvoie l’année à partir de laquelle le
nombre de moustiques sera supérieur ou égal à seuil.
j'ai trouvé ca:
def annee_atteindra(n,nb_debut):
    while n>= nb_moustiques(nb_debut, annee_voulue):
        r = annee_voulue-2017
        return r


mais tant que les programmes précédents ne sont pas corrects, ca ne marche pas
merci d'avance

2 réponses

Messages postés
2494
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
4 décembre 2021
141
Bonjour 

Je ne connais pas Python mais ton souci est de comprendre la récursivité .
La récursivité en programmation est le fait d'avoir une fonction qui s'appelle elle-même .
Un exemple simple : soit une population d'un pays dont la croissance est de 1,5 .
en début 2015 on a 100 habitants
en début 2016 on en a 100 * 1, 5 = 150
en début 2017 on en a 150 * 1.5 = 225
en début 2018 on en a 225 * 1.5 = 337.5 arrondi à 337
en début 2019 on en a 337 * 1,5 = 505,5 arrondi à 505

Comme tu vois la multiplication est récursive mais on prend comme valeur à chaque fois la population de l'année précédente .
Pour arrêter cette récursivité il suffit de tester si on est à l'année voulue comme fin
Je t'ai mis un code en exemple ( à vérifier )
# nombre moustique en 2017 ( valeur aléatoire )
r = randint(8000,12000)
# compteur
compteur_annee = 0
def nb_moustiques(x ,annee_voulue):
     # nombre moustique année suivante
     r = (int(1.09*r-200)
    # test si dernière année
    if compteur_annee < annee_voulue
        # fonction récursive
        nb_moustiques(r ,annee_voulue + 1)
        # on augmente le compteur
        compteur_annee = compteur_annee + 1
    return r



Messages postés
16563
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
5 décembre 2021
577
Bonjour vb.

Ta démonstration est parlante, mais on peut l'utiliser autrement que par récursivité, parce que je ne pense pas que _sk en soit là.
Avec une boucle par exemple.
Messages postés
2494
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
4 décembre 2021
141
Salut Whis
C'est exact ce que tu dis .
Quelque chose comme ceci à mon avis
r = randint(8000,12000)
def nb_moustiques(r ,annee_voulue):
      for i in range(0, annee_voulue):
          # nombre moustique année suivante
          r = (int(1.09*r-200)
      return r


A mon message 1 remplacer le x par r dans la définition de la fonction récursive à la ligne 5