Vous êtes sur la page 1sur 7

D partement STPI e

Lundi 20 Juin 2011

I3 - Algorithmique
Dur e : 3h e Documents autoris s : AUCUN (calculatrice comprise) 1 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. ` Nutilisez pas de crayon a papier.

Questions de cours (2 points)

Pour rappel, lalgorithme du tri par fusion est : proc dure triFusion (E/S t : Tableau[1..MAX] dEntier ,E nb :Naturel) e debut triFusionRecursif(t,1,nb) n proc dure triFusionRecursif (E/S t : Tableau[1..MAX] dEntier ,E d,f :Naturel) e debut si d<f alors triFusionRecursif(t,d,(d+f) div 2) triFusionRecursif(t,((d+f) div 2)+1,f) fusionnner(t,d,(d+f) div 2,f) nsi n Sachant que la complexit de la proc dure f usionner est en O(n) d montrez que la complexit de la e e e e proc dure triF usion est en O(nlog2 (n)). e Solution propos e : e Cf. le cours

2
2.1

Exercice de TD (5 points)
Recherche dichotomique it rative e

Donnez lalgorithme de la fonction suivante qui retourne lindice de la derni` re occurence dun entier e que e lon sait pr sent dans le tableau t poss dant nb entiers signicatifs tri s en ordre croissant : e e e fonction indiceDerniereOccurence (t : Tableau[1..MAX] dEntier , nb : Naturel, e : Entier) : Naturel Testez votre algorithme sur le tableau suivant en cherchant lindice de la derni` re occurence du nombre 5 : e 1 1 5 2 5 3 5 4 7 5 9 6 10 7 10 8 12 9

Solution propos e : e fonction rechercheDichotomique (t : Tableau[1..MAX] dEntier ; n : Naturel ; element : Entier) : Naturel D claration a,b,m : Naturel e debut
1. Sauf les dictionnaires pour les etudiants non francophones

a1 bn m (a + b) div 2 tant que a < b faire si t[b]=e alors ab sinon si t[m] element alors am sinon b m-1 nsi m (a + b) div 2 nsi ntantque retourner b n

2.2

Recherche dichotomique r cursive e

Faites de m me, mais cette fois de mani` re r cursive. Votre r cursivit est terminale ou non terminale ? e e e e e Justiez. Solution propos e : e fonction rechercheDichotomiqueR (t : Tableau[1..MAX] dEntier ; a,b : Naturel ; element : Entier) : Naturel D claration m : Naturel e debut si a<b alors m (a + b) div 2 si t[b]=e alors retourner rechercheDichotomiqueR(t,b,b,element) sinon si t[m] element alors retourner rechercheDichotomiqueR(t,m,b,element) sinon retourner rechercheDichotomiqueR(t,a,m-1,element) nsi nsi sinon retourner b nsi n

Probl` me (13 points) e


` Soit le type Point2D utilisable a laide des fonctions et proc dures suivantes : e fonction point2D (x,y : Reel) : Point2D fonction obtenirX (p : Point2D) : Reel fonction obtenirY (p : Point2D) : Reel fonction distanceEuclidienne (p1,p2 : Point2D) : Reel proc dure translater (E/S p : Point2D,E vecteur : Point2D) e 2

proc dure faireRotation (E/S p : Point2D,E centre : Point2D, angle : Reel) e

3.1

Polyligne

