Aller au contenu

Thème 8 : Répétitions conditionnées

Département d'architecture : construction d'une pyramide

Algorithme

La principale difficulté de cet exercice est de trouver la bonne condition pour la boucle « tant que ». On veut en effet la plus grande pyramide constructible avec moins de pierres que la limite qu'on nous donne. On ne peut donc pas calculer le nombre de pierres de chaque taille de pyramide et tester si cette valeur est plus grande que la limite : il faut s'arrêter avant que l'on atteigne cette limite.

La manière la plus simple de faire est de se poser la question suivante : est-ce que le nombre de pierres de cette pyramide, si je lui ajoutais un étage, est plus petit que le nombre maximum de pierres autorisées ? Si oui, alors on peut en toute sécurité ajouter un étage ; sinon, on sait qu'il faut s'arrêter, et le nombre de pierres de la pyramide actuelle est la réponse qui est attendue.

Regardez bien dans le programme ci-dessous comment on a réussi à traduire la question ci-dessus.

Programme
   nombreMaximumPierres = int(input())
   nombrePierres = 0
   hauteur = 1
   while nombrePierres + hauteur * hauteur <= nombreMaximumPierres:
      nombrePierres = nombrePierres + hauteur * hauteur
      hauteur = hauteur + 1  
   print(hauteur - 1)
   print(nombrePierres)

Département de chimie : mélange explosif

Algorithme

On va utiliser une boucle « tant que » pour traiter les mesures de températures. C'est la condition de cette boucle qui est le point difficile : il faut à la fois que le numéro de la température qu'on mesure ne soit pas plus grand que le nombre total de températures à mesurer, mais aussi que la température soit dans le bon intervalle de valeurs. On aura donc une condition de la forme :

  Tant que numMesure < nbMesures et températureMin <= température et température <= températureMax
     ...

Dans la boucle, on va lire la mesure de température, et on doit donc afficher le commentaire correspondant :

température <- lireEntier() Si tempMin <= température et température <= tempMax Afficher "Rien à signaler" Sinon Afficher "Alerte !!"

Notez alors que l'on a écrit deux fois le test pour vérifier qu'une température est valide. Aussi, on devra initialiser la variable température avant la boucle pour pouvoir la tester, avec une instruction comme celle-ci : température <- tempMin

On utilise la valeur de tempMin pour être sûr de bien rentrer dans la boucle.

À la place, on va plutôt se servir d'un booléen tempValide pour stocker le résultat du test lorsqu'une température est reçue.

Programme
   nbMesures = int(input())
   tempMin = int(input())
   tempMax = int(input())
   numMesure = 0
   tempValide = True
   while numMesure < nbMesures and tempValide:
      température = int(input())
      tempValide = (tempMin <= température and température <= tempMax)
      if tempValide:
         print("Rien à signaler")
      else:
         print("Alerte !!")
      numMesure = numMesure + 1