Académique Documents
Professionnel Documents
Culture Documents
ORSAY
Algorithmique : Volume 2
Tableaux Sous-algorithmes Modularit
Tableaux
Algorithmique 2 : Tableaux
val
132
val
Les tableaux
Structure de donnes permettant d'effectuer un mme traitement sur des donnes de mme nature tableau une dimension
Algorithmique 2 : Tableaux
Exemples d'applications
Ensemble de valeurs entires, relles, boolennes,.... Ensemble de noms (type chane) Ensemble de caractres (type caractre) Ensemble d'adresses (type Adresse : nom, adresse, num tlphone) Ensemble d'ouvrages
Algorithmique 2 : Tableaux 4
nom du tableau 1
Dfinition du type
2 3 4 5 6
indice du tableau
tab
12
1
5
2
-78
3
2
4
-21
5
8
6 7
contenu du tableau 8
unTab
Remarques : Indices : en gnral, dmarrage 1, mais en C++, dmarrage 0 Nombre doctets occups : dpend du type des valeurs enregistres
Algorithmique 2 : Tableaux 6
nom du tableau
Autre exemple : dclaration d'un tableau qui contiendra les frquences des tempratures comprises entre 40C et 50C
Exemple :
Algorithmique 2 : Tableaux
Accs en criture :
- tabl[3] 18 - saisir(tabl[5]) - attention! tabl
18
nom[2]
Algorithmique 2 : Tableaux
3
9
10 3 9 20
25 7
14 12
2 2
1 4
8 7
Dclaration
points : tableau[1,2 ; 1,7] dentiers
indices min et max des lignes indices min et max des colonnes
10
Algorithmique 2 : Tableaux
10 9
3 20
25 7
14 12
2 2
1 4
8 7
Accs en lecture :
- afficher(points[1,7]) {la valeur contenue en ligne 1 colonne 7 est
affiche lcran}
Accs en criture :
- points[2,4] 36 - saisir(points[2,4])
{la valeur fournie est enregistre en ligne 2,
colonne 4}
Algorithmique 2 : Tableaux 11
12
{rangement du caractre saisi sil est bon et saisie des caractres suivants} tant que unCar DRAPEAU et nbLettres < TailleMAX faire nbLettres nbLettres + 1 lettres[nbLettres ] unCar {caractre rang dans la nbLettresme case du tableau} afficher (" Tapez un autre caractre, ou ", DRAPEAU, "pour arrter la saisie." saisir (unCar ) {saisie du caractre suivant} ftq {test de sortie de boucle} si unCar = DRAPEAU alors afficher ("Valeurs saisies intgralement.") sinon afficher ("Trop de caractres saisir, plus de place ! ") fsi fin
le caractre ne sera rang dans le tableau que s'il est '\ et si TailleMAX non atteinte
Remarque : si unCar est diffrent de DRAPEAU, on est certainement sorti de la boucle parce que nbLettres est gal TailleMAX.
Algorithmique 2 : Tableaux 14
Simulation de la saisie
Algorithmique 2 : Tableaux
15
Attention !
Le drapeau ne doit PAS tre rang dans le tableau Le test de sortie ne peut pas tre remplac par
si nbLettres = TailleMAX alors afficher ("Trop de caractres saisir, plus de place ! ") sinon afficher ("Valeurs saisies intgralement.") fsi
Ne pas confondre
- taille maximale : TailleMAX (une constante) - taille effective : nbLettres (une variable)
Algorithmique 2 : Tableaux
16
Algorithmique 2 : Tableaux
17
Simulation
Algorithmique 2 : Tableaux
19
Sous-algorithmes
1. Motivation, dfinitions, et simulation 2. Analyse laide de sous-algorithmes 3. Retour aux tableaux: procdures et fonctions de manipulation de tableaux
Algorithmique 2 : Sous-algorithmes
20
En simplifiant l'criture...
Algorithme Puissances variables uneVal : rel nbPuissances : entier dbut afficher ("Donnez un nombre rel quelconque : ") saisir (uneVal) afficher ("Combien de puissances successives souhaitez-vous ? saisir (nbPuissances) calculPuissances(uneVal, nbPuisssances) fin sous-algorithme dtaill ailleurs, oprant le traitement
Algorithmique 2 : Sous-algorithmes 22
Rsultats
se r-crit en :
Algorithme
Donnes
Sousalgorithme1 Sousalgorithme2
Algorithmique 2 : Sous-algorithmes
Sousalgorithme3 Sousalgorithme4
Rsultats
23
Sous-algorithmes
Un algorithme appelle un sous-algorithme : cet algorithme passe "momentanment" le contrle de l'excution du traitement au sous-algorithme. Un sous-algorithme est conu pour faire un traitement bien dfini, bien dlimit, si possible indpendamment du du contexte particulier de lalgorithme appelant. Remarque : un sous-algorithme peut en appeler un autre.
Algorithmique 2 : Sous-algorithmes
24
sousalgorithme1
Algorithme
sousalgorithme4
sousalgorithme2
sousalgorithme3
25
Algorithmique 2 : Sous-algorithmes
Exemple
Algorithme Puissances variables uneVal : rel nbPuissances : entier dbut afficher (" ") saisir (uneVal) afficher (" ") saisir (nbPuissances) calculPuissances(uneVal, nbPuisssances) fin
Algorithme Puissances variables uneVal : rel nbPuissances : entier dbut saisirDonnes(uneVal, nbPuisssances) calculPuissances(uneVal, nbPuisssances) fin
Algorithme Puissances
uneVal nbPuissances uneVal nbPuissances
calculPuissances
saisirDonnes
26
Algorithmique 2 : Sous-algorithmes
Communications dinformations
Algorithme
sous-algorithme
paramtre en Donne not (D) paramtre en Rsultat not (R) paramtre en Donne et Rsultat not (D/R)
Algorithmique 2 : Sous-algorithmes 27
Paramtres et Arguments
Algorithme Puissances variables uneVal : rels nbPuissances : entier dbut calculPuissances(uneVal, nbPuisssances) fin
arguments de lappel de la procdure
Procdure calculPuissance(val, nb) paramtre (D) val : rel (D) nb : entier dbut paramtres de la procdure .... fin
Algorithmique 2 : Sous-algorithmes 28
Paramtres et Arguments
Algorithme appellant ARGUMENTS
donnes rsultats
Au moment de l'appel du sous-algorithme, les valeurs des arguments sont affects aux paramtres de statut (D) ou (D/R) :
- premier paramtre (si (D) ou (D/R)) premier argument - deuxime paramtre (si (D) ou (D/R)) deuxime argument - etc.
A la sortie du sous-algorithme, les valeurs des paramtres de statut (R) ou (D/R) sont affects aux arguments correspondants :
- premier argument premier paramtre (si (R) ou (D/R)) - deuxime argument deuxime paramtre (si (R) ou (D/R)) - etc.
Algorithmique 2 : Sous-algorithmes 29
Paramtres et Arguments
Le nombre de paramtres doit correspondre au nombre darguments. Le type du kime argument doit correspondre au type du kime paramtre. Le nom du kime argument a, de prfrence, un nom diffrent de celui du kime paramtre. Un paramtre dfini en "Donne" doit correspondre un argument qui possde une valeur dans lalgorithme appelant au moment de lappel. Un paramtre dfini en "Rsultat" doit recevoir une valeur dans le sous-algorithme.
Algorithmique 2 : Sous-algorithmes 30
Procdure calculPuissance(val, nb) {calcule et affiches les nb puissances de val} paramtres (D) nb : entier (D) val : rel variables cpt : entier puisssance : rel dbut variables locales puissance 1 la procdure pour cpt 1 nb faire puissance puissance val afficher ("La", cpt, "ime puissance de", val, "est", puissance ) fpour fin
Algorithmique 2 : Sous-algorithmes
spcification de la procdure
corps de la procdure
31
Fonctions
Une fonction est un sous-algorithme qui retourne une valeur.
Algorithme surfaceRect variables aire, long, larg : rels dbut afficher ("Donnez la longueur et la largeur de votre rectangle : ") saisir (long, larg) aire surface(long,larg) sous-algorithme afficher ("Voici sa surface : ", aire) dtaill ailleurs, fin oprant le traitement, et retournant une
Algorithmique 2 : Sous-algorithmes 32
Fonction surface (longueur, largeur) retourne (rel) {retourne la surface d'un rectangle partir de sa longeur et de sa largeur} paramtres (D) longueur, largeur : rel variable rsultat : rel dclaration dbut des paramtres (attributs, nom, type) rsultat longeur largeur variable locale la fonction retourne (rsultat) fin
instruction indispensable !
Utilisation (appel):
Algorithme Exemple variables surface, longueur, largeur : rel dbut longueur 10 ; largeur 25 surf1(longueur, largeur, surface) {utiliser surf1 surface surf2(longueur, largeur) ou surf2} Algorithmique 2 : Sous-algorithmes 34 fin
Simulation de sous-algorithmes
Algorithme calculNotes
{calcule la moyenne des notes saisies } variables note, somme, moyenne : rel nbnotes : entier ; ok : boolen dbut somme 0 ; nbnotes 0 {initialisations} afficher ("Donnez la premire note (note ngative pour terminer)") saisir(note) tant que note 0 faire {traitement : saisies des notes et calcul du total} compter(note, somme, nbnotes) afficher ("Donnez la note suivante (note ngative pour terminer) " ) saisir(note) ftq ok calculMoyenne(somme,nbnotes,moyenne) {calcul moyenne} si ok {affichage rsultat} alors afficher("La moyenne des ", nbnotes, "notes est", moyenne) sinon afficher("Pas de notes, pas de moyenne!") fin
Algorithmique 2 : Sous-algorithmes 36
Algorithmique 2 : Sous-algorithmes
37
Algorithmique 2 : Sous-algorithmes
38
dbut
Algorithmique 2 : Sous-algorithmes
39
Un autre exemple
Algorithme UnTest {Cet algorithme mesure votre capacit suivre des appels de sous-algorithmes} variables a,b,c : entiers dbut a 1 b 2 afficher ("Entre : (a, b) = (", a , b , ")" ) test1(a,b,c) afficher ("Sortie : (a, b, c) = (", a , b , c, ")" ) fin
Algorithmique 2 : Sous-algorithmes
40
Procdure test1(x, y, z) paramtres (D) x : entier (D/R) y : entier (R) z : entier dbut x x+1 y y+1 z test2(x , y) afficher ("fin test1 : (x, y, z) = (", x , y , z , ")" ) fin
Fonction test2(v1, v2) retourne entier paramtres (D) v1 : entier (D/R) v2 : entier variable rs : entier dbut afficher ("dbut test2 : (v1, v2) = (", v1, v2, ")" ) v1 v1 + 1 v2 v2+ 1 rs v1 + v2 retourner(rs) fin
Algorithmique 2 : Sous-algorithmes
41
Simulation
Algorithmique 2 : Sous-algorithmes
42
Sous-algorithmes
2. Analyse laide de sous-algorithmes
Algorithmique 2 : Sous-algorithmes
43
Problme :
A partir - du jour de la semaine (chiffre entre 1(=lundi) et 7(=dimanche)), - et de la date prsente sous le modle AAAAMMJJ, afficher la date du jour "en clair"
Exemple :
partir des donnes : 2 20031014 affichage : "Nous sommes le mardi 14 octobre 2003"
2 hypothses de travail : - l'utilisateur ne saisit que des chiffres - l'utilisateur peut se tromper sur la cohrence des donnes
Algorithmique 2 : Sous-algorithmes 44
Algorithme principal
Algorithme AffichageDate {faire un affichage lisible d'une date} variables dbut
calculJour
46
Procdure afficherDate(nomJ, jour, mois, anne) {affiche la date de faon bien lisible} paramtres (D) nomJ, (D) nomM : chanes (D) jour, (D) anne : entiers dbut afficher (" Nous sommes ", nomJ, " le ", jour, " ", nomM , " ", anne ) fin
Algorithmique 2 : Sous-algorithmes
50
Algorithmique 2 : Sous-algorithmes
52
l'appel (dans procdure saisieDate) : version fonction : tant que non dateValide(unJour) faire : tant que non dateValide(unJour, bon) faire
53
x version procdure
Algorithmique 2 : Sous-algorithmes
Permettre une mise au point progressive, module par module Faciliter la maintenance des programmes
- modifier le traitement lui-mme sans changer le rle particulier d'un module
Sous-algorithmes
3. Retour aux tableaux : Procdures et fonctions de manipulation de tableaux
57
Algorithme TraiterTableau
{saisit puis effectue des traitements sur une tableau d'entiers} constantes (MAX : entier) 100 (DRAPEAU : entier) 12345 variables nbVal, uneVal, ind : entiers valeurs : tableau [1, MAX] de entiers ok : boolen dbut
{remplissage du tableau}
{vrification de la saisie}
58
59
paramtres
variables dbut afficher ( "Donnez une valeur, ou bien", DRAPEAU, "pour arrter la saisie.") saisir (uneVal ) nbElt 0 tant que uneVal DRAPEAU et nbElt < MAX faire nbElt nbElt + 1 tab[nbElt ] uneVal afficher ("Donnez une autre valeur, ", DRAPEAU, "pour arrter.") saisir (uneVal ) ftq correct (uneVal = DRAPEAU) {vrai si la dernire valeur saisie tait fin le drapeau}
Algorithmique 2 : Tableaux (suite) 60
(R) tab : tableau [1, MAX] de entiers (R) nbElt : entier ; (R) correct : boolen uneVal : entier
61
62
63
65
mmeNbVal nbV1 = nbV2 Si mmeNbVal alors {parcours en parallle tant quon ne trouve pas une diffrence}
fsi
{Affichage rsultats}
66
constantes MAXLigne ..., MAXColonne ... type T2D = tableau[1,MAXLigne ; 1,MAXColonne] dentiers monTab : T2D
Algorithmique 2 : Tableaux (suite) 67
variable
Simulation :
68
(Dfinitions, suite) Procdure saisirTab2DavecDim(tab, nbrL, nbrC) {effectue la saisie dun tableau 2 dim nbrL lignes et nbrC colonnes} paramtres (R) tab : T2D (D) nbrL, nbrC : entiers variables dbut
Simulation :
69
(Dfinitions, suite) Procdure afficherTab2D(tab, nbrL, nbrC) {affiche toutes les valeurs dun tableau 2 dim nbrL lignes et nbrC colonnes} paramtres (D) tab : T2D (D) nbrL, nbrC : entiers variables dbut
Procdure copierTab2D(tabSource, tabDest, nbrL, nbrC) {copie toutes les valeurs de tabSource dans tabDest; ces deux tableaux sont superposables} paramtres (D) tabSource : T2D (R) tabDest : T2D (D) nbrL, nbrC : entiers variables dbut
Algorithmique 2 : Tableaux (suite) 70
(Dfinitions, suite) Fonction rechercheVal(val, tab, nbrL, nbrC, numL, numC) retourne boolen {recherche les coordonnes numL et numC de la valeur val dans un tableau 2 dim; retourne VRAI si trouv, FAUX sinon} paramtres (D) val, nbrL, nbrC : entiers (D) tab : T2D (R) numL, numC : entiers
71
Algorithme Exemple
{Traitements sur un tableau deux dimensions.} variables monTab : T2D nbrL, nbrC, uneVal, ind : entiers trouv : boolen dbut afficher(Entrez le nombre de lignes ( , MAXLignes, ) ) saisir(nbrL) afficher(Entrez le nombre de colonnes ( , MAXColonnes, ) ) saisir(nbrC) {saisies supposes correctes} saisirTab2DavecDim(monTab, nbrL, nbrC) afficherTab2D(monTab, nbrL, nbrC) afficher(Quelle valeur voulez vous rechercher ?) saisir(uneVal) trouv rechercheVal(uneVal, monTab, nbrL, nbrC, numL, numC) si trouv alors afficher(uneVal, se trouve la ligne , numL, et la colonne , numC) sinon afficher(uneVal ne se trouve pas dans le tableau. ) fin
Algorithmique 2 : Tableaux (suite) 72
Modularit :
Mthodologie d'analyse d'un problme en langage algorithmique
Algorithmique 2 : Modularit
73
But du jeu :
Dplacer tous les pions rouges vers la gauche (respectivement tous les pions noirs vers la droite), la case vide occupant la fin du jeu la case du milieu de la configuration comme au dpart.
Exemple :
configuration initiale : configuration finale gagnante :
N N N N
1 2 3 4 5
R R R R
6 7 8
R R R R
N N N N
74
9 10 Algorithmique 2 : Modularit
Rgles du jeu:
- les pions noirs ne peuvent se dplacer que vers la droite les pions rouges ne peuvent se dplacer que vers la gauche - un pion noir peut tre dplac droite dans la case vide : - si la case vide est juste droite de ce pion - s'il lui suffit de sauter par dessus un seul pion rouge, c'est--dire si entre la case vide et lui il n'y a qu'un seul pion rouge. - un pion rouge peut tre dplac gauche dans la case vide : - si la case vide est juste gauche de ce pion - s'il lui suffit de sauter par dessus un seul pion noir, c'est--dire si entre la case vide et lui il n'y a qu'un seul pion noir.
Exemple :
N R
coups possibles :
coups interdits :
N R
Algorithmique 2 : Modularit
R R N R N
75
N R
Fonctionnement :
A vous de jouer en donnant simplement la position du pion que vous jouez. La machine dplace le pion choisi si c'est possible. Le jeu sarrte si vous avez gagn ou si vous avez atteint une situation de blocage. Dans ce cas vous avez perdu!
Structure
de donnes :
Dans un premier temps, se demander quelles structure de donnes utiliser pour la reprsentation interne des donnes - le plateau de jeu Plateau: tableau de caractres
Algorithmique 2 : Modularit
77
Contraintes du jeu
Puis : bien comprendre les contraintes du jeu en explicitant les rgles de faon plus formelle; inventorier les situations possibles.
si pion-rouge alors si case-gauche est vide alors dplacement-gauche sinon si case-gauche-noire et case-suivante est vide alors dplacement-saut-gauche sinon si pion-noir alors si case--droite est vide alors dplacement-droite sinon si case-droite-rouge et case-suivante est vide alors dplacement-saut-droite Dplacement change de valeurs entre la case vide et la case du pion jouer.
Algorithmique 2 : Modularit 78
Algorithmique 2 : Modularit
79
initPlateau
affichePlateau
jouerUnCoup
finJeu?
rejouer?
nbPionsCorrect?
pionJouable?
permisRouge? permisNoir?
Algorithmique 2 : Modularit
80
inventorier tous les "cas de figure" des donnes soumises prendre en compte : - un cas gnral (ou plusieurs distingus) - les cas extrmes ("effets de bord") construction partir de la thorie
Algorithmique 2 : Modularit 84
fin Volume 2
Algorithmique : Volume 2
85