• Aucun résultat trouvé

b.Choixdugroupe a.Présentation 1.Projetdeprogrammation Projet1(ProgrammationenPython)

N/A
N/A
Protected

Academic year: 2022

Partager "b.Choixdugroupe a.Présentation 1.Projetdeprogrammation Projet1(ProgrammationenPython)"

Copied!
4
0
0

Texte intégral

(1)

1NSI Projet 1 (Programmation en Python) n 2020

1. Projet de programmation

a. Présentation

Durant chaque semestre, un projet doit être réalisé.

Les projets sont élaborés par groupe de trois.

Le projet du 1ersemestre a pour objet de réaliser un ou plusieurs programmes en Python, en respectant les contraintes d'un cahier des charges. Le projet du 2e semestre est indépendant et centré sur la réalisation d'un site WEB.

La réalisation du projet du 1ersemestre est eectuée par étapes :

F Constitution du groupe et choix d'un des trois sujets proposés dans ce document : lire le docu- ment individuellement, se concerter pour constituer les groupes et compléter pour le 10 novembre le formulaire situé en bas de cette page qui précise en particulier la répartition des tâches entre les membres du groupe. Ceci doit être réalisé après analyse en commun des objectifs à atteindre, des programmes à développer, des options algorithmiques et techniques. Les capacités de chacun doivent être adaptées à la portion du projet qui lui revient ; il ne s'agit pas de se placer en face d'une diculté disproportionnée, le but étant la réalisation du projet collectivement.

F Développement des programmes et tests : deux heures par semaine y sont consacrées sur le temps de cours (ce qui permet, entre autre, les échanges avec le professeur) mais ce travail peut et doit être poursuivi en dehors, dans la limite de ce qui est raisonnable.

F Finalisation : un dossier numérique est préparé contenant les programmes fonctionnels et com- mentés (.py), la documentation explicative (au format pdf) qui récapitule sur trois pages maxi- mum les options techniques, et sur trois autres pages les résultats, copies d'écran incluses.

b. Choix du groupe

Rendre un seul formulaire complété par groupe.

Après validation par le professeur, le nom du groupe devra gurer sur tous les documents (programmes et textes) du projet.

F Choix d'un nom de groupe (entre 6 et 20 caractères) : . . . .

F Prénom NOM et email des membres du groupe :

1 : . . . _______________@______

2 : . . . _______________@______

3 : . . . _______________@______

F Choix du sujet :

. . . . . . . . . . . .

F Répartition des tâches (provisoire) :

1 : . . . . . . . . . . . . . . . . 2 : . . . . . . . . . . . . . . . . 3 : . . . . . . . . . . . . . . . . Validation par le professeur (ne rien écrire) : . . . .

1

(2)

1NSI Projet 1 (Programmation en Python) n 2020

2. Les sujets

a. Polyominos

Les polyominos (Solomon W. Golomb, 1952) sont des polygones dont certains sont utilisés par le jeu Tetris (Alexei Pajitnov, 1984). Ces polygones sont constitués de carrés superposables assemblés de toutes les façons possibles, côte-à-côte et sans superposition, par leurs sommets. Pour simplier, nous nommerons n-ominos les polyominos constitués de n carrés. Ainsi, on compte un seul 1-omino, un seul 2-omino, deux 3-ominos, cinq 4-ominos (ceux de Tetris), etc. Bien sûr, pour comptabiliser ces formes, nous ne tenons pas compte des translations, rotations ou retournements possibles. Lorsqu'on inscrit les polyominos dans un quadrillage par leurs sommets, on obtient des apparences diérentes, nommées alias. Selon le type de symétrie du polyomino, il peut y avoir 1, 2, 4 ou 8 alias.

La gure ci-dessous montre tout cela. Observer en particulier les 8 alias du 4-ominos n°2.

Les objectifs de ce projet :

1. Déterminer un système d'encodage des polyominos adapté aux autres objectifs

