TP noté
2024-2025
Mise en place de l'examen
- Durée : 2h
- Documents autorisés : Notes de cours et TP manuscrites, code de vos TPs personnels en TW3
- Applications autorisées : Site du cours TW3, sites de documentation (php)
- STRICTEMENT INTERDITS : Tout moyen de communication (email, chat, etc) et surtout toutes les applications d'IA ou de génération de code.
Téléchargez l'archive du sujet, et décompressez-la. Elle contient un répertoire tp-note-tw3-2024-VOTRELOGIN
dans lequel vous effectuerez votre travail. Renommez-le en remplaçant VOTRELOGIN
par votre login (ça donnera donc par exemple tp-note-tw3-2024-dupont223
ou tp-note-tw3-2024-21912345
).
Ce répertoire contient trois sous répertoires : Exercice1, Exercice2 et Exercice3 qui correspondent aux trois exercices ci-dessous à faire :
Important
Vous devez rendre à l'issue de l'examen
une archive zip
déposée sur Ecampus dans la zone prévue à cet effet. Le nom de l'archive doit être nommé VOTRENOM_VOTREPRENOM.zip
. Il est important que l'archive contienne le répertoire demandé (et pas son contenu par exemple).
Faites bien attention à ne pas déposer l'archive initiale, mais bien celle avec votre travail !
Normalement, si vous avez bien renommé le répertoire, il ne devrait pas y avoir de confusion possible.
Les exercices 1 et 2 sont à faire dans le terminal en mode texte.
Exercice 1
Écrire un programme en PHP qui analyse une phrase donnée pour en extraire les mots, puis compter la fréquence d'apparition de chaque mot.
-
Écrire une fonction nommée
compter_mots
qui prend en entrée une chaîne de caractères et qui renvoie un tableau associatif où les clés sont les mots et les valeurs sont leur fréquence d'apparition dans la phrase.
Remarque : Il est nécessaire de convertir la phrase en minuscules pour garantir que les mots sont comptés sans distinction de casse. De plus, les signes de ponctuation (virgules, points, points-virgules, etc.) doivent être ignorés lors de l'analyse. Vous pouvez utiliser la fonctionstrtolower()
pour la conversion en minuscules etstr_replace()
ou des fonctions similaires pour enlever les signes de ponctuation. - Une fois la fréquence des mots déterminée, trouvez le ou les mots les plus fréquents dans la phrase. Affichez également leur fréquence d'apparition.
Exemple de sortie attendue :
Phrase : Bonjour tout le monde, tout va bien, ici il y a beaucoup de monde. Nombre de mots : 14 Mot(s) le(s) plus fréquent(s) : tout - monde Fréquence : 2
Exercice 2
Dans cet exercice, vous allez programmer un jeu où un joueur doit se déplacer sur une grille pour atteindre une sortie. La grille contient des obstacles et des portails permettant de téléporter le joueur d'un endroit à un autre. Le joueur doit éviter les obstacles et peut utiliser les portails pour se déplacer plus efficacement.
Règles du jeu :
- Le joueur commence en haut à gauche (position
(0,0)
). - Les murs sont infranchissables.
- Les portails permettent de se téléporter.
- Le joueur gagne en atteignant la sortie.
- Le nombre de déplacements est comptabilisé et affiché à la fin du jeu.
Le jeu repose sur trois classes :
1. Classe Cellule
Elle représente une case de la grille et possède les attributs suivants :
- type : Une chaîne de caractères pouvant être "vide", "mur", "portail" ou "sortie".
- destination : Un tableau contenant les coordonnées de la destination du joueur en cas de téléportation.
Méthode principale :
- __construct(string $type = "vide", ?array $destination = null) : Initialise une case avec un type et une éventuelle destination.
2. Classe Grille
Elle représente une grille carrée de taille n x n
contenant des cases Cellule
. La grille inclut au moins un mur, un portail et une sortie.
Attributs :
- taille : La taille de la grille.
- grille : Un tableau (matrice) contenant les différentes cellules.
- positionJoueur : Les coordonnées actuelles du joueur.
Méthodes principales :
-
__construct(int $taille) : Initialise une grille avec des cases vides et ajoute :
- Un mur en (2,2).
- Un portail en (1,1) menant à (3,3) et vice-versa.
- Une sortie en (4,4).
- Le joueur démarre en (0,0).
-
afficherGrille() : Affiche la grille avec les symboles suivants :
🧍 : Joueur 🌀 : Portail 🟥 : Mur ⬜ : Case vide 🏁 : Sortie
Exemple de grille initiale :
🧍 ⬜ ⬜ ⬜ ⬜ ⬜ 🌀 ⬜ ⬜ ⬜ ⬜ ⬜ 🟥 ⬜ ⬜ ⬜ ⬜ ⬜ 🌀 ⬜ ⬜ ⬜ ⬜ ⬜ 🏁
-
deplacerJoueur(int $dx, int $dy) : Permet au joueur de se déplacer dans la grille via les commandes :
"h"
(haut),"b"
(bas),"g"
(gauche),"d"
(droite).- Si le joueur tente de sortir de la grille ou rencontre un mur, il ne bouge pas.
- Si le joueur entre dans un portail, il est téléporté à sa destination.
- Si le joueur atteint la sortie, un message de victoire est affiché.
3. Classe Joueur
Elle représente le joueur et possède les attributs et méthodes suivants :
Attribut :
- grille : Une instance de la classe
Grille
.
Méthodes :
- __construct(Grille $grille) : Initialise la grille du jeu.
- jouer() : Permet au joueur de se déplacer en utilisant
deplacerJoueur()
jusqu'à ce qu'il atteigne la sortie.
Le nombre de déplacements est comptabilisé et affiché à la fin du jeu.
Exemple de grille finale :
⬜ ⬜ ⬜ ⬜ ⬜
⬜ 🌀 ⬜ ⬜ ⬜
⬜ ⬜ 🟥 ⬜ ⬜
⬜ ⬜ ⬜ 🌀 ⬜
⬜ ⬜ ⬜ ⬜ 🧍
Bravo ! Vous avez atteint la sortie en 4 coups !
Exercice 3 : Gestion de recettes avec PHP et MySQL
L'exercice 3 est à faire sur le seveur. Le répertoire exo3 de tp-note-tw3-2024-LOGIN
contient l'architecture d'un site très simple. On peut le voir en action
ici .
- Ouvrez un terminal dans le répertoire
tp-note-tw3-2024-LOGIN
que vous avez extrait et renommé - Lancez la commande
php -S localhost:20202 -d display_errors=true
(remplacez 20202 par un autre port si celui-ci ne marche pas…). - Allez à l'URL
http://localhost:20202/index.php
: vous devriez voir le résultat de l'exécution du fichierindex.php
.
Dans cet exercice, vous allez afficher des recettes, en créer de nouvelles, les modifier et les supprimer. Vous utiliserez les fichiers suivants à compléter : inserer_recette.php, supprimer_recette.php, modifier_recette.php, index.php, ainsi que le fichier Recette.php contenant la classe Recette.
Vous devez afficher les détails d’une recette spécifique et créer une page d’accueil qui affiche uniquement les 10 dernières recettes.
-
Base de données :
Utilisez le fichier
recettes.sql
pour créer une tableRecette
contenant quelques entrées.Une fois la table créée, vous pourrez interagir avec la base de données.
-
Créer une classe
Recette
en PHP avec les propriétés privées suivantes :$id
: Identifiant unique de la recette (entier).$titre
: Titre de la recette (chaîne de caractères).$ingredients
: Liste des ingrédients (chaîne de caractères).$date_creation
: Date de création (format YYYY-MM-DD HH:MM:SS).
Les dates peuvent être obtenues en PHP avec :
date('Y-m-d H:i:s')
Méthodes de la classe :
-
__toString()
: Retourne une description détaillée de la recette.Recette 3 : - Titre : Tarte aux pommes - Ingrédients : Pommes, farine, sucre, beurre - Créée le : 2022-03-10 11:59:12
enregistrerDansBase($connexion)
: Insère une recette dans la base de données.supprimerDeBase($connexion)
: Supprime une recette de la base de données.mettreAJourDansBase($connexion, $nouveauTitre, $nouveauxIngredients)
: Met à jour une recette existante.-
Accesseurs et Mutateurs (Getters et Setters) :
getId()
etsetId($id)
getTitre()
etsetTitre($titre)
getIngredients()
etsetIngredients($ingredients)
getDateCreation()
etsetDateCreation($date)
-
Complétez le fichier
index.php
pour réaliser les actions suivantes :-
Affichage par défaut :
Afficher un lien permettant d’ajouter une nouvelle recette (
ajouter_recette.php
), suivi de l’affichage des 5 dernières recettes avec trois actions possibles : -
Action 1 : Aperçu d’une recette
Afficher les détails d'une recette sur la page principale (
index.php
). -
Action 2 : Modifier une recette
Rediriger vers
modifier_recette.php
pour mettre à jour une recette. -
Action 3 : Supprimer une recette
Supprimer une recette avec
supprimer_recette.php
.
-
Affichage par défaut :