Vous êtes sur la page 1sur 4

D partement STPI e

Jeudi 12 avril 2012

I3 - Algorithmique
Dur e : 1h30 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.

Question de cours (3 points)


1. Quelle est la diff rence entre it ration d terministe et it ration ind terministe ? e e e e e 2. Quest ce que lencapsulation ? 3. Quel est le r le de la conception pr liminaire ? o e

Solution propos e : e Voir le cours

Le jeu Sogo (8 points)

` Le Sogo est le nom donn en 1978 a la premi` re edition francaise par la soci t Ravensburger dun jeu e e ee qui existait depuis 1968 aux Etats-Unis dAm rique sous le nom de Score four. Les premi` res versions du jeu e e datent de 1968 alors que le jeu Puissance 4 nest apparu quen 1974. Le Sogo est un jeu dalignement en trois dimensions, avec un effet de gravit : une pi` ce ne peut etre jou e e e e ` a un niveau sup rieur que si des pi` ces ont d j` et jou es a tous les niveaux inf rieur au m me endroit. e e eae e ` e e Le but du jeu est daligner 4 pi` ces de sa couleur le premier. Lalignement peut etre vertical, horizontal ou e suivre nimporte quelle diagonale. (Wikip dia). e

F IGURE 1 Le jeu Sogo (source Wikip dia) e Comme nous lavons vu en cours, on peut mod liser ce jeu de la facon suivante : e Constante LARGEUR = 4 Constante PROFONDEUR = 4 Constante HAUTEUR = 4 Type Contenu = {vide,pionNoir,pionBlanc}
1. Sauf les dictionnaires pour les etudiants non francophones

Type PlateauSogo = tableau[1..LARGEUR ][ 1..PROFONDEUR][1..HAUTEUR] de Contenu 1. Proposez la proc dure vider, qui permet de vider enti` rement un plateau du jeu Sogo. e e 2. Proposez la fonction hauteur, qui permet de calculer le nombre de pions verticaux pr sents sur une e colonne (identi e par son abscisse et son ordonn e). e e 3. Proposez la proc dure jouerUnPion, qui permet de jouer un pion sur une colonne (identi e par son e e abscisse et son ordonn e). Cette colonne ne devant pas etre totalement remplie. e Solution propos e : e proc dure vider (E/S p : Plateau) e D claration i,j,k : Naturel e debut ` pour i 1 a LARGEUR faire ` pour j 1 a PROFONDEUR faire ` pour k 1 a HAUTEUR faire p[i][j][k] vide npour npour npour n fonction hauteur (p : Plateau, largeur : 1..LARGEUR,profondeur : 1..PROFONDEUR) : 0..HAUTEUR D claration i : 0..HAUTEUR e debut i1 tant que p[largeur,profondeur,i]=vide et i<=HAUTEUR faire i i+1 ntantque retourner i-1 n proc dure jouerUnPion (E/S p : Plateau,E largeur : 1..LARGEUR, profondeur : 1..PROFONDEUR, pion : e pionNoir..pionBlanc) pr condition(s) hauteur(p,largeur,profondeur)<HAUTEUR e debut p[largeur,profondeur,hauteur(p,largeur,profondeur)+1] pion n

Une analyse descendante (9 points)

Soit lanalyse descendante pr sent e par la gure 2 qui permet de rechercher la position dune chane de cae e ` ract` res dans une autre chane ind pendemment de la casse (do` le sufxe IC a lop ration positionSousChaineIC), e e u e cest-` -dire que lon ne fait pas de distinction entre majuscule et minuscule. a Pour r soudre ce probl` me il faut pouvoir : e e obtenir la longueur dune chane de caract` res ; e obtenir la sous-chane dune chane en pr cisant lindice de d part de cette sous-chane et sa longueur (le e e premier caract` re dune sous-chane a lindice 1) ; e ` savoir si deux chanes de caract` res sont egales ind pendemment de la casse. e e Lop ration positionSousChaineIC retournera la premi` re position de la chane recherch e dans la e e e chane si cette premi` re est pr sente, 0 sinon. e e Par exemple : positionSousChaine("AbCdEfGh","cDE") retournera la valeur 3 ; 2

positionSousChaineIC

longueur

sontEgalesIC

sousChaine

minuscule

F IGURE 2 Une analyse descendante positionSousChaine("AbCdEfGh","abc") retournera la valeur 1 ; positionSousChaine("AbCdEfGh","xyz") retournera la valeur 0. 1. Compl tez lanalyse descendante en pr cisant les types de donn es en entr e et en sortie. e e e e 2. Donnez les signatures compl` tes (avec pr conditions si n cessaire) des sous-programmes (fonctions ou e e e proc dures) correspondant aux op rations de lanalyse descendante. e e ` 3. Donnez lalgorithme du sous-programme correspondant a lop ration positionSousChaineIC (vous e ne donnerez pas les algorithmes des autres op rations). e 4. Donnez le code Pascal de ce sous programme en ayant au pr alable d clarer les autres sous-programmes. e e Solution propos e : e
Chane de caractres Chane de caractres positionSousChaineIC Naturel

Chane de caractres

longueur

Naturel

Chane de caractres Chane de caractres

sontEgalesIC

Boolen

Chane de caractres NaturelNonNul Naturel

sousChaine

Chane de caractres

Chane de caractres

minuscule

Chane de caractres

fonction positionIC (chaine, chaineARechercher : Chaine de caracteres) : Naturel pr condition(s) longueur(chaineARechercher)longueur(chaine)) e fonction longueur (chaine : Chaine de caracteres) : Naturel fonction sousChaine (chaine : Chaine de caracteres, position : NaturelNonNul, long : Naturel) : Chaine de caracteres pr condition(s) position+longlongueur(chaine) e fonction sontEgalesIC (chaine1, chaine2 : Chaine de caracteres) : Booleen fonction minuscule (chaine : Chaine de caracteres) : Chaine de caracteres fonction positionIC (chaine, chaineARechercher : Chaine de caracteres) : Naturel pr condition(s) longueur(chaineARechercher)longueur(chaine)) e 3

D claration i : Naturel e debut i1 tant que i+longueur(chaineARechercher)longueur(chaine) et non sontEgalesIC(sousChaine(chaine,i, longueur(chaineARechercher)),chaineARechercher) faire i i+1 ntantque si i+longueur(chaineARechercher)>longueur(chaine) alors i0 nsi retourner i n f u n c t i o n longueur(s : String) : Word; forward; f u n c t i o n sousChaine(s : String; deb, long : Word) : String; forward; f u n c t i o n sontEgalesIC(s1,s2 : String) : Boolean; forward; f u n c t i o n positionSousChaineIC(s1,s2 : String) : Word; begin positionSousChaineIC := 1; w h i l e (positionSousChaineIC+longueur(s2)<=longueur(s1)) and n o t sontEgalesIC(sousChaine(s1,positionSousChaineIC,longueur(s2)),s2) positionSousChaineIC := positionSousChaineIC+1; i f positionSousChaineIC+longueur(s2)>longueur(s1) t h e n positionSousChaineIC:=0 end;

Vous aimerez peut-être aussi