Défi
Vous avez listé vos films d'animation préférés en renseignant les caractéristiques suivantes : « titre »
, « titre original »
, « durée »
, « année »
, « réalisateur »
, « studio »
, « origine »
, « personnage principal »
, « distinction majeure »
:
Le voyage de Chihiro ; Sen to Chihiro no kamikakushi ; 124 min ; 2001 ; Hayao Miyazaki ; Studio Ghibli ; Japonais ; Chihiro ; 10e sur les 100 meilleurs films de tous les temps en langue non-anglaise ;
Le Château ambulant ; Hauru no ugoku shiro ; 119 min ; 2004 ; Studio Ghibli ; Hayao Miyazaki ; Japonais ; Hauru ; Nomination à l'Oscar du meilleur film d'animation en 2006 ;
Anastasia ; Anastasia ; 94 min ; 1997 ; Fox Animation Studios ; Don Bluth et Gary Goldman ; Américain ; Anastasia ;
Spirit, l'étalon des plaines ; Spirit: Stallion of the Cimarron ; 84 min, 2002 ; DreamWorks Animation ; Kelly Asbury ; Américain ; Spirit ; Nomination à l'Oscar du meilleur film d'animation en 2003 ;
Ratatouille ; Ratatouille ; 111 min ; 2007 ; Brad Bird ; Pixar ; Américain ; Rémy; Oscar du meilleur film d'animation en 2007.
On souhaite présenter nos favoris grâce à un programme qui permettra d'afficher les détails sur chaque film.
Question
Initialiser le programme en stockant ces films dans un tableau.
Indice
Le tableau est en deux dimensions : un tableau de films, chacun étant lui-même un tableau dont les cases stockent ses caractéristiques.
Solution
/** JavaScript */
const films = [
// titre, titre original, durée (min), année, réalisateur, studio, origine, personnage principal, distinction
[
'Le voyage de Chihiro',
'Sen to Chihiro no kamikakushi',
124,
2001,
'Hayao Miyazaki',
'Studio Ghibli',
'Japonais',
'Chihiro',
'10e sur les 100 meilleurs films de tous les temps en langue non-anglaise'
],
[
'Le Château ambulant',
'Hauru no ugoku shiro',
119,
2004,
'Studio Ghibli',
'Hayao Miyazaki',
'Japonais',
'Hauru',
"Nomination à l'Oscar du meilleur film d'animation en 2006"
],
[
'Anastasia ',
'Anastasia',
94,
1997,
'Fox Animation Studios',
'Don Bluth et Gary Goldman',
'Américain',
'Anastasia'
],
[
'Spirit, l\'étalon des plaines',
'Spirit: Stallion of the Cimarron',
84,
2002,
'DreamWorks Animation',
'Kelly Asbury',
'Américain',
'Spirit',
"Nomination à l'Oscar du meilleur film d'animation en 2003"
],
[
'Ratatouille',
'Ratatouille',
111,
2007,
'Brad Bird',
'Pixar',
'Américain',
'Rémy',
"Oscar du meilleur film d'animation en 2007"
]
]
Question
Compléter le programme pour qu'il affiche la liste des titres de chaque film et leur date de sortie, précédés du numéro du film. Les numéros commencent à 1.
Ex : 1 Le voyage de Chihiro (2001)
Solution
for (let i = 0; i < films.length; i++) {
console.log(i + 1, films[i][0], '(' + films[i][3] + ')')
}
Question
Vous voulez maintenant pouvoir sélectionner un numéro de film et afficher ses informations. Compléter le programme pour récupérer un numéro de film et l'afficher, en répétant l'opération tant que l'utilisateur le souhaite. Il faut pour cela ajouter une option « X »
pour sortir du menu.
Il faut également s'assurer que l'entrée corresponde soit à l'option « Sortir »
, soit à un numéro de film.
Voici un exemple d'affichage que le code doit produire :
X Sortir
1 Le voyage de Chihiro (2001)
2 Le Château ambulant (2004)
3 Anastasia (1997)
4 Spirit, l'étalon des plaines (2002)
5 Ratatouille (2007)
Sélection > 1
Titre: Le voyage de Chihiro
Titre original: Sen to Chihiro no kamikakushi
Durée: 124 min
Année de sortie: 2001
Réalisateur: Hayao Miyazaki
Studio: Studio Ghibli
Origine: Japonais
Personnage principal: Chihiro
Distinction: 10e sur les 100 meilleurs films de tous les temps en langue non-anglaise
Indice
Il faut tester l'entrée en vérifiant qu'elle est soit égale à « X »
, soit comprise entre 1 et la taille du tableau.
Solution
/** JavaScript */
let input
let selectedFilm
let end = false
while (!end) {
console.log('X Sortir')
for (let i = 0; i < films.length; i++) {
console.log(i + 1, films[i][0], '(' + films[i][3] + ')')
}
input = prompt('Sélection ')
if (input === 'X') {
end = true
} else if (input > 0 && input <= films.length) {
selectedFilm = films[input - 1]
console.log('Titre:', selectedFilm[0])
console.log('Titre original:', selectedFilm[1])
console.log('Durée:', selectedFilm[2], 'min')
console.log('Année de sortie:', selectedFilm[3])
console.log('Réalisateur:', selectedFilm[4])
console.log('Studio:', selectedFilm[5])
console.log('Origine:', selectedFilm[6])
console.log('Personnage principal:', selectedFilm[7])
console.log('Distinction:', selectedFilm[8])
}
}
Question
Finalement, vous voulez ajouter au tableau les films préférés des utilisateurs. Il faut donc ajouter au programme une option « A »
pour pouvoir ajouter un film, qui demande chaque information, crée le film et l'ajoute au tableau.
Il n'est pas utile de vérifier les informations entrées pour l'instant.
Indice
Pour créer un nouveau film, il suffit de créer un nouveau tableau vide et d'y ajouter les caractéristiques une à une.
Indice
Utiliser la méthode films.push
pour rajouter le tableau nouvellement créé à la liste des films.
Solution
Un nouveau film est créé par un tableau vide puis, grâce à la fonction push
, en lui ajoutant les caractéristiques une à une.
let input
let selectedFilm
let end = false
while (!end) {
console.log('X Sortir')
console.log('A Ajouter')
for (let i = 0; i < films.length; i++) {
console.log(i + 1, films[i][0], '(' + films[i][3] + ')')
}
input = prompt('Sélection ')
// sortir du programme
if (input === 'X') {
end = true
} else if (input === 'A') { // créer un film
const newFilm = []
console.log('Nouveau film:')
newFilm.push(prompt('Titre'))
newFilm.push(prompt('Titre original'))
newFilm.push(prompt('Durée'))
newFilm.push(prompt('Année de sortie'))
newFilm.push(prompt('Réalisateur'))
newFilm.push(prompt('Studio'))
newFilm.push(prompt('Origine'))
newFilm.push(prompt('Personnage principal'))
newFilm.push(prompt('Distinction'))
films.push(newFilm)
} else if (input > 0 && input <= films.length) { // afficher le film
selectedFilm = films[input - 1]
console.log('Titre:', selectedFilm[0])
console.log('Titre original:', selectedFilm[1])
console.log('Durée:', selectedFilm[2], 'min')
console.log('Année de sortie:', selectedFilm[3])
console.log('Réalisateur:', selectedFilm[4])
console.log('Studio:', selectedFilm[5])
console.log('Origine:', selectedFilm[6])
console.log('Personnage principal:', selectedFilm[7])
console.log('Distinction:', selectedFilm[8])
}
}