Vous êtes sur la page 1sur 5

D partement STPI e

Lundi 18 juin 2012

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.

R cursivit (4 points) e e

220 200 180 160 140 120 100 80 60 400 50 100 150 200

F IGURE 1 Dessin r cursif e

Rappels math matiques e


Les trois sommets dun triangle equilat ral, dont lun des c t est parall` le a laxe des abscisses, de centre e oe e ` xc , yc de base b ont les coordonn es suivantes : e xc , yc + 2 h/3 xc b/2, yc h/3 xc + b/2, yc h/3 avec h = b2 (b/2)2

Questions
Supposons que la proc dure suivante permette de dessiner un segment sur un graphique (variable de type e Graphique) :
1. Sauf les dictionnaires pour les etudiants non francophones

proc dure ligne (E/S g : Graphique,E x1,y1,x2,y2 : Reel) e Lobjectif est de concevoir une proc dure dessinerCroix qui permet de dessiner sur un graphique des e dessins r cursifs tels que pr sent s par la gure 1. La signature de cette proc dure est : e e e e proc dure dessinerCroix (E/S g : Graphique,E xCentre,yCentre,base : Reel, niveauRecursion : Naturel) e 1. Lors du premier appel de cette proc dure, donnez la valeur des quatre derniers param` tres effectifs an e e dobtenir le graphique de la gure 1. 2. Donnez le corps de cette proc dure. e

Tris (3 points)

On a vu en cours que lalgorithme du tri rapide est : proc dure triRapide (E/S t :Tableau[1..MAX] dEntier,E nb :Naturel) e debut triRapideRecursif(t,1,nb) n proc dure triRapideRecursif (E/S t :Tableau[1..MAX] dEntier,E d,f :Naturel) e D claration indicePivot : Naturel e debut si d<f alors partionner(t,d,f,indicePivot) triRapideRecursif(t,d,indicePivot-1) triRapideRecursif(t,indicePivot+1,f) nsi n Donnez lalgorithme de la proc dure partitionner. e

Le jeu du serpent (13 points)

Lobjectif global de cet exercice est de concevoir une partie du jeu du serpent : jeu des ann es 80, que lon e ` retrouve sur tous les vieux t l phones, qui consiste a guider un serpent de facon a ce quil mange des proies ee ` sans quil se mange lui m me. e Le serpent avance constamment dans une direction. On peut le faire changer de direction. Lorsquil arrive au bord de lair de jeu, il r apparatre de lautre c t . Enn lorsquil mange une proie, il grandit pendant un e oe certain temps (seule sa t te avance). La partie se termine lorsque le serpent mange une partie de son corps. e Les gures 2 pr sentent plusieurs etats du jeu. e

3.1

Lair de jeu

e e Lensemble des el ments du jeu, les el ments du serpent et les proies, ont une position. Le serpent se dirige dans une direction. Soit les types Direction et Position d nis de la facon suivante : e Type Direction = {nord,est,ouest,sud} Type Position = Structure x : NaturelNonNul y : NaturelNonNul nstructure Lair de jeu est caract ris par quatre constantes XMIN, XMAX, YMIN, YMAX (pour toute position p on a : e e XM IN p.x XM AX et Y M IN p.y Y M AX). On suppose que la position de coordonn es e ` (XM IN, Y M IN ) se trouve en haut a gauche de lair de jeu, et celle de coordonn es (XM AX, Y M AX) en e ` bas a droite.

(a) Serpent qui se dirige vers le nord, il na encore mang aucune e proie. La position de la t te a pour coordonn es e e (7,5).

(b) Serpent ayant mang une proie et qui e est pass du c t droit e oe de lair de jeu, au c t oe gauche (il se dirige vers lest). La position de la t te a pour coordonn es e e (4,5).

(c) Serpent ayant mang deux proies. Il e se dirige vers le sud.

F IGURE 2 Quelques exemples d tat du jeu serpent e ` Proposez le corps de la fonction suivante qui permet de calculer une nouvelle position a partir dune position donn e et dune direction donn e (attention si la position donn e se trouve en bordure de lair de jeu, la position e e e ` calcul e peut etre a loppos de lair de jeu). e e fonction nouvellePosition (p : Position, d : Direction) : Position

3.2

Le serpent

Soit le type ListeChaineePosition (d ni comme nous lavons vu en cours pour la liste chan e e e dentiers) qui poss` de les fonctions et proc dures suivantes : e e fonction listeVide () : ListeChaineePosition fonction estVide (uneListe : ListeChaineePosition) : Booleen proc dure ajouter (E/S uneListe : ListeChaineePosition,E p : Position) e fonction obtenirPosition (uneListe : ListeChaineePosition) : Position pr condition(s) non estVide(uneListe) e fonction obtenirListeSuivante (uneListe : ListeChaineePosition) : ListeChaineePosition pr condition(s) non estVide(uneListe) e proc dure xerListeSuivante (E/S uneListe : ListeChaineePosition,E nelleSuite : ListeChaineePosie tion) pr condition(s) non estVide(uneListe) e proc dure supprimerTete (E/S l :ListeChaineePosition) e pr condition(s) non estVide(l) e proc dure supprimer (E/S uneListe : ListeChaineePosition) e ` On se propose de repr senter le serpent a laide dune liste chan e de positions, tel que la t te de la liste e e e e repr sentera la position de la queue du serpent et le dernier el ment de la liste repr sentera la position de la t te e e e du serpent. Ainsi on repr sente le type Serpent de la facon suivante : e Type Serpent = Structure tete : ListeChaineePosition queue : ListeChaineePosition nstructure 3

tete : queue :

position :

x:7 y:7

position :

x:7 y:6

position :

x:7 y:5

listeSuivante :

listeSuivante :

listeSuivante :

F IGURE 3 Repr sentation graphique de linstance de serpent de la gure 2(a) e La gure 3 pr sente une repr sentation graphique du serpent de la gure 2(a). e e 1. Donnez le type ListeChaineePosition. ` e 2. Repr sentez graphiquement (` limage de la gure 3) linstance du type serpent correspondant a l tat du e a jeu repr sent par la gure 2(b). e e 3. Donnez le corps des deux fonctions suivantes : fonction obtenirPositionTete (s : Serpent) : Position fonction obtenirPositionQueue (s : Serpent) : Position 4. Donnez le corps de la proc dure suivante qui permet de faire avancer un serpent en le faisant grandir dun e e el ment : proc dure avancerEnGrandissant (E/S s : Serpent, E d : Direction) e 5. Donnez le corps de la proc dure suivante qui permet de faire avancer un serpent sans le faire grandir : e proc dure avancerSansGrandir (E/S s : Serpent, E d : Direction) e 6. Donnez le corps de la proc dure suivante qui initialise un serpent ( tat du serpent en d but de partie) tel e e e que la position de sa queue soit au centre de laire de jeu et que sa direction initiale soit au nord : proc dure initSerpent (E/S s : Serpent, E tailleInitiale : NaturelNonNul) e pr condition(s) tailleInitiale>1 et tailleInitiale(YMAX-YMIN) div 2 e 7. Donnez le corps de la fonction suivante qui permet de savoir si une position donn e est une position dun e e el ment du serpent : fonction estUnePositionDuSerpent (s : Serpent, p : Position) : Booleen

3.3

Jeu du serpent

Soit les types suivants : Type T1 = fonction(d : Direction) : Direction Type T2 = proc dure(E s : Serpent ; positionProie : Position ; score : Naturel) e Soit la proc dure jouer suivante qui permet de jouer au jeu du serpent : e proc dure jouer (f1 : T1, p2 : T2, tailleInitiale,tailleAgrandissementSiProieMange : NaturelNonNul) e pr condition(s) tailleInitiale>1 et tailleInitiale(YMAX-YMIN) div 2 e D claration s : Serpent e pProie, p : Position tailleAgrandissementRestant,score : Naturel dir : Direction jeuFini : Booleen 4

debut initSerpent(s) tailleAgrandissementRestant 0 score 0 dir nord pProie positionAleatoireProie(s) jeuFini FAUX tant que non jeuFini faire dir f1(dir) p calculerNellePosition(obtenirPositionTete(s),dir) si estUnePositionDuSerpent(s,p) alors jeuFini VRAI sinon si p = pProie alors pProie positionAleatoireProie(s) tailleAgrandissementRestant tailleAgrandissementRestant + tailleAgrandissementSiProieMange score score + 1 nsi si tailleAgrandissementRestant > 0 alors avancerEnGrandissant(s,dir) tailleAgrandissementRestant tailleAgrandissementRestant - 1 sinon avancerSansGrandir(s,dir) nsi nsi p2(s,pProie,score) ntantque supprimerSerpent(s) n 1. Quels sont les r les des fonction f1 et proc dure p2 ? Pourquoi sont-elles pass es en param` tre de la o e e e proc dure jouer ? e 2. La fonction positionAleatoireProie permet dobtenir la position dune nouvelle proie (ses coordonn es sont tir es au hasard). Lors de lappel, pourquoi doit-on passer le serpent comme param` tre e e e effectif ? 3. En supposant que lon poss` de la fonction suivante qui permet dobtenir un naturel al atoire compris e e entre deux bornes, donnez lalgorithme de la fonction positionAleatoireProie. fonction naturelAleatoire (borneInf, borneSup : Naturel) : Naturel pr condition(s) borneInf < borneSup e

Vous aimerez peut-être aussi