Une ligne polygonale, ou ligne bris e (on utilise aussi parfois polyligne par traduction de langlais polye line) est une gure g om trique form e dune suite de segments, la seconde extr mit de chacun dentre eux e e e e e etant la premi` re du suivant.[. . .] Un polygone est une ligne polygonale ferm e. (Wikip dia) e e e La gure 1 pr sente deux polylignes compos es de 5 points. e e

(a) polyligne ouverte

(b) polyligne ferm e e

F IGURE 1 Deux polylignes De cette d nition nous pouvons faire les constats suivants : e Une polyligne est constitu e dau moins deux points ; e On peut obtenir le nombre de points dune polyligne ; Une polyligne est ouverte ou ferm e (quelle soit ouverte ou ferm e ne change pas le nombre de points : e e dans le cas o` elle est ferm , on consid` re quil a une ligne entre le dernier et le premier point) ; u e e ` On peut ins rer, supprimer des points a une polyligne (par exemple la gure 2 pr sente la supression du e e troisi` me point de la polyligne ouverte de la gure 1) ; e On peut parcourir les points dune polyligne ; On peut effectuer des transformations g om triques (translation, rotation, etc.) ; e e On peut calculer des propri t s dune polyligne (par exemple sa longueur totale). ee

F IGURE 2 Supression dun point

3.2

Conception pr liminaire e
Proposez la signature des fonctions et proc dures correspondant aux op rations suivantes : e e ` cr er une polyligne ouverte a partir de deux Point2D ; e savoir si une polyligne est ferm e ; e ouvrir une polyligne ; fermer une polyligne ; connaitre le nombre de points dun polyligne ; obtenir le i` me point dune polyligne ; e 3

ins rer le i` me point dune polyligne ; e e supprimer le i` me point dune polyligne (on suppose quelle a au moins 3 points) ; e calculer la longueur dun polyligne ; translater une polyligne ; faire une rotation dune polyligne.

Solution propos e : e fonction polyligne (pt1,pt2 : Point2D, estFermee : Booleen) : Polyligne fonction estFermee (pl ; Polyligne) : Booleen proc dure fermer (E/S pl : Polyligne) e proc dure ouvrir (E/S pl : Polyligne) e fonction nbPoints (pl ; Polyligne) : Naturel fonction iemePoint (pl ; Polyligne, position : Naturel) : Point2D proc dure ajouterPoint (E/S pl : Polyligne,E pt : Point2D, position : Naturel) e proc dure supprimer (E/S pl : Polyligne,E position : Naturel) e fonction longueur (pl : Polyligne) : Reel proc dure translater (E/S pl : Polyligne,E vecteur : Point2D) e proc dure faireRotation (E/S pl : Polyligne,E centre : Point2D, angleEnRadian : Reel) e

3.3

Conception d taill e e e

On propose de repr senter le type Polyligne de la facon suivante : e Type Polyligne = Structure lesPts : Tableau[1..MAX] de Point2D nbPts : Naturel estFermee : Booleen nstructure Proposez les fonctions et proc dures correspondant aux op rations suivantes : e e ` cr er une polyligne ouverte a partir de deux Point2D ; e ouvrir une polyligne ; translater une polyligne. Solution propos e : e fonction polyligne (pt1,pt2 : Point2D, estFermee : Booleen) : Polyligne D claration resultat : Polyligne e debut resultat.nbPts 2 resultat.lesPts[1] pt1 resultat.lesPts[2] pt2 resultat.estFermee Faux retourner resultat n proc dure ouvrir (E/S pl : Polyligne) e debut pl.estFermee Faux n proc dure translater (E/S pl : Polyligne,E vecteur : Point2D) e D claration i : Naturel e debut ` pour i 1 a nbPoints(pl) faire trasnlater(pl.lesPts[i],vecteur) npour 4

3.4

Utilisation dune polyligne

Dans cette partie, nous sommes utilisateur du type Polyligne et nous respectons le principe dencapsulation. 3.4.1 ` Point a lint rieur e

Nous supposons poss der la fonction suivante qui permet de calculer langle orient en degr form par les e e e e segments (ptCentre, pt1) et (ptCentre, pt2) : fonction angle (ptCentre,pt1,pt2 : Point2D) : Reel ` ` Il est possible de savoir si un point pt est a lint rieur ou a lext rieur dune polyligne ferm e en calculant e e e la somme des angles orient s form s par les segments issus de pt vers les points cons cutifs de la polyligne. En e e e ` ` effet si cette somme en valeur absolue est egale a 360 alors le point pt est a lint rieur de la polyligne, sinon il e ` est a lext rieur. e ` Par exemple, sur la gure 3, on peut savoir algorithmiquement que pt est a lint rieur de la polyligne car e |1 + 2 + 3 + 4 + 5 | = 360.

2 1 1 5 5 2 pt 4 3 4

` F IGURE 3 Point a lint rieur dune polyligne e Proposez le code de la fonction suivante en supposant que p est bien une polyligne ferm e : e fonction estALinterieur (p : Polyligne ; pt : Point2D) : Booleen Solution propos e : e fonction estALinterieur (p : Polyligne ; pt : Point2D) : Booleen D claration i : Naturel e sommeAngle : Reel debut sommeAngle 0 ` pour i 1 a nbPoints(p)-1 pas de 0 faire sommeAngle sommeAngle+angle(pt,iemePoint(p,i),iemePoint(p,i+1)) npour sommeAngle sommeAngle+angle(pt,iemePoint(p,nbPoints(p)),iemePoint(p,1)) retourner sommeAngle=360 ou sommeAngle=-360 n 3.4.2 Surface dune polyligne par la m thode de mont -carlo e e

Une des facons dapproximer la surface dune polyligne est dutiliser la m thode de Mont -Carlo. Le prin e e cipe de cette m thode est de calculer une valeur num rique en utilisant des proc d s al atoires, cest-` -dire e e e e e a des techniques probabilistes (Wikip dia). Dans le cas du calcul dune surface, il suft de tirer au hasard des e ` points qui sont a lint rieur du plus petit rectangle contenant la polyligne. La surface S de la polyligne pourra e alors etre approxim e par la formule suivante : e 5

S SurfaceDuRectangle

Nb points dans la polyligne Nb points total

Par exemple, sur la gure 4, en supposant que le rectangle fasse 3 cm de hauteur et 4, 25 cm de largeur, et ` quil y a 28 points sur 39 qui sont a lint rieur de la polyligne, sa surface S peut etre approxim e par : e e S 3 4, 25 28 = 9, 39 cm2 38

F IGURE 4 Calcul de la surface dune polyligne par la m thode de Mont -Carlo e e On suppose poss der la fonction suivante qui permet dobtenir un r el al atoire entre une borne minimum e e e et une borne maximum : fonction reelAleatoire (borneMin,bornneMax : Reel) : Reel ` 1. Proposez lanalyse descendante pour le calcul dune surface dune polyligne a laide de la m thode de e Mont -Carlo. e Solution propos e : e

Polyligne,Naturel surfacePolyligne Reel ((((hhhhhhhhh hhhhhhh (((((((  h (((((((  Polyligne minMax Reel4 Point2D,Point2D surfaceRectangle Reel Reel4 pointAleatoire Point2D

2. Donnez les signatures des proc dures et fonctions de votre analyse descendante. e Solution propos e : e fonction surfacePolyligne (p : Polyligne, nbPoints : Naturel) : Reel proc dure minMax (E p : Polyligne,S xMin,xMax,yMin,yMax :Reel) e fonction surfaceRectangle (ptBG,ptHD : Point2D) : Reel fonction pointAleatoire (borneMinX,borneMaxY,borneMinY,borneMaxY : Reel) : Point2D 3. Donnez lalgorithme de lop ration principale (au sommet de votre analyse descendante). e Solution propos e : e fonction surfacePolyligne (p : Polyligne, nbPoints : Naturel) : Reel debut minMax(p,xMin,xMax,yMin,yMax) surface surfaceRectangle(point2D(xMin,yMin),point2D(xMax,yMax)) nbDans 0 ` pour i 1 a nbPoints faire si estALinterieur(p,pointAleatoire(xMin,xMax,yMin,yMax)) alors nbDans nbDans+1 nsi npour 6

retourner surface*nbDans/nbPoints n