Vous êtes sur la page 1sur 86

iUT

ORSAY

Universit Paris XI I.U.T. d'Orsay Dpartement Informatique Anne scolaire 2003-2004

Algorithmique : Volume 2
Tableaux Sous-algorithmes Modularit

Ccile Balkanski, Nelly Bensimon, Grard Ligozat

Tableaux

Algorithmique 2 : Tableaux

Ensemble de donnes du mme type


Exemple de problme : Saisir une suite de nombres, puis afficher cette suite aprs avoir divis tous les nombres par la valeur maximale de la suite. Ncessit de conserver les nombres en mmoire
variable contenant une valeur variable contenant une collection de valeurs du mme type

val

132

val

132 52 -57 -8902 -841 8100 641

Remarque : appeler cette variable tabVal plutt que val


Algorithmique 2 : Tableaux 2

Les tableaux
Structure de donnes permettant d'effectuer un mme traitement sur des donnes de mme nature tableau une dimension

tableau deux dimensions

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

Traitements oprant sur des tableaux


On veut pouvoir :
- crer des tableaux - ranger des valeurs dans un tableau - rcuprer, consulter des valeurs ranges dans un tableau - rechercher si une valeur est dans un tableau - mettre jour des valeurs dans un tableau - modifier la faon dont les valeurs sont ranges dans un tableau (par exemple : les trier de diffrentes manires) - effectuer des oprations entre tableaux : comparaison de tableaux, multiplication,... - ...
Algorithmique 2 : Tableaux 5

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

Dclaration d'un tableau


Exemple : dclaration d'un tableau pouvant contenir jusqu' 35 entiers

variable tabl : tableau [1, 35 ] d'entiers


mot cl indices min et max (taille) type des lments

nom du tableau

Autre exemple : dclaration d'un tableau qui contiendra les frquences des tempratures comprises entre 40C et 50C

variable tempratures : tableau [-40, 50] de rels


Algorithmique 2 : Tableaux

Les lments sont numrots de -40 50

Dfinition d'un type tableau


type <Nom> = <description>

Exemple :

dclaration d'un nouveau type Mot, tableau de 10 caractres

type Mot = tableau [1, 10 ] de caractres variables nom, verbe : Mot

Algorithmique 2 : Tableaux

Utilisation dun tableau : par les indices


Accs en lecture :
- afficher(tabl[4])
{le contenu du tableau lindice 4 est affich l cran} {la valeur 18 est place dans le tableau lindice 3} {la valeur entre par lutilisateur est enregistre dans le tableau lindice 5}

Accs en criture :
- tabl[3] 18 - saisir(tabl[5]) - attention! tabl

18

nom[2]
Algorithmique 2 : Tableaux

3
9

Tableaux deux dimensions


1 1 2 2 3 4 5 6 7

10 3 9 20

25 7

14 12

2 2

1 4

8 7

tableau 2 lignes et 7 colonnes

Dclaration
points : tableau[1,2 ; 1,7] dentiers
indices min et max des lignes indices min et max des colonnes
10

Algorithmique 2 : Tableaux

Tableaux deux dimensions (suite)


1 1 2 2 3 4 5 6 7

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

Saisir les valeurs d'un tableau 1D


Algorithme SaisieTableau {remplit un tableau avec nbVal valeurs entires } constantes (TailleMAX : entier) 100 variables nbVal, ind : entier nombres : tableau [1, TailleMAX] d'entiers dbut afficher ("Combien de valeurs sont saisir?") saisir (nbVal) si nbVal > TailleMAX alors {refuser la saisie : la capacit du tableau est dpasse} afficher ("trop de valeurs saisir") sinon pour ind 1 nbVal faire afficher ("Donner une valeur") {valeur ranger dans la indme case du tableau} saisir (nombres[ind]) fpour fsi Algorithmique 2 : Tableaux fin

12

Saisie avec Drapeau


