Lorsqu’un programmeur (ou une société informatique) est contacté pour réaliser un programme, on établit les spécifications du programme demandé : on se met d’accord sur le travail à effectuer.
Pour cela, on fixe les deux sortes de conditions suivantes :
On ne dit pas comment les sorties doivent être obtenues : c’est le choix du programmeur. On peut parfois avoir des contraintes sur le temps de calcul d’un programme.
Ce domaine des spécifications d’un programme est une étape préliminaire incontournable d’un autre domaine, le domaine des preuves d’un algorithme : est-ce qu’un algorithme termine ? Est-ce qu’il fait ce qui a été prévu ? Comment le fait-il ?
Écrire un script qui demande de saisir 2 chaînes de caractères et qui affiche la plus grande des 2 chaînes (celle qui a le plus de caractères). Les questions ci-dessous vous aideront à préciser correctement les spécifications de votre programme.
Pré-conditions :
str
)Post-conditions :
Écrire un script qui demande à l'utilisateur d'entrer sa taille et son poids, qui calcule son IMC et qui lui indique s'il est trop maigre, de corpulence normale, en surpoids ou obèse. Les questions ci-dessous vous aideront à préciser correctement les spécifications de votre programme.
L'indice de masse corporelle (IMC) est une mesure basée sur deux variantes : la taille et le poids corporel. La formule standard s’applique aux hommes et aux femmes d’âge adulte.
La formule est simple : IMC = poids (kg) divisé par la taille (m) au carré.
Voici les différentes catégories d’IMC endossés par les organismes officiels de santé:
Pré-conditions :
Post-conditions :
Un des algorithmes de recherche du PGCD ( = plus grand diviseur commun ) de deux nombres entiers est l'algorithme d'Euclide.
Le princiep est le suivant :
Exemple : calcul du PGCD de 455 et 338 :
Valeur la plus grande | Valeur la plus petite | Reste de la division entière |
---|---|---|
455 | 338 | 117 |
338 | 117 | 104 |
117 | 104 | 13 |
104 | 13 | 0 |
Il faut donc réaliser avec les deux valeurs une suite d'opérations répétitives ( calcul de restes de divisions entières )... Parfait pour une boucle ! On remarquera que l'algorithme s'arrête lorsque le reste de la division entière est nul. Ce qui nous donne la condition de sortie de boucle. Où obtient-on la valeur du pgcd en fin de boucle ?
Comme la situation devient sensiblement plus complexe que les applications précédentes, essayons d'appliquer une méthode de "développement" un peu plus structurée pour ce programme :
De quelle(s) variables a-t-on besoin ? De quelle manière va-t-on les "fournir" à l’ordinateur ? Comment récupérera-t-on le résultat ?
Ecrire la suite d'opération élémentaires traduisant l’algorithme ci-dessus. On pourra notamment se poser les questions suivantes :
Quelle type de boucle utiliser ( for
? while
?? )
Quelle(s) instruction(s) contiendra le bloc logique de la boucle ?
Voila typiquement une situation où il n'est pas possible de prévoir le nombre de "tours" que devra faire la boucle : c'est donc une boucle while
qu'il faudra utiliser.
La boucle devra "tourner" tant que le reste est différent de 0; on pourrait donc penser que la condition à évaluer est : reste != 0
.
Le problème est que ce reste n'est calculé que dans la boucle : au début de celle-ci, la variable reste n'est donc pas encore initialisée; l'évaluation de la condition entraînera donc une erreur !
La solution est donc d'évaluer la condition directement sur le calcul du reste : max % min != 0
. La variable reste sera elle affectée dans la boucle...
Ecrire le programme calculant le PGCD traduisant l'algorithme précédent en langage Python.
Tester le fonctionnement correct du programme à l'aide de valeurs dont on connaît le résultat. Par exemple, le PGCD de 24 et 15 est...... ?