Chapitre 3: Programmation descendante par affinages successifs |
3.1 La méthode:
Remarque: (J.Arsac) "C'est un schéma idéal pas toujours facile à suivre en pratique. C'est souvent en commençant la résolution que l'on s'aperçoit que les données ont été mal précisées. Il faut alors revenir en arrière, parfois tout recommencer..." Bon courage !Définir le problème à résoudre :
Expliciter les données : préciser leur nature, leur domaine de variation, leur propriétés.
Expliciter les résultats : préciser leur structure, les relations entre les données et les résultats.
Décomposer le problème en sous problèmes ;
Pour chaque sous problème P faire :
Si P a une solution immédiate
alors écrire le morceau de programme correspondant
sinon appliquer cette méthode à P ;
3.2 Exemple : faire une lessive.
Pour faire une lessive :3.3 Les sous-programmes.
1 : introduire le linge sale et la lessive dans la machine, sélectionner les options.
2 : mettre la machine en marche et attendre l'arrêt de celle-ci.
3 : sortir le linge propre.Mais si le programmateur est en panne ?
Supposons qu'il soit possible de commander manuellement les divers composants de la machine et effectuons un premier niveau d'analyse :Pour faire une lessive :
1 : introduire le linge sale et la lessive.
2 : laver.
3 : rincer.
4 : si on désire un essorage, alors essorer.
5 : sortir le linge propre.Il nous faut à présent détailler les étapes 2, 3 et 4.
Pour le module 3 "rincer", un deuxième niveau d'analyse peut conduire à :
rincer :
3.1 : remplir la cuve.
3.2 : remuer le linge.
3.3 : vider la cuve.Affinons (troisième niveau d'analyse), le module 3.1 :
remplir la cuve :
3.1.1 : ouvrir le robinet d'arrivée d'eau.
3.1.2 : tant que la cuve n'est pas pleine, surveiller le niveau d'eau.
3.1.3 : fermer le robinet d'arrivée d'eau.A présent, on peut considérer que les actions à effectuer sont élémentaire ( i.e. appartiennent à l'ensemble des commandes manuelles disponibles de la machine) et que le sous problème 3 "rincer" a été complètement décomposé. Il resterait à analyser de la même façon les étapes 2 et 4.
3.4 Exercices : décomposition d'un nombre en facteurs premiers.Dès que la complexité du programme à programmer dépasse un certain seuil, la méthode d'analyse fait apparaître une décomposition de l'algorithme en "modules" que nous coderons par des sous-programmes.
Ces sous-programmes seront utilisés par d'autres sous-programmes ou programmes :
![]()
La mémoire de la machine, pour les variables est globale à toutes les zones de programmes.
Donc, pour chaque sous-programme il convient de spécifier les variables en entrée, les variables en sortie et les variables modifiées par le sous-programme.
Lorsque dans le programme 1, P1, on souhaite appeler le programme 2, P2, on procède comme suit :
1/ sauvegarder les variables de P1 dont on sait qu'elles seront modifiées par P2.
2/ préparer l'appel en affectant les variables en entrée à P2.
3/ appeler P2.
4/ sauvegarder les variables en sortie de P2.
5/ restituer les valeurs des variables de P1 sauvegardées en 1/
Exo 1: Soient
n et p deux entiers non nuls.
Ecrire un sous-programme qui détermine le plus grand entier i tel
que p^i (i.e. p à la puissance i) divise n.
Exo 2 : Soit p un entier >=2. Ecrire un sous-programme qui détermine si p est premier.
Exo 3 : Soit p un entier. Ecrire un sous-programme qui détermine le plus petit nombre premier>p.
Exo 4 : Soit n
un entier. A l'aide des sous-programmes définis précédemment,
écrire un programme qui
affiche la décomposition de n en facteurs premiers.