Vous êtes sur la page 1sur 8

Premier cycle

Mardi 24 Juin 2008

I3 - Algorithmique
Dur e : 3h00 e Documents autoris s : AUCUN (calculatrice comprise) e Remarques : Veuillez lire attentivement les questions avant de r pondre. e Le bar` me donn est un bar` me indicatif qui pourra evoluer lors de la correction. e e e Rendez une copie propre.

1
1.1

Compr hension dalgorithmes vus en cours (5 points) e


Min-max

Apr` s avoir rappel en quelques lignes le principe de lalgorithme min-max, quel est le coup qui sera choisi e e par cet algorithme sur larbre pr sent par la gure 1. e e
Position P

P11

P12

P13

P21

P22

P23

P24

P25

P26

P27

P31

P32

P33

P34

P35

P36

P37

P38

P39

P310 P311

P312

P313 P314

P315 P316

P41 P42 P43 P44 P45 P46 P47 P48 P49 P410 P411 412 413P414 P414 P415 P416 417P418 P419 P420 421 422 P423 P424 P425 P426P427 P P P P P 3 -4 5 6 2 -3 0 -4 5 10 3 -4 -2 0 -2 2 -6 0 6 -2 -7 3 2 5 -4 -1 5 10

P428P429P430 P431 P432 3 -8 8 3 4

F IG . 1 Arbre de positions

Solution propos e : e

Position P

P11

-3

P12

P13 3

P21 2

P22 -3

P23

P24

P25

P26

P27 3

-4

P31

P32

P33 -3

-4

P34

P35

-4

P36

-2

P37

P38 P39 P310 P311 -6 6 -7 2

-4

P312

P313 P314 -1 5

P315 P316 -8 3

P41 P42 P43 P44 P45 P46 P47 P48 P49 P410 P411 412 413P414 P414 P415 P416 417P418 P419 P420 421 422 P423 P424 P425 P426P427 P P P P P 3 -4 5 6 2 -3 0 -4 5 10 3 -4 -2 0 -2 2 -6 0 6 -2 -7 3 2 5 -4 -1 5 10

P428P429P430 P431 P432 3 -8 8 3 4

1.2 paint
Dans le cours sur la r cursivit nous avons vu lalgorithme de la proc dure remplir suivante : e e e proc dure remplir ( E/S e : Ecran , E x,y : Naturel , ancienneCouleur, nouvelleCouleur : Couleur) e debut si obtenirCouleurPixel(e,x,y)=ancienneCouleur alors xerCouleurPixel(e,x,y,nouvelleCouleur) remplir(e,x,y-1,ancienneCouleur,nouvelleCouleur) remplir(e,x,y+1,ancienneCouleur,nouvelleCouleur) remplir(e,x-1,y,ancienneCouleur,nouvelleCouleur) remplir(e,x+1,y,ancienneCouleur,nouvelleCouleur) nsi n Apr` s avoir recopi la gure 2 sur votre copie, num roter les pixels qui seront colori s suivant leur ordre e e e e ` e dapparition a l cran en commencant par le pixel num rot 1 (lancienne couleur est le blanc, la nouvelle le e e noir).

x 0,0 y

1 12,12
` F IG . 2 Surface a remplir

Solution propos e : e

x 0,0 y
10 9 14 11 8 18 15 13 12 7 6 5 31 17 16 4 30 19 2 3 34 20 21 22 28 1 32 33 23 26 27 29 24 25

12,12
1.3 Partitionner

Apr` s avoir rappel en quelques lignes le principe du partitionnement dun tableau utilis dans le tri rapide, e e e donner le r sultat du partionnement du tableau suivant en consid rant que la valeur pivot est la valeur de la e e premi` re case. e 5 1 Solution propos e : e 1 1 Lindice pivot est donc de 5. 4 2 3 3 3 4 5 5 6 6 9 7 10 8 7 9 12 10 9 11 8 12 4 2 3 3 7 4 10 5 6 6 9 7 1 8 3 9 12 10 9 11 8 12

Polynome (4 points)
Soit le type Polynome avec les op rations suivantes : e fonction monome (a : Reel, n : Naturel) : Polynome fonction addition (p1,p2 : Polynome) : Polynome fonction degre (p : Polynome) : Naturel fonction coefcient (p : Polynome, n : Naturel) : Reel Donnez le corps des fonctions suivantes : 1. fonction multiplicationParScalaire (p : Polynome, a : Reel) : Polynome 2. fonction soustraction (p1,p2 : Polynome) : Polynome 3. fonction multiplication (p1,p2 : Polynome) : Polynome 4. fonction derivation (p : Polynome) : Polynome

