INF220 - TP Séance 4
Durée : 2h00
Objectifs
- Utiliser les files.
- Charger un fichier.
- Programmer un lecteur vidéo d'animations ASCII
Au menu
- Consignes
- Fonctions utiles lors de ce TP
- Chargement du fichier
- Affichage de l'animation
- Fonctions avancées d'affichage
Remarquez que la hauteur de chaque image en lignes est donnée sur la première
ligne du fichier, et que la source de l'animation est donnée sur la deuxième
ligne. Une seconde séance permettra
de continuer ce TP, ou de prolonger l'exercice.
Lisez attentivement cet énoncé de TP
en suivant les instructions.
En cas d'interrogation,
faites appel à moi,
que ce soit pour en savoir plus sur un des points abordés pendant le TP, ou
pour savoir comment effectuer une des tâches demandées (numérotées pour pouvoir
y faire référence simplement).
Surtout
ne restez pas bloqué(e) sur une des questions.
Entre parenthèses, à côté des titres de sous-sections, est indiqué
le temps que vous avez dû passer à effectuer les étapes précédentes.
Rappelons tout d'abord les fonctions sur les files, avec la description des fonctions
disponibles pour réaliser ce TP :
- type file de chaînes de caractères : Queue
- créer une file de chaînes de caractères F : F = CreeFile()
- enfiler une chaîne de caractères a à la fin de la file F : Enfile(F,a) (ne renvoie rien)
- défiler la chaîne de caractères a du début de la file F : Defile(F) (renvoie la chaîne de caractères a)
- tester si une file de chaînes de caractères F est vide : EstVide(F) (renvoie true si elle est vide, false sinon)
D'autres fonctions sont disponibles pour réaliser ce TP :
- OuvreFichier prend en entrée une chaîne de caractères
contenant l'adresse d'un fichier texte et renvoie une file de chaînes de
caractères, où la première ligne du fichier a été enfilée en premier,
puis la deuxième ligne, puis la troisième, etc.
- ConvertitEnEntier prend en entrée une chaîne de caractères
contenant une suite de chiffres et renvoie le nombre entier correspondant.
- Pause prend en entrée un nombre entier n et ne fait rien
pendant n millisecondes.
Nous allons tout d'abord récupérer les paramètres transmis au programme, car l'adresse
du fichier à charger sera donnée comme premier (et seul) paramètre.
Rappelons que les paramètres du programme sont indiqués après la commande
java NomDuProgramme
et sont stockés dans le tableau de chaînes de caractères
arg
fourni en entrée de la fonction
main.
question(); ?>Téléchargez, enregistrez et compilez le
fichier INF220TP4.java.
question(); ?>Enregistrez dans le même dossier un des fichiers
d'animation ASCII fournis ci-dessus.
question(); ?>Exécutez le programme INF220TP4 en
ajoutant ce fichier en paramètre.
question(); ?>Ajoutez dans la fonction main
une instruction permettant d'afficher le nombre de paramètres du programme.
question(); ?>Ajoutez dans la fonction main
une instruction permettant d'afficher l'ensemble des paramètres du programme.
En utilisant la fonction
OuvreFichier,
question(); ?>chargez
l'ensemble du fichier dont l'adresse est donnée en premier paramètre du programme
dans une file de chaînes de caractères lignes.
Dans la fonction
main,
question(); ?>ajoutez les
instructions permettant d'afficher l'ensemble des lignes de la file lignes.
question(); ?>Enregistrez dans une variable entière appelée
lignesParImage le contenu de la première ligne du fichier chargé (pensez
à utiliser la fonction permettant de convertir en entier une chaîne de caractères contenant des chiffres).
question(); ?>Insérez dans la boucle créée lors de la première
question de cette partie une instruction permettant de faire 50 millisecondes de pause à
la fin de l'affichage d'une image provenant du fichier.
Indication (à surligner pour lire) :
Pour cela,
vous compterez le nombre de lignes affichées par la boucle,
et utiliserez la valeur de lignesParImage, ainsi que la fonction modulo
(qui est, rappelons-le, notée % en Java)
question(); ?>Créez une nouvelle fonction LitVideo
qui prend en entrée une chaîne de caractères contenant l'adresse d'un fichier texte
contenant une animation ASCII et affiche cette animation : vous allez donc déplacer vers
cette fonction une partie du contenu de la fonction main.
question(); ?>Ajoutez à la fonction LitVideo
une entrée entière timing qui indique le temps d'attente à fixer entre
chaque image.
question(); ?>Ajoutez à la fonction LitVideo
une entrée booléenne credits qui, quand elle vaut true, indique
qu'il faut afficher en permanence, sous l'animation, sa source.
question(); ?>Ajoutez à la fonction LitVideo
une entrée booléenne enBoucle qui, quand elle vaut true, indique
qu'il faut afficher l'animation en boucle.
question(); ?>Créez une fonction LitVideoSplitScreen
qui prend en entrée deux chaînes de caractères contenant chacune l'adresse d'un fichier texte
contenant une animation ASCII et affiche les deux vidéos correspondantes en mode "splitscreen",
c'est-à-dire l'une à gauche de l'autre, avec une barre verticale entre les deux.
question(); ?>Modifiez la fonction main de
telle sorte que le programme accepte une deuxième adresse de fichier en paramètre,
qui sera passée comme deuxième entrée de la fonction LitVideoSplitScreen.