Académique Documents
Professionnel Documents
Culture Documents
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
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
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).
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