Module ITC34 - Algorithmique et Programmation



Documents pareils
Architecture des Systèmes d Information Architecture des Systèmes d Information

Algorithmique et structures de données I

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1 Recherche en table par balayage

Algorithmes récursifs

Introduction à MATLAB R

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Cours Fonctions de deux variables

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Chapitre 2. Eléments pour comprendre un énoncé

Partie 1. Fonctions plus complexes dans Excel. Fonctions Si(), Et(), Ou() et fonctions imbriquées. Opérateurs logiques. I.1.

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Algorithme. Table des matières

BACCALAUREAT GENERAL MATHÉMATIQUES

Correction TD algorithmique

Les nombres entiers. Durée suggérée: 3 semaines

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

STAGE IREM 0- Premiers pas en Python

Définitions. Numéro à préciser. (Durée : )

Initiation à Excel. Frédéric Gava (MCF)

Compter à Babylone. L écriture des nombres

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

V- Manipulations de nombres en binaire

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT


Rappels sur les suites - Algorithme

Continuité et dérivabilité d une fonction

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Seconde Généralités sur les fonctions Exercices. Notion de fonction.

Chapitre 3. Mesures stationnaires. et théorèmes de convergence

Programmation linéaire

Recherche dans un tableau

Auto-Entreprise : Activités : Eric SOTY - Siret n Formation Bureautique, continue d'adultes. Tél : Fax :

Programmation Objet - Cours II

Plus petit, plus grand, ranger et comparer

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Premiers Pas en Programmation Objet : les Classes et les Objets

Chapitre 2 Le problème de l unicité des solutions

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

Feuille d exercices 2 : Espaces probabilisés

Module 16 : Les fonctions de recherche et de référence

Première partie. Préliminaires : noyaux itérés. MPSI B 6 juin 2015

TD3: tableaux avancées, première classe et chaînes

Développement décimal d un réel

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

Cours d initiation à la programmation en C++ Johann Cuenin

Chapitre 5 : Flot maximal dans un graphe

Master CCI. Compétences Complémentaires en Informatique. Livret de l étudiant

Logique binaire. Aujourd'hui, l'algèbre de Boole trouve de nombreuses applications en informatique et dans la conception des circuits électroniques.

Projet Matlab : un logiciel de cryptage

3 Approximation de solutions d équations

Raisonnement par récurrence Suites numériques

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

LES TOUT PREMIERS PAS

Université du Québec à Chicoutimi. Département d informatique et de mathématique. Plan de cours. Titre : Élément de programmation.

Fonctions de plusieurs variables

CONCOURS D ENTREE A L ECOLE DE 2007 CONCOURS EXTERNE. Cinquième épreuve d admissibilité STATISTIQUE. (durée : cinq heures)

Algorithmique et Programmation, IMA

Résolution de systèmes linéaires par des méthodes directes

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

TP 1. Prise en main du langage Python

DOCM Solutions officielles = n 2 10.

Poker. A rendre pour le 25 avril

Le langage SQL Rappels

TD3 - Facturation avec archivage automatisé

1 Introduction et installation

Eteindre. les. lumières MATH EN JEAN Mme BACHOC. Elèves de seconde, première et terminale scientifiques :

Solutions du chapitre 4

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Algorithmique et Programmation Fonctionnelle

La fonction exponentielle

SOMMAIRE. 1. Préambule Le calendrier Trajectoire d un objet lancé Régression linéaire...9

Université Paris-Dauphine DUMI2E 1ère année, Applications

PG208, Projet n 3 : Serveur HTTP évolué

Bases de données documentaires et distribuées Cours NFE04

TP, première séquence d exercices.

EXCEL TUTORIEL 2012/2013

Corrigé des TD 1 à 5

Probabilités sur un univers fini

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Chap III : Les tableaux

Probabilités. Une urne contient 3 billes vertes et 5 billes rouges toutes indiscernables au toucher.

Algorithmique et Programmation

Programmes des classes préparatoires aux Grandes Ecoles

avec des nombres entiers

4. Les structures de données statiques

Créer son questionnaire en ligne avec Google Documents

Créer le schéma relationnel d une base de données ACCESS

Bases de programmation. Cours 5. Structurer les données

COURS WINDEV NUMERO 3

Numbers sur ipad. Atelier Formation Numbers sur ipad. [Notes extraitres de l'aide en ligne]

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Théorème du point fixe - Théorème de l inversion locale

données en connaissance et en actions?

Optimisation non linéaire Irène Charon, Olivier Hudry École nationale supérieure des télécommunications

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Pascal Weber - Expert en organisation

Cours d Informatique

Transmission d informations sur le réseau électrique

Transcription:

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).