Académique Documents
Professionnel Documents
Culture Documents
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.
` 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
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
sontEgalesIC
Boolen
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;