Spécifications d’un programme
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 :
- les pré-conditions : quelles sont les entrées attendues par le programme ?
- les post-conditions : quelles sont les sorties attendues une fois le programme exécuté ?
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 ?
1. Exemples
Exercice 1
É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).
Questions :
- Quelles sont les pré-conditions ?
- Et les post-conditions ?
- Préciser à chaque fois s’il faudrait plus de précisions
Correction
Pré-conditions :
- l’utilisateur doit entrer 2 chaînes de caractères (donc de type
str
)
- on peut ajouter des conditions sur l’encodage des caractères ( point qui n’a pas encore été vu )
- accepte-t-on n’importe quel caractère comme £ / § / & / ‘ / « / » / _ ? C’est un point à préciser car il peut influencer tous les cas à prendre en compte.
Post-conditions :
- la chaîne renvoyée doit être l’une des deux chaînes entrées sans modification
- la chaîne renvoyée doit être la plus longue des deux chaînes
- il faut préciser ce qu’on fait en cas d’égalité de longueur des chaînes : la première entrée est renvoyée ? Ou on les classe par ordre alphabétique et on renvoie alors la première ?
Exercice 2
É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.
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é:
- Poids insuffisant = 18,5 ou moins
- Poids normal = 18,5-24,9
- Surpoids = 25-29,9
- Obésité = 30 ou plus
Questions :
- Quelles sont les pré-conditions ?
- Les post-conditions ?
- Préciser à chaque fois s’il faudrait plus de précisions ?
Correction
Pré-conditions :
- entrer la taille en mètre
- entrer le poids en kilogramme
- on doit entrer des nombres ( entiers ou flottants )
Post-conditions :
- l’IMC doit être calculé d’après la formule donnée
- la catégorie affichée doit être la bonne
- la forme du message de sortie n’est pas précisée
- sous quelle forme attend-t-on les données en sortie ?
- Impose-t-on d’utiliser la fonction carrée du module « math » ?
2. Applications
Un peu de math : Calcul de PGCD
Un des algorithmes de recherche du PGCD ( = plus grand diviseur commun ) de deux nombres entiers.
Plusieurs méthodes existent pour cela, dont celle dite d'Euclide.
Son algorithme en est le suivant :
- on calcule le reste de la division entière de la plus grande des valeurs par la plus petite
- on remplace la valeur la plus grande par la plus petite, et on remplace la plus petite des valeurs par le reste
- on recommence les opérations précédentes, jusqu'à ce que le reste devienne égal à 0.
- la valeur de la plus petite des valeurs est alors égale au PGCD.
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 |
⇨ PGCD de 455 et 338 = 13
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 !
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 :
1. ANALYSE : 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 ?
AIDE 1
3 variables suffiront :
- une variable max pour la valeur la plus grande, initialisée par une entrée utilisateur
- une variable min pour la valeur la plus petite, également entrée par l’utilisateur; en fin d'algorithme, elle contiendra également la valeur du PGCD d'après l'algorithme proposé
- une variable reste
2. ALGORITHME : écrire 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 ?
AIDE 2
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...
ALGORITHME
max ← entrée utilisateur de la valeur la plus grande
min ← entrée utilisateur de la valeur la plus petite
tant que ( max % min != 0 ) :
reste ← max % min
max ← min ( on range la valeur de min dans max )
min ← reste ( on range la valeur de reste dans min )
afficher "PGCD=" + min
3. Implémentation : écrire le programme calculant le PGCD traduisant l'algorithme précédent en langage Python.
4. Test : 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...... ?
REPONSE
Si le programme est correct, on doit trouver 3....