2. Écrire une fonction qui détermine les alias d'un polyomino donné (sans doublon) et renvoie l'alias canonique (le premier dans l'ordre alphanumérique). En déduire une fonction qui détermine si deux polyominos sont superposables.

3. Écrire une fonction qui prend la liste des n-ominos en argument et qui retourne la liste des (n+1)- ominos (sans doublon). Tester cette fonction pour retrouver les douze 5-ominos, les trente-cinq 6-ominos, les cent-huit 7-ominos.

4. Écrire une fonction qui permette de visualiser un polyomino donné, en le dessinant (avec turtle ou tkinter) ainsi que le quadrillage sous-jacent. Améliorer ensuite cette fonction en donnant accès aux diérents alias de la forme par pression d'une èche (haut ou bas) du clavier.

5. Écrire les fonctions qui déterminent les caractéristiques suivantes d'un polyomino :

F longueur du périmètre du polymino

F aire du rectangle minimal contenant le polyomino

F aire du ou des trous éventuels dans le polyomino (0 si pas de trou, les trous apparaissent à partir des 7-ominos)

F type de symétrie du polyomino (un axe, deux axes, 4 axes, un centre, sans symétrie)

6. Écrire une fonction qui prenne en argument la liste des n-ominos et qui en détermine la répartition selon chacune des caractéristiques.

7. Écrire une fonction qui prenne en argument la liste des n-ominos ainsi que des valeurs particulières des caractéristiques et qui la ltre selon ce critère. La valeur de retour est donc la liste initiale ltrée.

Bien sûr la liste ci-dessus n'est pas exhaustive. On peut, par exemple, perfectionner l'application de visualisation en lui donnant en argument une liste de polyominos (passer de l'un à l'autre avec les èches gauche ou droite du clavier) et en y insérant la fonction de ltrage qui permet de sélectionner ce que l'on veut visualiser.

Parmi les nombreux problèmes intéressants que l'on peut chercher à résoudre avec des polyominos : chercher à paver un rectangle avec les douze 5-ominos (du rectangle 3×20 au rectangle 6×10) et dénombrer les diérentes solutions.

2

(3)

1NSI Projet 1 (Programmation en Python) n 2020

b. Tangram

Le Tangram est un puzzle classique de sept pièces faisant déjà l'objet de l'exercice 2.35.

Cet exercice utilise un chier des formes homogènes réalisables avec ce jeu de pièces. En répondant aux questions de l'exercice 2.35, on peut en visualiser une et chercher l'emplacement des pièces du jeu à la main. C'est en général le but de ce jeu : à partir d'une silhouette réalisable avec les sept pièces, sans chevauchement, chaque pièce utilisée une seule fois, on détermine une solution possible.

La gure ci-dessous montre pour chacune des silhouettes réalisables de l'exercice 2.35 une telle solution (la silhouette codée 4.3.021024313554, qui est au centre de l'illustration de cet exercice, n'est pas réalisable avec les pièces du jeu).

L'objectif de ce projet est donc double :

F Traiter les questions de l'exercice 2.35.

F Écrire une fonction qui détermine une solution pour une silhouette donnée en argument.

Déterminer une solution signie donner l'emplacement et l'orientation de chacune des pièces du jeu. Ces informations devraient pouvoir être communiquées à la fonction d'achage réalisée précédemment an d'obtenir une image de la solution proposée (ne serait-ce que pour vérier que la solution réalise bien la même silhouette que celle qui a été fournie en argument).

Pour ce dernier point, l'algorithme à utiliser peut commencer par placer une première pièce en balayant les sommets dans un ordre prédéni et en essayant l'un après l'autre tous les alias d'une pièce. Lorsque la pièce est correctement placée (on retient le sommet essayé et le numéro de l'alias), on cherche à placer la suivante dans la partie résiduelle de la silhouette initiale. On procède ainsi jusqu'à avoir placé toutes les pièces ou jusqu'à constater une impossibilité de placement. Dans ce dernier cas, on revient en arrière, en reconstituant la silhouette avant le placement qui n'a pas mené à la solution, et en poursuivant le balayage méthodique pour la pièce qui vient d'être replacée. Si tous les placements ont été essayés pour cette pièce, on revient encore en arrière, à la pièce d'avant, et on poursuit ainsi l'exploration méthodique jusqu'à obtenir une solution.

Ce type d'algorithme s'appelle backtracking (en français, retour sur trace).

Vous pouvez consulter des applications en Python pour la résolution de sudokus1.

1. Par exemple https://zestedesavoir.com/tutoriels/476/le-backtracking-par-lexemple-resoudre-un-sudoku/

3

(4)

1NSI Projet 1 (Programmation en Python) n 2020

c. Tapatan, le jeu des neuf trous

Il s'agit d'une extension du bien connu tic tac toe, appelée Tapatan en Indonésie : il s'agit d'un jeu simple à deux joueurs dont l'un des joueurs est l'ordinateur. Cela va donc nécessiter une forme d'intelligence de sa part. Le projet a déjà été réalisé en Python (programme tapatan2.py disponible au téléchargement) mais il utilise le module tkinter et une classe (la class Jeu) et nous voudrions le simplier pour utiliser seulement turtle ou bien l'achage en console et pas de class, seulement des fonctions.

Rappelons la règle du jeu :

F le plateau de jeu est une grille carrée de 3 sur 3 avec ses diagonales.

F chaque joueur dispose de trois pions qu'il doit aligner sur le plateau.

F phase 1 : au début, chacun à tour de rôle pose un pion, n'importe où sur le plateau.

F phase 2 : une fois les pions posés, si aucun des joueurs n'a gagné lors de la phase 1, chacun peut déplacer un de ses pions d'une position, selon un des tracés gurés sur le plateau (le long des six lignes ou des deux diagonales), si le nouvel emplacement est libre.

L'objectif est de programmer ce jeu avec un compteur des parties gagnées/perdues et un dispositif permettant de choisir si c'est le joueur qui commence, si c'est l'ordinateur ou bien si ce choix est laissé au hasard.

Vous pouvez lire le texte accompagnant le programme-solution sur mathadomicile2. Vous pouvez éga- lement télécharger un standalone du jeu sur la même page pour jouer et observer le comportement du programme.

Ce projet est donc un projet de traduction de Python vers Python, mais avec des choix techniques diérents qui obligent une restructuration complète de la solution :

1. Adapter la technique d'achage choisie (console ou turtle) au jeu : comment matérialiser les lignes, les pions, le texte, etc.

2. Reécrire tous les achages ; en gros, tout ce qui commence par cadre. doit être reécrit.

3. Reécrire l'interactivité : les fonctions clic(), drag() et lache() ne peuvent plus être opération- nelles en mode console. Avec turtle, il est possible d'agir directement avec la souris3 mais on peut utiliser des fenêtres de dialogue (fonction textinput()).

4. Reécrire toutes les fonctions de la class Jeu pour y accéder librement, sans classe.

Modier les fonctions chercheMaxi(), chercheMini()) ainsi que les autres fonctions en les adap- tant à la perte de la class Jeu.

2. Le document se trouve sur la page Programmer en Python , question n°6 : Interactivité et Widget graphique, partie c : http://ph.moutou.free.fr/coursPython.html/TDsPythonCorr6.pdf

3. Revenir à la documentation : https://docs.python.org/fr/3/library/turtle.html#using-events

4

Références

Documents relatifs

L'enseignante avait déjà, avant notre intervention, réalisé une séquence sur la description physique et morale (disponible en annexe), c'est pourquoi il était superflu de mettre

Film déjà disponible en DVD depuis le : 7 octobre 2009 Réalisé par Patrick-Mario Bernard, Pierre Trividic Avec Dominique Blanc, Cyril Gueï, Peter Bonke, plus..

Savoir donner la forme trigonométrique (module et argument) et l'interprétation géométrique associée... En utilisant les informations précédentes, placer l'image de zz' sur

Le tri par insertion est quant à lui très utilisé pour des listes de petites tailles (presque déjà triées). C’est le cas de la méthode sort sur python qui utilise

En effectuant le téléchargement de la règle sur l’application dans le cadre du présent jeu les participants cèdent gracieusement à la Société organisatrice, dans le

Sur le bord de fuite, nous avons également renoncé au tissu le plus léger disponible pour une meilleure stabilité.. Par contre ce tissu est utilisé pour l‘ensemble de l‘intrados

Le maître du jeu tire cartes dont les joueurs doivent calculer la somme.il utilise une.. calculette

de formation implique la constitution du groupe et la mise en place d’un climat de confiance préalable. Ceci est assuré grâce au travail réalisé dans le premier module.