Solution propos e : e fonction multiplicationParScalaire (p : Polynome, a : Reel) : Polynome D claration resultat : Polynome e i : Naturel coef : Reel debut resultat monome(0,0) ` pour i 0 a degre(p) faire 3

resultat addition(resultat,monome(a*coefcient(p,i),i)) npour retourner resultat n fonction soustraction (p1,p2 : Polynome) : Polynome D claration temp : Polynome e debut temp multiplicationParScalaire(p2,-1) retourner addition(p1,temp) n fonction multiplication (p1,p2 : Polynome) : Polynome D claration resultat : Polynome e i,j : Naturel debut resultat monome(0,0) ` pour i 0 a degre(p1) faire ` pour j 0 a degre(p2) faire resultat addition(resultat,monome(coefcient(p1,i)*coefcient(p2,j),i+j)) npour npour retourner resultat n fonction derivation (p : Polynome) : Polynome D claration resultat : Polynome e i : Naturel coef : Reel debut resultat monome(0,0) ` pour i 1 a degre(p) faire resultat addition(resultat,monome(coefcient(p,i)*naturelEnReel(i),i-1)) npour retourner resultat n

Probl` me du labyrinthe (11 points)1 e

Lobjectif de cet exercice est d tudier le probl` me du labyrinthe. Comme lindique la gure 3, lobjectif e e est de trouver un algorithme permettant de trouver le chemin qui m` ne de lentr e a la sortie. e e ` ` En fait, un labyrinthe est compos de cases. On acc` de a une case a partir dune case et dune direction. Les e e ` directions possibles sont Nord, Sud, Est et Ouest. Par exemple, comme le montre la gure 4, le labyrinthe pr c dent peut etre consid r comme etant compos e e ee e de 25 cases. La case num ro 6 est la case dentr e. La case 20 est la case de sortie. La case 8 est accessible e e depuis la case 13 avec la direction Nord.

3.1

Type direction (0,25 points)


Donner le type Direction.

Les 4 premi` res parties de cet exercice sont ind pendantes e e

Entree

Sortie

F IG . 3 Un labytinthe

1 6 11 16 21

2 7 12 17 22

3 8 13 18 23

4 9 14 19 24

5 10 15 20 25

F IG . 4 Un labytinthe compos de cases e

Solution propos e : e Type Direction = {Nord,Sud,Est,Ouest}

3.2

Conception pr liminaire dun ensemble de directions (2,5 points) e


` A limage du type EnsembleDEntiers vu en TD, on consid` re que lon a le type EnsembleDeDirections. e