Algorithme SaisieTableauAvecDrapeau {remplit un tableau tant qu'il y a des caractres ranger, dernier caractre : '\'} constantes (TailleMAX : entier) 100 (DRAPEAU : caractre) '\' variables nbLettres : entier {nombre de caractres rangs dans lettres} lettres : tableau [1, TailleMAX] de caractres unCar : caractre dbut nbLettres 0 {saisie du premier caractre ranger dans Lettres} afficher ( Tapez un caractre, ou ", DRAPEAU, "pour arrter la saisie. ") saisir (unCar )
Algorithmique 2 : Tableaux 13

(Saisie avec Drapeau, suite)

{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

Affichage dun tableau


Algorithme SaisitEtAffiche {saisit et affiche un tableau de caractres} constantes {voir transparents prcdents} variables {voir transparents prcdents} dbut {saisie du tableau : voir transparents prcdents} {affichage} afficher ("Voici les", nbLettres, "caractres saisis dans le tableau :") pour cpt 1 nbLettres faire afficher (lettres[cpt]) fpour ATTENTION fin excuter la boucle seulement nbLettres fois!

Algorithmique 2 : Tableaux

17

Saisir les valeurs d'un tableau 2D


Algorithme SaisieTableau2D {remplit un tableau 2 dimensions } constantes (TailleMAX : entier) 100 variables nbLignes, nbColonnes, indL, indC : entiers nombres : tableau [1, TailleMAX ; 1, TailleMAX] d'entiers dbut afficher ("Combien de lignes?") ; saisir (nbLignes) afficher ("Combien de colonnes?") ; saisir (nbColonnes) si nbLignes > TailleMAX ou nbColonnes > TailleMAX alors afficher ("trop de valeurs saisir") sinon pour indL 1 nbLignes faire pour indC 1 nbColonnes faire afficher ("Ligne" , inL, "colonne", indC, " : ") saisir (nombres[indL indC]) fpour fpour fsi Algorithmique 2 : Tableaux 18 fin

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

Identifier le rle d'un bloc d'instructions


Algorithme Puissances variables uneVal, puissance : rels cpt, nbPuissances : entiers dbut afficher ("Donnez un nombre rel quelconque : ") saisir (uneVal) afficher ("Combien de puissances successives souhaitez-vous ? ") saisir (nbPuissances) {calcul des nbPuissances puissances successives de uneVal } puissance 1 pour cpt 1 nbPuissances faire puissance puissance uneVal afficher ("La", cpt, "ime puissance de", uneVal, "est", puissance ) fpour fin
Algorithmique 2 : Sous-algorithmes 21

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

Nouveau schma d'un algorithme


Algorithme
Donnes
initialisation du traitement traitement Communication des rsultats

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

Comment les informations circulent...

sousalgorithme1

Algorithme

sousalgorithme4

informations retournes par les sous-algorithmes l'algorithme principal

informations transmises par l'algorithme principal aux sous-algorithmes

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

sous-algorithme appell PARAMETRES

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 : formalisation syntaxique


nom de la procdure
liste des paramtres

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

dclaration des paramtres (attributs, nom, type)

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 : formalisation syntaxique


nom de la fonction liste des paramtres type de la valeur retourne spcification

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 !

Attention : pas de paramtre de statut (R) pour la valeur retourne


Algorithmique 2 : Sous-algorithmes 33

Comparaison : Fonctions et Procdures Dfinition :


Procdure surf1(long,larg, aire) paramtres (D) long, larg : rel (R) aire : rel dbut aire long larg fin Fonction surf2(long,larg) retourne rel paramtres (D) long, larg : rel variable aire : rel dbut aire long larg retourne (aire) fin

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

Caractristiques des deux classes de sous-algorithmes


Une procdure, comme une fonction, est appele dans un algorithme par son nom suivi de la liste des arguments correspondant sa liste de paramtres. Lors de l'appel d'une fonction, la valeur retourne doit tre exploite dans une instruction (affectation, expression arithmtique ou logique, affichage, ...). Dans une fonction, la valeur retourne explicitement remplace le paramtre d'attribut rsultat (R) auquel on veut donner une importance particulire. Dans une procdure comme dans une fonction, la liste des paramtres peut tre vide.
Algorithmique 2 : Sous-algorithmes 35

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

Procdure compter(uneNote, laSomme, nb)


{Ajoute uneNote laSomme et incrmente nb} paramtres

dbut

Fonction calculMoyenne(laSomme, nb, laMoyenne) retourne boolen


{Calcule la moyenne des nb notes dont le total est laSomme; retourne vrai si calcul possible, faux sinon} paramtres variable 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

Un autre exemple (suite)

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

{saisie des donnes}


saisieJourSemaine( saisieDate( {extraction des 4 chiffres de gauche dans la date} calculAnne( {extraction des 5me et 6me chiffres de la date, et conversion dans le mois correspondant} calculMois( {extraction des 2 chiffres de droite dans la date} calculJour( {prsentation de la date} afficherDate( fin
Algorithmique 2 : Sous-algorithmes 45

Analyse de la circulation d'informations

Algorithme AffichageDate saisieDate saisieJourSemaine afficherDate calculAnne calculMois


Algorithmique 2 : Sous-algorithmes

calculJour
46

Dtail des procdures (1)


Procdure saisieJourSemaine(nom)
{saisit le numro du jour et retourne le nom du jour dans nom }

paramtre (R) nom : chane


variable numJ : entier dbut rpter afficher ("Donnez le numro du jour dans la semaine (nombre compris entre 1 et 7) :") saisir (numJ ) tant que numJ < 1 ou numJ > 7 nom nomJourSemaine(numJ) sous-algorithme qui fin
retourne le nom du (num_J)me jour de la semaine
Algorithmique 2 : Sous-algorithmes 47

variable locale la procdure

Dtail des procdures (2)


Procdure saisieDate(laDate)
{saisit la date sous forme d'une chane, en vrifie la cohrence, puis retourne dans laDate la chane convertie en entier}

paramtre (R) laDate : entier


variable unJour : chane dbut rpter afficher ("Donnez la date (sous la forme AAAAMMJJ) :") saisir (unJour) tant que non dateValide(unJour) laDate convertir(unJour) fin sous-algorithme
sous-algorithme qui vrifie la cohrence de la date

qui transforme la chane unJour en un entier


Algorithmique 2 : Sous-algorithmes 48

Dtail des procdures (3)


Procdure calculAnne(laDate, anne) {isole l'anne anne dans la date laDate (4 chiffres de gauche)} paramtres (D) laDate, (R) anne :entier dbut anne laDate div 10 000 fin Procdure calculMois(laDate, leMois) {isole le mois leMois dans la date ( chiffres des milliers et des centaines)} paramtres (D) laDate : entier (R) leMois : chane variables unMois : entier dbut unMois (laDate mod 10 000) div 100 sous-algorithme qui retourne le nom du leMois nomMois(unMois) (unMois)me mois fin
Algorithmique 2 : Sous-algorithmes 49

Dtail des procdures (4)


Procdure calculJour(laDate, leJour) {isole le jour leJour dans la date laDate (2 chiffres de droite)} paramtres (D) laDate, (R) leJour :entier dbut leJour laDate mod 100 fin

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

Dtail des fonctions (1)


Fonction nomJourSemaine(numJ) retourne (chane) {retourne le nom du (numJ) me jour de la semaine} paramtres (D) numJ : entier variable leJour : chane dbut selon numJ : 1: leJour "Lundi" 2: leJour "Mardi" 3: leJour "Mercredi" 4: leJour "Jeudi" 5: leJour "Vendredi" 6: leJour "Samedi" 7: leJour "Dimanche" retourne (leJour ) fin Remarque : mme genre de fonction pour nomMois(numM)
Algorithmique 2 : Sous-algorithmes 51

Hirarchie des appels de sous-algorithmes


Algorithme AffichageDate

Algorithmique 2 : Sous-algorithmes

52

Remarque : procdure ou fonction?


Fonction dateValide (leJour) retourne (boolen) {} paramtres (D) leJour : chane variable bon : boolen dbut bon retourne (bon) fin Procdure dateValide (leJour, bon) {} paramtres (D) leJour : chane (R) bon : boolen dbut bon fin

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

Remarque : procdure ou fonction? (suite)


Fonction convertir (leJour) retourne (entier) {} paramtres (D) leJour : chane variable uneDate : entier dbut uneDate retourne (uneDate) fin Procdure convertir (leJour, uneDate) {} paramtres (D) leJour : chane (R) uneDate : entier dbut uneDate fin

l'appel (dans procdure saisieDate) : version fonction : laDate convertir(unJour)

version procdure : convertir(unJour, laDate)


Algorithmique 2 : Sous-algorithmes 54

Remarque : procdure ou fonction? (suite)


Fonction saisieDate() retourne (entier) {} variable uneDate : entier dbut uneDate retourne (uneDate) fin Procdure saisieDate(uneDate) {} paramtres (R) uneDate : entier dbut uneDate fin

l'appel (dans algorithme DateEnClair) : version fonction : date saisieDate()

version procdure : saisieDate(date)


Algorithmique 2 : Sous-algorithmes 55

Bilan : Intrt de la programmation modulaire


Permettre une analyse descendante d'un problme :
- identifier les diffrents traitements contribuant au travail demand - organiser l'enchanement des tapes

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

Enrichir le langage algorithmique en ajoutant de nouveaux "mots" du langage


- notion de "boite outils", de bibliothques de composants logiciels rutilisables
Algorithmique 2 : Sous-algorithmes 56

Sous-algorithmes
3. Retour aux tableaux : Procdures et fonctions de manipulation de tableaux

Algorithmique 2 : Tableaux (suite)

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}

{affichage du contenu du tableau}

Algorithmique 2 : Tableaux (suite)

58

(suite Algorithme TraiterTableau)


{somme des lments du tableau}

{recherche d un lment dans le tableau}

Algorithmique 2 : Tableaux (suite)

59

Procdure saisieTableau (tab, nbElt, correct)


{remplit le tableau tab tant qu'il y a des valeurs ranger; retourne tab, sa taille effective nbElt, et correct vrai si pas de pb}

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

Procdure afficheTableau (tab, nbElt)


{affiche les nb valeurs du tableau tab} paramtres tab : tableau [1, MAX] de entiers nbElt : entier variables ind : entier dbut

Fonction sommeTab (tab, nbElt) retourne entier


{retourne la somme des nb lments du tableau tab} paramtres tab : tableau [1, MAX] de entiers nbElt : entier variables ind, total : entiers dbut

Algorithmique 2 : Tableaux (suite)

61

Fonction recherche (tab, nbElt, uneVal, ind) retourne boolen


{Recherche le premier indice o se trouve la valeur uneVal parmi les nbElt donnes du tableau tab; retourve Vrai si trouv, et faux sinon. } Paramtres tab : tableau [1, MAX] de entiers nbElt, uneVal : entiers ind : entier variables trouv : boolen dbut

Algorithmique 2 : Tableaux (suite)

62

Fonction ajout(tab, nbElt, uneVal) retourne boolen


{Ajoute la valeur uneVal au tableau tab de nb lments. retourne vrai si Possible, sinon faux} paramtres tab : tableau [1, MAX] de entiers nbElt : entier uneVal : entier variable possible : boolen dbut

Algorithmique 2 : Tableaux (suite)

63

Exemple de traitements avec plusieurs tableaux


Algorithme copieTableau {Recopie un tableau dans un autre tableau en changeant le signe des valeurs } constante (MAX : entier) 100 variables nbV, ind : entier ; tab1, tab2 : tableau [1, MAX] de rels dbut {remplissage du tableau tab1} saisieTableau(tab1, nbV, ok) {vrification de la saisie} {remplissage du tableau tab2} pour ind 1 nbV faire tab2 [ind] - tab1 [ind] fpour {suite du traitement} fin
Algorithmique 2 : Tableaux (suite) 64

Comparaison de deux tableaux


Algorithme CompareTableaux {Vrifie l'identit de deux tableaux} constante (MAX : entier) 100 variables nbV1, nbV2, ind : entiers gaux, mmeNbVal, ok : boolens tab1, tab2 : tableau [1, MAX] de rels dbut {remplissage du tableau tab1} saisieTableau(tab1, nbV1, ok) {vrification de la saisie} {remplissage du tableau tab2} saisieTableau(tab2, nbV2, ok) {vrification de la saisie}

Algorithmique 2 : Tableaux (suite)

65

(Comparaison de deux tableaux, suite)


{Traitement : comparaison des deux tableaux}

mmeNbVal nbV1 = nbV2 Si mmeNbVal alors {parcours en parallle tant quon ne trouve pas une diffrence}

fsi
{Affichage rsultats}

Algorithmique 2 : Tableaux (suite)

66

Retour au tableau deux dimensions


10 3 9 20 25 7 14 12 2 2 1 4 8 7

constantes MAXLigne ..., MAXColonne ... type T2D = tableau[1,MAXLigne ; 1,MAXColonne] dentiers monTab : T2D
Algorithmique 2 : Tableaux (suite) 67

variable

Quelques procdures associes au type T2D


Procdure initTab2D(val, tab) {affecte la valeur val tous les lments du tableau 2 dim Tab} paramtres (D) val : entier (R) tab : T2D variables dbut

Simulation :

Algorithmique 2 : Tableaux (suite)

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 :

Algorithmique 2 : Tableaux (suite)

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

Algorithmique 2 : Tableaux (suite)

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

Problme : crire l'algorithme du jeu de Saute Mouton


Sur une ligne de NB cases, on place, la suite et en partant de la gauche, des pions noirs puis des pions rouges spars par une case vide unique. On pose autant de pions noirs que de pions rouges. La configuration de pions n'occupe pas ncessairement toute la ligne.

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!

Comment lire un nonc de problme dans le but d'crire l'algorithme correspondant


reprer les donnes proposes reprer les rsultats attendus identifier les contraintes de la tche dfinir les traitements raliser
Algorithmique 2 : Modularit 76

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

constante (NbMAX : entier)

10 {nombre max de pions d'une couleur}

type Plateau = tableau [1, 2 x NbMAX + 1] de caractres variable jeu : Plateau

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

Hirarchie des appels de sous-algorithmes


Puis : reformuler l'nonc en tentant de planifier le travail, "dcortiquer" les tapes successives du jeu.

dcomposer la tche en sous-tches


Algorithme schmatique - initialiser le plateau de jeu - afficher le plateau de jeu - jouer un coup (si coup propos est permis) - rejouer si non fini - si fini, proposer de refaire une partie

Algorithmique 2 : Modularit

79

concevoir la hirarchie des appels de sous-algorithmes


Algo principal

initPlateau

affichePlateau

jouerUnCoup

finJeu?

rejouer?

nbPionsCorrect?

pionJouable?

coupPermis? bloqu? gagn?

permisRouge? permisNoir?

Algorithmique 2 : Modularit

80

criture de l'algorithme principal


(Une possibilit parmi dautres) Algorithme SauteMouton {jeu de saute mouton} constante (NbMAX : entier) 10 {nombre maximum de pions d'une couleur} type Plateau = tableau [1, 2 x NbMAX + 1] de caractres variables plateauJeu : Plateau nbPions : entier {nombre de pions d'une couleur} indVide : entier {indice de la case vide} suite : boolen {vrai si partie non termine} dbut rpter initPlateau(plateauJeu,nbPions) affichePlateau(plateauJeu,nbPions) suite non finJeu?(plateauJeu,nbPions,indVide) tant que suite faire jouerUnCoup(plateauJeu,nbPions,indVide) affichePlateau(plateauJeu,nbPions) suite non finJeu?(plateauJeu,nbPions,indVide) ftq tant que rejouer? fin Algorithmique 2 : Modularit 81

Spcification des sous-algorithmes


exemple: Procdure initPlateau(tab,nb) {demande le nombre nb de pions rouges utiliser et vrifie que ce nombre est acceptable. Si oui, remplit le plateau tab de nb pions rouges et nb pions noirs, sinon demande un nouveau nombre.} paramtres (R) tab : plateau (R) nb : entier

Dfinition des sous-algorithmes Programmation


Attention !!! Rien n'est fig, tout moment on peut tre amen modifier des choix faits prcdemment.
Algorithmique 2 : Modularit 82

Comment faciliter la mise au point d'un programme



donnez des noms vocateurs vos variables, vos constantes, vos sousalgorithmes programmez modulairement : chaque bloc de l'algorithme remplit un sous-but lmentaire du problme gnral documentez votre travail : identifiez chaque bloc par un commentaire explicatif truffez l'algorithme d'affichages permettant de suivre la trace l'excution du programme correspondant mettez au point module par module votre programme, en construisant des jeux d'essais appropris chacun de ces modules prvoyez un affichage de contrle des valeurs saisies aussitt aprs la saisie

Des habitudes qu'il est vivement conseill de prendre !


Algorithmique 2 : Modularit 83

Construction d'un jeu d'essais pour la validation d'un algorithme


explorer tous les cheminements possibles l'intrieur d'un algorithme construction partir de la modlisation informatique

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

Vous aimerez peut-être aussi