Module ITC34 - Algorithmique et Programmation TDs Algorithmique (trois séances) Benoît Darties - benoit.darties@u-bourgogne.fr Univ. Bourgogne Franche-Comté Année universitaire 2015-2016 Avant-propos : Support de Travaux Dirigés (TD) dispensés à l Université Bourgogne Franche- Comté, enseignements en Algorithmique et Programmation partie Algorithmique. La totalité de ce document a été rédigée uniquement à partir des connaissances de son auteur, et en utilisant un matériel personnel. L utilisation / réutilisation partielle ou complète d éléments de ce document est soumise à l approbation de son auteur. Les corrections détaillées de chaque exercice sont disponibles par mail sur demande au terme des séances de TD. 1 Analyse, boucles et structures conditionnelles Les exercices de cette section vous permettent de vous familiariser avec la notation des algorithmes, avec le concept de trace issu du déroulement d un algorithme, et avec la notion d algorithmes récursifs. On demandera un soin particulier lors de la rédaction d un algorithme, en faisant bien figurer le nom de l algorithme, sa fonction, les paramètres d entrée et le résultat retourné. Exercice 1 : Analyse d algorithme L objectif de cet exercice est d arriver à comprendre le fonctionnement et le but d un algorithme en retraçant son déroulement. Pour cela, on injecte différentes valeurs d entrée, on note le résultat à chaque fois, on cherche une corrélation entre les entrées et le résultat obtenu, et on essaye de conclure sur l objectif de l algorithme à partir des observations réalisées On considère l algorithme suivant dont l objectif est inconnu : Algorithme 1 : Algorithme inconnu Données : A:entierstrictementpositif B:entierstrictementpositif Résultat : result : entier positif 1 début 2 si A<Balors 3 temp A ; 4 A B ; 5 B temp; 6 fin 7 C A mod B; 8 tant que C 6= 0faire 9 A B ; 10 B C ; 11 C A mod B; 12 fin 13 result B ; 14 retourner result ; 15 fin
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 2 1. Combien cet algorithme possède t il de paramètres d entrée? 2. En utilisant un tableau dont les colonnes sont indicées par les différents paramètres et variables de cet algorithme, effectuer la trace de l algorithme pour les valeurs de paramètres d entrée suivantes : (a) A = 56 et B = 21 (b) A = 48 et B = 12 (c) A = 49 et B = 27 3. Que fait cet algorithme? (Effectuez une trace avec d autres valeurs si la réponse ne vous apparait pas tout de suite) 4. Nommez cet algorithme. Quelle syntaxe écririez-vous pour exécuter cet algorithme lorsque le premier paramètre A prend la valeur 50 et le second paramètre B prend la valeur 23? 5. Deux nombres sont premiers entre eux si et seulement si leur plus grand commun diviseur est égal à 1. En réutilisant et appelant l algorithme précédent comme sous-algorithme, écrivez un algorithme qui renvoie vrai si et seulement si deux nombres sont premiers entre eux. Exercice 2 : Algorithmes de quelques fonctions mathematiques L objectif de cet exercice est la définition des entrées d un algorithme à partir des données d un énoncé, ainsi que la manipulation de variables au sein d une boucle Écrivez les algorithmes permettant de calculer les objets mathématiques suivants : 1. le nombre harmonique H n d un entier n, définiparl équationsuivante: H n = nx k=1 1 k = 1+ 1 2 + 1 3 +...+ 1 n (1) L entier naturel n est ici la seule entrée de l algorithme. Le résultat à renvoyer est la valeur du nombre harmonique, qui peut être un nombre réel. On suppose que n est toujours strictement supérieur à 0. 2. une approximation du nombre, obtenueaumoyendelaformulationdeleibniz: 4. nx k=0 ( 1) k 2k +1 = 4 1 4 3 + 4 5 4 7 + 4 11...+ 4 2n +1 (2) Lorsque n tend vers l infini, alors la formulation de Leibniz tend vers. Onvousdemande d écrire d ici l algorithme permettant de calculer cette formulation lorsque n est un entier naturel positif donné en tant que paramètre de l algorithme. Exercice 3 : Manipulation de structures Dans cette exercice, nous définirons et manipulerons quelques structures au sein d un algorithme. Pour des raisons de simplicité, nous supposerons ici que l utilisateur ne rentre que des entiers strictement positifs On souhaite créer une structure permettant de stocker des dates, ainsi que des algorithmes (ou fonctions) permettant de manipuler des dates. 1. Définir le type date. Ce type doit être une structure comportant trois éléments : jour, quidéfinitlenumérodejour(comprisentre1et31), mois, quidéfinitlenumérodemois(comprisentre1et12), annee, quidéfinitl annéesouslaformed unentiernaturel.
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 3 Il est bien à noter qu il s agit d un type, et non d une variable. On considère par la suite que lorsqu une variable de type date est créée, le domaine de chacun de ses éléments est bien respecté. (par exemple, le jour ne pourra pas être égal à 35). 2. Ecrire une fonction estbissextile qui prend en paramètre une donnée nommée annee de type entier. Cette fonction renvoie un booléen, qui est à vrai si l année est bissextile, et faux sinon. Pour rappel, une année est bissextile si elle est divisible par 4 mais pas par 100, elle est aussi bissextile si elle est divisible par 400. 3. Ecrire une fonction datejuste qui prend en paramètre une donnée nommée date2test de type date. Cette fonction renvoie un booléen, qui est à vrai si la date représentée dans la structure date2test est juste, c est à dire que pour les mois de 30 jours, l élément jour n est pas égal à 31, et qu il n est pas égal à 29, 30 ou 31 pour le mois de février, sauf s il s agit d une année bisextille, auquel cas, la valeur 29 est admise. Autrement, elle renverra faux. 4. Ecrire la fonction jourdulendemain qui prend une donnée nommée aujourdhui de type date, et retourne une structure de type date qui correspond à la date du lendemain. 5. Ecrire une fonction comparedates prend comme données deux dates nommées d1 et d2 de type date, etretournelavaleur0sicesdatessontégales,1siladated1 est plus récente que la date d2,et-1siladated2 est plus récente que la date d1 6. En réutilisant une partie des fonctions définies jusqu à présent,écrire une fonction ecartjours qui prend comme données deux dates nommées d1 et d2 de type date, et retourne le nombre de jours qui séparent ces deux dates. On pourra faire cette fonction de manière très simple (pas nécessairement optimal en terme de temps de calcul) en utilisant les fonctions jourdulendemain et comparedates. Exercice 4 : Analyse d algorithme recursif Cet exercice vise à vous familiariser avec le concept d algorithmes récursif, et à vous permettre d appréhender ces derniers en déroulant un exemple simple On vous propose d étudier l algorithme récursif AlgoMystere suivant, qui prend en entrée deux entiers naturels A et B : Algorithme 2 : AlgoMystere Données : A:entiernaturel B:entiernaturel Résultat : result : entier 1 début 2 si B=0alors 3 result A; 4 retourner result; 5 sinon 6 C = A mod B ; 7 result=algomystere(b,c) ; 8 retourner result; 9 fin 1. Effectuer la trace de l algorithme lorsque le premier appel de l algorithme est réalisé avec les valeurs suivantes (pour réaliser cette trace, à chaque appel de l algorithme, il convient de définir un nouveau tableau correspondant à un nouvel appel avec les valeurs adéquates en paramètres) : (a) A = 750 et B = 150 (b) A = 500 et B = 170 2. Que fait cet algorithme?
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 4 Exercice 5 : Definition d algorithme recursif Dans cet exercice, il vous est demandé de définir un algorithme récursif permettant de calculer deux fonctions mathématiques pour lesquelles vous avez déjà définis des algorithmes itératifs précédemment. Il vous est conseillé d écrire dans un premier temps la fonction sous forme récursive réduite, en exprimant une valeur de départ, et d exprimer la fonction à l indice n selon sa valeur à un indice inférieur, par exemple n 1, puis d écrire le pseudo-code associé 1. Proposez deux algorithme récursifs nommés harmonique et pileibniz, prenantchacunun paramètre n de type entier, et permettant de calculer les éléments suivants. Pour chaque algorithme, vous déterminerez la valeur de l indice de départ. Si le paramètre n est égal à cet indice, on retourne simplement la valeur. Sinon, il convient d exprimer la valeur à retourner en fonction de la valeur qui aurait été retournée à l indice inférieur. (a) le nombre harmonique H n pour un entier n 1 donné. Pour rappel : H n = nx k=1 1 k = 1+ 1 2 + 1 3 +...+ 1 n (3) (b) une approximation du nombre, obtenueaumoyendelaformulationdeleibniz. Pour rappel, la fonction de Leibniz est la suivante : 4. nx k=0 ( 1) k 2k +1 = 4 1 4 3 + 4 5 4 7 + 4 11...+ 4 2n +1 (4) 2 Algorithmes sur tableaux et matrices Les exercices de cette section vous permettent de vous entrainer sur la définition d algorithmes dans des tableaux et matrices. Les objectifs sont multiples : déterminer le type de parcours à effectuer sur un tableau : déterministe (pour.. allant de..a..) ou non déterministe (tant que...), définir les meilleures conditions d arrêt dans les boucles non déterministes, effectuer des boucles imbriquées dans le parcours de matrices... Dans ces exercices, nous travaillerons uniquement avec des tableaux d entiers. Chaque tableau d entier passé en données sera de type tableau d entier et identifié par un nom, et il faudra également passer en donnée la taille de ce tableau. Un raisonnement similaire est à appliquer si le tableau est bi-dimentionnel : on utilisera le type matrice d entiers et les deux dimensions de cette matrice doivent également être passés en paramètres Exercice 6 : Manipulation de tableau d entiers L objectif de cet exercice est de définir les premières boucles qui permettent de parcourir un tableau, et de déterminer leur caractère déterministe, ou non déterministe Dans l ensemble des questions suivantes, la donnée de chacun des algorithmes à écrire est un tableau d entier nommé T accompagné de sa taille n qui est définie en tant qu entier. Les cellules de T sont indicées de 0 à n 1, etlesvaleursdecescellulessontinitialiséesavecdesvaleursentières aléatoires. On vous demande d écrire les algorithmes suivants : 1. Un algorithme somme qui prend en données le tableau d entiers T et sa taille n, etquiretourne la somme des valeurs des cellules du tableau T. 2. Un algorithme consécutifs qui prend en données le tableau d entiers T et sa taille n, et qui retourne vrai si et seulement si deux cellules de T d indice immédiatement consécutifs ont la même valeur, et faux sinon. Par exemple, si on a les tableaux suivants : T1= [ 5, 6, 78, 34, 23, 56, 34, 70 ] T2= [ 5, 6, 78, 34, 23, 23, 42, 67 ] T3= [ 5, 6, 5, 6, 5, 6, 5, 6 ]
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 5 alors l algorithme consécutifs ne retournera vrai que pour le tableau T2 3. Un algorithme affiche qui prend en données le tableau d entiers T et sa taille n, et qui affiche les valeurs contenues dans le tableau T séparées par des tirets. Par exemple : 5-6 - 78-34 - 23-56 - 34-67 La difficulté de cette question réside dans le fait que l on ne souhaite pas qu il y ait un tiret après le dernier nombre. Exercice 7 : Manipulation de matrices d entiers Dans cet exercice, nous étendons les algorithmes vus sur tableau unidimensionnels à des tableaux bi-dimensionnels, c est à dire des matrices Dans cet exercice, nous reprenons la définition des algorithmes de l exercice précédent avec non pas un tableau d entier T, maisavecunematriced entiersnotéem dont les dimensions m X n sont deux entiers également passés en paramètres. On vous demande d écrire les algorithmes suivants : 1. Un algorithme somme qui prend en données la matrice d entiers M et ses dimensions m x n, et qui retourne la somme des valeurs des cellules de la matrice M. 2. Un algorithme consécutifs qui prend en données la matrice d entiers M et ses dimensions m x n,etquiretournevrai si et seulement si deux cellules adjacentes de M ont la même valeur, et faux sinon. Deux cellules sont dites adjacentes si elles sont immédiatement consécutives sur la même ligne ou sur la même colonne. Pour cet exercice, deux approches sont possibles : Soit on regarde seulement les cellules consécutives sur les lignes, puis on fait la même chose sur les colonnes. Soit on parcours les cellules de l indice [0][0] àl indice[n-2][n-2] et on regarde pour chacune si sa valeur est la même que la cellule immédiatement à droite ou que la cellule immédiatement en dessous. Il faudra ensuite parcourir une seule fois la dernière ligne, et la dernière colonne, pour verifier les adjacences des cellules de cette ligne et de cette colonne. 3. Un algorithme affiche qui prend en données la matrice d entiers M et ses dimensions m x n, etquiaffichelesvaleurscontenuesdanslamatricem séparées par des tirets. Un exemple d affichage est présenté ci-après : 5-6 - 8-34 - 23-56 - 34-67 56-4 - 78-34 - 13-56 - 434-12 34-99 - 94-34 - 76-47 - 34-67 4-6 - 84-34 - 23-0 - 98-27 Exercice 8 : Algorithme de tri par selection Cet exercice présente un algorithme courant de tri d éléments d un tableau. Il vise à évaluer votre capacité à traduire des instructions informelles et à les écrire sous la forme d un algorithme Le tri par sélection est une méthode de tri des éléments d un tableau. Nous utiliserons ici un tableau d entier T de taille n et on supposera que tous ces éléments sont des entiers strictement positifs mais inférieurs à 1000. LetriparsélectionconsisteàordonnerlesélémentsdeT de manière séquentielle dans un nouveau tableau de même taille, que nous appellerons T2, delafaçonsuivante: On parcourt entièrement T àlarecherchedelacellulecontenantlavaleurlapluspetite. L indice du tableau qui contient cette valeur est stocké dans une variable temp.pour effectuer cette sélection, on peut supposer que temp est initialisé avec l indice 0, etpointedoncsur la première, et chaque fois que l on rencontre une valeur inférieure à celle contenue dans temp, on affecte temp avec cette nouvelle valeur.
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 6 On place alors la valeur contenue dans la cellule de T d indice temp dans la première cellule du tableau T2. On parcourt une seconde fois le tableau T àlarecherchedel indicedecellulecontenantla seconde plus petite valeur. Toute la difficulté réside dans le fait qu il ne faut pas sélectionner ànouveaulavaleurquel onavaitsélectionnéprécédemment(lorsdupremierparcours).pour cela, il faut utiliser un troisième tableau de booléens Tselect de même taille que les autres, et utilisé de la façon suivante : le tableau Tselect est initialisé avec uniquement des valeurs faux. Achaquefoisquel onparcourtletableaut entièrement et que l on sélectionne un indice dans temp, la cellule de même indice du tableau Tselect doit être positionnée à vrai. Il conviendra alors dans les parcours suivant de ne considérer que les valeurs des cellules de T pour lesquelles les cellules d indice correspondants dans le tableau Tselect sont positionnées à faux. On place alors la nouvelle valeur contenue dans la cellule de T d indice temp dans la seconde cellule du tableau T2. On continue ainsi en parcourant n fois le tableau T. Achaquei eme parcours sur T, une cellule de Tselect passe à vrai, et la i eme plus petite valeur de T est sélectionnée, et placée dans la cellule d indice i dans T2. 1. Ecrivez l algorithme correspondant au tri par sélection décrit précédemment. Cet algorithme prend en entrée un tableau d entiers nommé T, latailledecetableaunomméen, etretourne un tableau ordonné T2 contenant les valeurs de T. 2. Quelle est la complexité d un tel algorithme? 3. Il est possible de faire une version plus simple de cet algorithme si on autorise la modification de T, enfaisantn 2 parcours sur T.Achaquei eme parcours, on ne parcourt le tableau T que des cellules i à n 1 àlarecherchedel indicecontenantlapluspetitevaleur.achaquefinde parcours, on inverse simplement la valeur de la cellule de cet indice avec la valeur de l indice i du tableau T. Onrépèteainsijusqu àavoireffectuélesn 2 parcours. Le tableau T est alors une donnée-résultat. Ecrivez l algorithme correspondant à une telle version de l algorithme de tri par sélection. Exercice 9 : Algorithme recursif sur matrice Cet exercice présente un algorithme récursif sur matrice. Il illustre un cas de figure dans lequel l utilisation de la récursivité permet de fournir une solution plus simple que l utilisation d un algorithme séquentiel. Dans cet exercice (inspiré du jeu bubble breaker), on considère une matrice M de dimensions m x n dont les valeurs des cellules sont soit 0, soit1. Unexempledematriceutiliséedanscetexercice (de dimensions 15 x 9) est donné ci-après : 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ------------------------------------------------ 0 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 1 0 2 1 0 0 0 1 0 1 1 0 0 1 1 0 1 1 3 1 1 1 0 1 0 0 1 0 1 1 0 0 0 1 4 1 1 0 0 0 0 1 0 1 0 0 0 1 0 0 5 1 0 0 0 0 0 0 0 0 1 1 0 1 0 0 6 1 0 0 1 0 1 0 0 1 0 0 1 0 1 1 7 0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 8 1 1 0 1 1 0 0 0 1 0 0 1 1 1 0 Dans cette matrice, deux cellules sont dites "adjacentes" si elles sont côte à côte et situées sur une même ligne ou même colonne. Par exemple, les cellules de coordonnées [5][6] et [5][7] sont adjacentes. On appellera zone un ensemble connexe maximal de cellules adjacentes. Par exemple,
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 7 les cellules ayant les coordonnées suivantes forment une zone : [14][6], [13][6], [13][7], [13][8], [12][8], [11][8], [11][7] et [11][6]. Sionconsidèrelacelluled indice[3][7], cette dernière est contenue dans une zone de 8 cellules contenant également la cellule [0][8]. Chaque cellule appartient à une zone exactement. On peut dont désigner une zone simplement par les coordonnées d une cellule contenue dans cette zone 1. Proposez un algorithme récursif remplir qui prend en entrée une une matrice Mglobale 1 de dimensions m x n,ainsiquelescoordonnées[x][y] d une cellule quelconque. L algorithme doit affecter la valeur 2 àchacunedescellulesdelamêmezonequelacellule[x][y]. Les cellules des autres zones ne doivent pas avoir leur valeur modifiée. L algorithme ne retournera rien, car la matrice d entrée sera modifiée en direct. Pour vous aider, on vous donne l idée générale de l algorithme : Si la cellule [x][y] contient déjà la valeur 2, iln yarienafaire. Sinon, on enregistre la valeur dans une variable temp, onchangelavaleurdelacelluleà2, et on regarde chacune des cellules autours de coordonnées [x+1][y], [x-1][y], [x][y-1] et [x][y+1].quandunedecescoordonnéescorrespondàunecelluleexistante(dansles bornes de la matrice) et que sa valeur est égale à celle contenue dans temp, alorsonappelle l algorithme récursif en modifiant seulement la coordonnée en entrée. 2. Pourquoi est-il nécessaire de d abord stocker la valeur de la cellule dans temp et modifier la valeur en 2, emph avant d appeler la fonction récursive? 3 Problème Exercice 10 : Algorithmes pour un jeu de puissance 4 L objectif de cet exercice est de réaliser les algorithmes nécessaires à la création d un jeu de Puissance4. Pour rappel, le but du jeu est d aligner 4 pions sur une grille comptant 6 rangées et 7 colonnes. Chaque joueur dispose de 21 pions d une couleur donnée, jaune pour le joueur 1, et rouge pour le joueur 2. Tour à tour, chaque joueur place un pion dans la colonne de son choix, le pion glisse alors jusqu à la position la plus basse possible dans la colonne. Le vainqueur est le joueur qui réalise le premier un alignement (horizontal, vertical ou diagonal) d au moins quatre pions de sa couleur. Si toutes les cases de la grille de jeu sont remplies et qu aucun des deux joueurs n a réalisé un alignement de 4 jetons ou plus, la partie est déclarée nulle. 1. Modélisation de la grille. Pourmodéliserlagrilledejeu, nousutiliseronsunematricem de caractères de 7 colonnes par 6 lignes. Les lignes sont indicées de 0 à 5. Lescellulesd indice de ligne 0 représente la ligne la plus basse du plateau de jeu, tandis que les cellules d indice 5 la ligne la plus haute. Les colonnes sont indicées de 0 à 6, lescellulesd indicedecolonne 0 représentant la colonne la plus à gauche, et celles d indice 6 la colonne la plus à droite. Chaque cellule peut prendre l une des valeurs suivantes : - :onconsidèrealorsquelacasecorrespondanten estoccupéeparaucunjeton. J :onconsidèrealorsquelacasecorrespondanteestoccupéeparunjetondujoueur1 R :onconsidèrealorsquelacasecorrespondanteestoccupéeparunjetondujoueur2 Par soucis de simplicité, on considèrera durant tout le TD qu à chaque instant, la grille sur laquelle nous travaillerons possède une configuration réaliste, c est à dire que si une cellule est occupée par un jeton, alors toutes les cellules de même indice de colonne et d indice de ligne inférieur sont également occupées par un jeton. Un exemple d une telle grille est présenté ci après : 1. Par soucis de simplicité, on considère ici que tous les algorithmes récursifs vont travailler sur la même matrice, et pas sur des copies créées à chaque appel de l algorithme
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 8 - - - - - - - - - - - - - - - - - - R - - R - - R J - - J J J R J R - R R J J J R J 2. Fonctions d initiation et d affichage : (a) Ecrivez une procédure init qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etremplitl ensembledesescellulesaveclavaleur - :cecicorrespond àunecasevidedanslagrille. (b) Ecrivez une procédure affiche qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etaffichelagrilledejeuenyfaisantapparaitrelescolonnes.dans Cet affichage, les pions du joueur 1 sont représentés par le caractère J,ceuxdujoueur2 par le caractère R,etl absencedepionparlecaractère -.Unexemplecorrespondant àlamatriceprécédemmentdéfinieestprésentéeciaprès: - - - - - - - - - - - - - - - - - - R - - R - - R J - - J J J R J R - R R J J J R J ----------------------------- 3. Evaluation de la grille : Nous allons définir les fonctions permettant de déterminer si une grille est gagnante pour l un ou l autre des joueurs. Par simplicité, on considèrera seulement les tests pour une configuration normale de jeu. A chaque étape, on pourra réutiliser au besoin les fonctions précédemment définies. Sur les évaluations de grilles suivantes, il n est pas important de gérer les cas où les grilles passées en paramètres sont à la fois gagnantes pour le joueur 1 et pour le joueur 2. Ces grilles ne seraient possibles que si les joueurs continuaient àjoueralorsqu unjoueurétaitgagnant.orcesfonctionsd évaluationserontappeléesaprès chaque tour. Il suffit de trouver un alignement de 4 pieces et de renvoyer le caractère du joueur ayant réalisé cet alignement. (a) Ecrivez une fonction estremplie qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etrenvoieunbooléenàvrai si et seulement si toutes les cases de la grille sont occupées par un jeton, et faux autrement. (b) Ecrivez une fonction gagnantligne qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etrenvoieuncaractèrecorrespondantà: J s il existe un alignement horizontal de 4 cellules adjacentes de valeur J R s il existe un alignement horizontal de 4 cellules adjacentes de valeur R - dans tout autre cas (c) Ecrivez une fonction gagnantcolonne qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etrenvoieuncaractèrecorrespondantà: J s il existe un alignement vertical de 4 cellules adjacentes de valeur J R s il existe un alignement vertical de 4 cellules adjacentes de valeur R - dans tout autre cas (d) Ecrivez une fonction gagnantdiagonale qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etrenvoieuncaractèrecorrespondantà: J s il existe un alignement en diagonale de 4 cellules adjacentes de valeur J R s il existe un alignement diagonale de 4 cellules adjacentes de valeur R - dans tout autre cas (e) Ecrivez une fonction gagnant qui prend en paramètres une matrice de caractères de dimensions 7 par 6, etrenvoieuncaractèrecorrespondantà:
TD ITC34 Algorithmique et Programmation - Partie Algorithmes page 9 J s il existe un alignement vertical, horizontal ou diagonal de 4 cellules adjacentes de valeur J R s il existe un alignement vertical, horizontal ou diagonal de 4 cellules adjacentes de valeur R - dans tout autre cas Cette dernière fonction pourra appeler les fonctions gagnantdiagonale, gagnantligne et gagnantcolonne (f) Ecrivez une fonction matchnul qui prend en paramètres une matrice de caractères de dimensions 7 par 6, quirenvoievrai si est seulement si la grille est remplie et qu aucun joueur n a gagné, et faux sinon. 4. Actions des joueurs : (a) Ecrire une fonction colonneremplie qui prend comme paramètre la grille de jeu sous forme d une matrice de caractères de dimensions 7 par 6, ainsiqu unindicedecolonne. Cette fonction renvoie vrai si et seulement si la colonne est remplie de jetons, c est à dire que le joueur ne peut poser de jetons dans cette colonne. (b) Ecrire une fonction poserjeton qui prend comme paramètres la grille de jeu sous forme d une matrice de caractères de dimensions 7 par 6, unindicedecolonne,etunnuméro de joueur. Si la colonne n est pas remplie, cette fonction glisse un jeton du joueur correspondant dans la colonne indiquée et renvoie la nouvelle matrice avec le jeton en plus. On considère que l appel à la fonction poserjeton 5. Interface de jeu : (a) Ecrire une fonction Puissance4 qui décrit le déroulement d une partie de puissance 4, en incluant les opérations suivantes : Crée et initialise la grille de jeu en utilisant la fonction init Demande tour à tour à chaque joueur de saisir un numéro de colonne entre 1 et 7 ; Ajoute un jeton du joueur correspondant dans la colonne indiquée (en utilisant la fonction poserjeton)sicellecin estpasvide(enutilisantlafonctioncolonneremplie), ou demande de saisir une autre colonne autrement ; continue à demander à tour de rôle quel coup jouer jusqu à ce qu un joueur gagne la partie (fonction gagnant), ou que la grille soit remplie (fonction estremplie); affiche le vainqueur de la partie, ou un message indiquant un match nul (fonction matchnul).