1. Rappeler les op rations disponibles pour le type EnsembleDEntiers. e 2. Donner les signatures des proc dures et fonctions de ces op rations pour le type EnsembleDeDirections. e e Solution propos e : e 1. Les op rations disponibles pour le type EnsembleDEntiers. e initialiser un ensemble (dans ce cas il est vide, sa taille est de 0), obtenir la taille dun ensemble, savoir si un entier est pr sent dans lensemble, e ajouter un entier (si lentier est d j` pr sent, laction ne modie pas lensemble) ea e retirer un entier (si lentier nest pr sent, laction ne modie pas lensemble) e obtenir le i` me entier (on consid` re dans ce cas que lon a toujours 1 i taille de lensemble). e e 2. Signatures des proc dures et fonctions de ces op rations pour le type EnsembleDeDirections. e e proc dure initialiser ( E/S lEnsemble : EnsembleDeDirections ) e fonction taille (lEnsemble : EnsembleDeDirections) : Naturel fonction estPresent (lEnsemble : EnsembleDeDirections, d : Direction) : Booleen proc dure ajouter ( E/S lEnsemble : EnsembleDeDirections , E d : Direction ) e 5

proc dure retirer ( E/S lEnsemble : EnsembleDeDirections , E d : Direction ) e fonction iemeDirection (lEnsemble : EnsembleDeDirections, i : Naturel) : Direction

3.3

Conception d taill e dune pile de directions (4 points) e e

Une pile est un type de donn es de type LIFO (Last In First Out), cest-` -dire que la premi` re donn e e a e e ins r e dans une pile (on dit que lon empile une donn e) sera la derni` re donn e qui pourra etre retir e de la ee e e e e pile (on dit que lon d pile une donn e). R ciproquement, la derni` re donn e empil e sera la premi` re a etre e e e e e e e ` d pil e. e e e La gure 5 est une repr sentation graphique classique dune pile. Dans cet exemple, cest e1 qui a et empil e e e ` en premier. e2 a et empil en deuxi` me, e3 en troisi` me. Cest e3 qui sera le premier a etre d pil . e e e e e

empiler

depiler

e3 e2 e1

F IG . 5 Une pile Les op rations pour manipuler une pile sont les suivantes : e e cr er une pile vide (sans aucun el ment) e savoir si une pile est vide e empiler un el ment dans une pile e d piler un el ment dune pile e e En consid rant que les el ments que lon va utiliser sont des directions, on peut concevoir le type e PileDeDirections de la facon suivante : Type PilesDeDirections = Structure lesDirections : Tableau[1..MAX] de Direction nb : Naturel nstructure La conception pr liminaire de ce type donne les signatures de fonctions et proc dures suivantes : e e fonction creerPileDeDirections () : PileDeDirections fonction estUnePileDeDirectionsVide (p : PileDeDirections) : Booleen proc dure empilerDirection ( E/S p : PileDeDirections , E d : Direction ) e proc dure depilerDirection ( E/S p : PileDeDirections , S d : Direction ) e . . .avec non(estU neP ileDeDirectionsV ide(p)) Donner le corps de ces fonctions et proc dures. e Solution propos e : e fonction creerPileDeDirections () : PileDeDirections D claration resultat : PileDeDirection e debut resultat.nb 0 retourner resultat n fonction estUnePileDeDirectionsVide (laPile : PileDeDirections) : Booleen 6

debut retourner laPile.nb=0 n proc dure empilerDirection ( E/S laPile : PileDeDirections , E d : Direction ) e debut laPile.nb laPile.nb+1 laPile.lesDirections[laPile.nb] d n proc dure depilerDirection ( E/S laPile : PileDeDirections , S d : Direction ) e debut d laPile.lesDirections[laPile.nb] laPile.nb laPile.nb-1 n

3.4

Conception pr liminaire du type Labyrinthe (1,25 points) e


Les op rations disponibles sur un labyrinthe sont les suivantes : e cr er un labyrinthe (rectangle dune certaine dimension), e obtenir la case dentr e, e savoir si une case est la case de sortie, obtenir un ensemble de directions possibles depuis une case donn e, e obtenir la case accessible depuis une case et une direction. Donner les signatures des fonctions et proc dures correspondant aux op rations d crites ci-dessus. e e e

Solution propos e : e fonction creerLabyrinthe (largeur,hauteur : Naturel) : Labyrinthe fonction caseDEntree (unLabyrinthe : Labyrinthe) : Entier fonction estUneCaseDeSortie (unLabyrinthe : Labyrinthe, uneCase : Entier) : Booleen fonction directionsPossibles (unLabyrinthe : Labyrinthe, uneCase : Entier) : EnsembleDeDirections fonction caseDestination (unLabyrinthe : Labyrinthe, uneCase : Entier, uneDirection : Direction) : Entier

3.5

Utilisation du type Labyrinthe : Algorithme du petit-poucet (4 points)

Lobjectif de cette derni` re partie est dobtenir une pile de directions qui permet de trouver la sortie depuis e une case. Une solution a ce probl` me est dutiliser le principe du petit poucet, cest-` -dire mettre un caillou sur e a ` les cases rencontr es. Lorsque lon tombe sur un cul de sac ou une case d j` rencontr e, on retourne a la e ea e case pr c dente pour tester une autre direction. e e Pour ne pas modier le type Labyrinthe, plut t que de marquer une case avec un caillou on peut ajouter une o ` case a un ensemble (EnsembleDEntiers vu en TD). Pour v rier si on a d ja rencontr une case, il suft e e e alors de v rier si la case est pr sente dans lensemble. e e ` Proposer le corps de la proc dure suivante qui permet de trouver le chemin de sortie (sil existe) a partir e 2 : dune case donn e e proc dure calculerCheminDeSortie ( E l : Labyrinthe, caseCourante : Entier , E/S casesVisitees : e EnsembleDEntiers , S permetDAllerJusquALaSortie : Booleen, lesDirectionsASuivre : PileDeDirections ) Solution propos e : e proc dure calculerCheminDeSortie ( E l : Labyrinthe, caseCourante : Case , E/S casesVisitees : Ensemblee DEntiers , S permetDAllerJusquALaSortie : Booleen, lesDirectionsASuivre : PileDeDirections )
2

Vous pouvez vous inspirer de la proc dure remplir du premier exercice e

D claration directions : EnsembleDeDirections e i : Naturel caseTest : CaseEntier debut si estCaseDeSortie(caseCourante) alors permetDAllerJusquALaSortie VRAI lesDirectionsASuivre creerPileDeDirections() sinon si non estPresent(casesVisitees,caseCourante) alors casesVisitees ajouter(casesVisitees,caseCourante) directions directionsPossibles(l,caseCourante) permetDAllerJusquALaSortie FAUX i1 tant que itaille(directions) et non permetDAllerJusquALaSortie faire caseTest caseDestination(l,iemeDirection(directions,i)) calculerCheminDeSortie(l,caseTest,casesVisitees,permetDAllerJusquALaSortie, lesDirectionsASuivre) si permetDAllerJusquALaSortie alors empilerDirection(lesDirectionsASuivre,iemeDirection(directions,i)) nsi i i+1 ntantque nsi nsi n