Connexion élèves

Choisir le(s) module(s) à installer :

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 :

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 :

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é:

Questions :

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 :

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....