je suis bloqué comme beaucoup sur le dernier exercice du cours. Peu importe le nombre de pages que je rentre, les livres vont tous dans la catégorie "Lus". Je pense que c'est en rapport avec le champ read :
export class Book {
constructor(title, author, description, pages, currentPage, read) {
this.title = title;
this.author = author;
this.description = description;
this.pages = pages;
this.currentPage = currentPage;
this.read = read;
}
readBook(page) {
if (page < 1 || page > this.pages)
{
return 0;
}
else if (page >= 1 && page < this.page)
{
this.currentPage = page;
return 1;
}
else
{
this.currentPage = page;
this.read = true;
return 1;
}
}
}
let book1 = new Book("Lucifer", "Satan", "Histoire du diable", 600, 3, false);
let book2 = new Book("Babar", "Anonyme", "Histoire de Babar", 300, 3, false);
let book3 = new Book("Bambi", "Disney", "Histoire de Bambi", 200, 3, false);
export const books = [book1, book2, book3];
Une idée?
* edit : c'est bon j'ai trouvé :-D le problème venait de l'ordre des conditions...
Salut! Je taff sur un programme pour faire des calculs simples, mais je rencontre un problème. Je n'arrive pas à convertir les nombres reçus des formulaires sous forme de string en int. Donc le programme concatène au lieu d'additionner mes variables qui sont des nombres.
Salut! Je taff sur un programme pour faire des calculs simples, mais je rencontre un problème. Je n'arrive pas à convertir les nombres reçus des formulaires sous forme de string en int. Donc le programme concatène au lieu d'additionner mes variables qui sont des nombres.
Je dispose d'un tableau qui contient que des objets A par exemple. Quelle est la bonne manière pour aller lire la propriété x de tous les objets A contenu dans chaque élément de mon tableau.
Je sais qu'en C# il y a le foreach, mais je n'arrive pas à trouvé un bout d'explication clair (je débute totalement en JS).
Salut, j'ai également le même problème avec la page qui s'éxécute bien, mais le carrousel qui ne fonctionne pas ainsi que le message de fin qui ne s'affiche pas.
J'ai essayé de désactiver le bloqueur de pubs comme certains et aussi de tester avec des valeurs plus hautes etc.. (pas sur d'avoir bien compris cette méthode), comme dit en page 61.
export class Book {
constructor(title, author, description, pages, currentPage, read) {
this.title = title;
this.author = author;
this.description = description;
this.pages = pages;
this.currentPage = currentPage;
this.read = read;
}
readBook(page) {
if (page < 1 || page > this.pages) {
return 0;
} else if (page >= 1 && page < this.pages) {
this.currentPage = page;
return 1;
} else if (page == this.pages) {
this.currentPage = page;
this.read = true;
return 1;
}
}
}
let newDanseMacabre = new Book("La Danse macabre", "Marie-Bernadette Dupuy", "Lara prépare son retour au Venezuela, où elle espère retrouver une existence apaisée auprès d'Olivier et de leur fille, Loanne.", 200, 0, false);
let newHarryQuebert = new Book("La vérité sur l'Affaire Harry Quebert", "Joël Dicker", "À la fin de l’été 1975, à Aurora, dans le New Hampshire, Nola Kellergan, une jeune fille de 15 ans, disparaît dans des conditions mystérieuses.", 400, 0, false);
let newRougeBresil = new Book("Rouge Brésil", "Jean-Christophe Rufin", "La conquête du Brésil par les Français est un des épisodes les plus extraordinaires et les plus méconnus de la Renaissance.", 1200, 0, false);
export const books = [newDanseMacabre, newHarryQuebert, newRougeBresil];
je suis bloqué comme beaucoup sur le dernier exercice du cours. Peu importe le nombre de pages que je rentre, les livres vont tous dans la catégorie "Lus". Je pense que c'est en rapport avec le champ read :
export class Book {
constructor(title, author, description, pages, currentPage, read) {
this.title = title;
this.author = author;
this.description = description;
this.pages = pages;
this.currentPage = currentPage;
this.read = read;
}
readBook(page) {
if (page < 1 || page > this.pages)
{
return 0;
}
else if (page >= 1 && page < this.page)
{
this.currentPage = page;
return 1;
}
else
{
this.currentPage = page;
this.read = true;
return 1;
}
}
}
let book1 = new Book("Lucifer", "Satan", "Histoire du diable", 600, 3, false);
let book2 = new Book("Babar", "Anonyme", "Histoire de Babar", 300, 3, false);
let book3 = new Book("Bambi", "Disney", "Histoire de Bambi", 200, 3, false);
export const books = [book1, book2, book3];
Une idée?
* edit : c'est bon j'ai trouvé :-D le problème venait de l'ordre des conditions...
N'oubliez pas qu'un objet (une instance d'une classe est un objet) est un type par référence, donc vous pouvez toujours apporter des modifications à l'instance de newAccount — la partie constante désigne une référence à cette instance.
Comment est-ce possible de modifier une constante?
Je ne comprends vraiment pas. Merci
- Edité par Coordonnateur Projets/ Géomaticien 26 novembre 2020 à 4:23:27
j'ai moi aussi un problème avec l exercice final de javascript.
a premiere vue tout fonctionne comme prévu mais je ne vois pas d'alerte avec le mot recherché, avec ou sans bloqueur de pub,sur firefox ou chromium
mon code
export class Book {
constructor(title, author, description, pages, currentPage) {
this.title=title;
this.author=author;
this.description=description;
this.pages=pages;
this.currentPage=currentPage;
this.read=false;
if (currentPage===pages) this.read=true;
}
readBook = (page) => {
if (page <= 1 || page > this.pages) return 0;
if (page >= 1 && page < this.pages) {
this.currentPage=page;
return 1;
}else if (page === this.pages) {
this.currentPage=page;
this.read=true;
return 1;
}
}
}
let firstBook = new Book('shazaam','michael gray','michael gray\'s autobiography',320,4);
let secondBook = new Book('Big Ass Title', 'on s\'en fout du name', 'bla bla bla...', 412,156);
let thirdBook = new Book('Big Ass Taitle', 'Big Ass Name', 'blablabybel...', 220,100);
let fourthBook = new Book('Big Ass fourth Title', 'Big fourthAss Name', 'enough with descriptions already...', 1220,0);
let fifthBook = new Book('Fifth\'Story', 'Abe Lincoln', 'comme le port salud...', 820,350);
let sixthBook = new Book('Big Ass Title', 'Big Ass Name', 'plein le cul...', 350,100);
export const books = [firstBook, secondBook, thirdBook,fourthBook,fifthBook,sixthBook];
- Edité par AurelienGuillaudon 16 décembre 2020 à 14:11:22
export class Book {
constructor(title, author, description, pages, currentPage) {
this.title=title;
this.author=author;
this.description=description;
this.pages=pages;
this.currentPage=currentPage;
this.read=false;
if (currentPage===pages) this.read=true;
}
readBook = (page) => {
if (page <= 1 || page > this.pages) return 0;
if (page >= 1 && page < this.pages) {
this.currentPage=page;
return 1;
}else if (page === this.pages) {
this.currentPage=page;
this.read=true;
return 1;
}
}
}
let firstBook = new Book('shazaam','michael gray','michael gray\'s autobiography',320,4);
let secondBook = new Book('Big Ass Title', 'on s\'en fout du name', 'bla bla bla...', 412,156);
let thirdBook = new Book('Big Ass Taitle', 'Big Ass Name', 'blablabybel...', 220,100);
let fourthBook = new Book('Big Ass fourth Title', 'Big fourthAss Name', 'enough with descriptions already...', 1220,0);
let fifthBook = new Book('Fifth\'Story', 'Abe Lincoln', 'comme le port salud...', 820,350);
let sixthBook = new Book('Big Ass Title', 'Big Ass Name', 'plein le cul...', 350,100);
export const books = [firstBook, secondBook, thirdBook,fourthBook,fifthBook,sixthBook];
Salut,
Voici mes conseils :
Penses à bien ouvrir des {} après tes conditions if (...) { ... }.
Il y a un mélange entre le constructeur de ta classe et la méthode d'instance readBook. L'endroit où tu as mis la condition "If" dans le constructor, doit faire parti de la logique que tu as mis en place dans ta méthode d'instance readBook().
Il me semble me rappeler qu'il y a avait écrit que l'initialisation de la variable currentPage devait être à 0. Cette variable va être repris par la suite sur la page du navigateur par un input que le visiteur va pouvoir modifier à a sa guise. Et c'est cette manip qui va pouvoir débloquer l'affichage du mot magique dès que l'ensemble des books seront passé en mode read = true et que l'ensemble des books return 1;
En espérant avoir pu aider,
Bon courage
- Edité par Catherine Chang 19 décembre 2020 à 12:09:33
Je réalise actuellement le premier chapitre du cour, j'aimerais comprendre quelque chose pourquoi dans la solution du deuxième cour dans la solution l'addition est entre parenthèse ?
Salut Rudy, en effet c'est pas comme cela qu'il faut s'y prendre, en programmation quand une action est répétitive, on fait une fonction afin de pouvoir la réutiliser autant qu'on le souhaite sans à avoir à réécrire le code.
Supposons qu'on veut avoir une fonction qui nous donne stock pour un livre donné en paramètre, ca peut donner cela dans ton cas:
function affichageStock(livre){
let stock = livre.stock;
if(stock > 0){
console.log("Il reste " + stock + " exemplaires")
}
else{
console.log(livre.title + " est en rupture de stock")
}
}
//Utiliser la fonction sur le livre firstBook
affichageStock(firstBook);
Sinon , j'ai fais une video sur la correction de cet exercice ici:
Ce cours m'a beaucoup aidé pour comprendre à coder avec javascript. Je trouve que c'est un excellent cours pour débuter à programmer.
Je voudrais juste remercier et féliciter B. Pesquet. C'est rare de voir un cours gratuit de si bonne qualité de par sa clarté et sa méthode.
Comme tous vous cours d'ailleurs, votre cours "Créez-des-pages-web-interactives-avec-javascript" est le meilleur pour bien apprendre javascript(en tout cas un bon début parce que je suis débutant et je sais qu'il me reste beaucoup à apprendre).
Les exercices d'application, pour chaque chapitre, m'ont permis de bien comprendre le cours et m’ont donné le courage de coder.
Vous avez de la pédagogie et c'est ça qui manque à certains. En général ils sont bon pour programmer mais leurs cours sont chaotiques, ça part dans tous les sens.
Mais c'est comme ça, on n'est pas tous fait pour enseigner.
Je suis (comme beaucoup d'autres ^^) le cours sur Javascript et, sur le chapitre concernant les fonctions récursives j'ai eu envie de créer une fonction pour rechercher un nom dans un tableau et les résultats obtenus sont "surprenants".
Je pensais bien qu'il existait d'autres fonction "natives" de recherche.
Pour le coup j'essayais uniquement de mettre en pratique les fonctions dites récursives via l'exemple donné lors du chapitre (le code de la fonction binarySearch est d'ailleurs un copié collé du cours).
Concernant ton explication j'y ai également pensé mais comme la recherche de "salut" qui se trouve a droite du tableau me retourne "true" je ne l'ai pas exploré. Je suis donc un peu pommé, d'autant plus qu'en utilisant "array.sort();" pour trier mon tableau, la fonction retourne les bons résultats :s
J'imagine que je suis au bord du gouffre des mystères du JS et que je n'ai plus d'autres choix que de m'y plonger ?
PS :Petite parenthèse (parce que je me suis pris la tête dessus pendant 30mn) :
Lors du dernier exercice si vous retournez un message d'erreur : "Uncaught SyntaxError: Octal literals are not allowed in strict mode." dans la console, cela peut venir des nombre que vous avez choisi pour l'argument "pages" ou "currentPage".
D'après wiki : "Le système de numérationoctal est le système de numération de base 8, et utilise les chiffres de 0 à 7."
Apparemment donc, les chiffres de 0 à 7 ne sont, pour je ne sais quelle obscure raison, autorisé ici.
Si quelqu'un à une explication je suis bien sur preneur.
En effet, cette fonction récursive ne peut marcher qu'avec un tableau trié par ordre alphabétique, afin de pouvoir faire une comparaison entre les 2 chaines. Dans un tableau mélangé, elle va sortir n'importe quoi comme résultat.
D'accord mais pourtant les argument "start" et "end" sont des index, je pensais donc que le tableau était scindé en deux a partir de ses derniers, et ne nécessitait pas un ordre alphabétique. Désolé d'être tatillon mais comme je débute j'essaie de bien intégrer la logique derrière tout ceci !
D'accord mais pourtant les argument "start" et "end" sont des index, je pensais donc que le tableau était scindé en deux a partir de ses derniers, et ne nécessitait pas un ordre alphabétique. Désolé d'être tatillon mais comme je débute j'essaie de bien intégrer la logique derrière tout ceci !
- Edité par AnthoTp il y a 17 minutes
Voila comment fonctionne la fonction par detail:
const binarySearch = (array, thingToFind, start, end) => {
if (start > end) {
return false; //securité pour sortir de la fonction
}
let mid = Math.floor((start + end) / 2);//vaut 4
//array[mid] = "rené" à ce niveau
if (array[mid] === thingToFind) {
return true;
}
if (thingToFind < array[mid]) {
//"henri" est bien < à "rené"
return binarySearch(array, thingToFind, start, mid - 1);
//ici on va chercher jusqu'à array[3] qui est jeannette
//henri est < jeanette, donc va chercher à array[2], et ainsi de suite, on atteindra jamais "henri".
} else {
return binarySearch(array, thingToFind, mid + 1, end);
}
}
const resultat = binarySearch(array, thingToFind, 0, 8)
console.log(resultat)
Oui d'accord c'est bien ce que j'en ai saisi mais quid du "else" qui devrait chercher dans la partie "supérieure" du tableau et pourquoi "salut" qui était dans cette partie me retournais "true" alors que le tableau n'était pas trié ?
J'imagine que certaines choses sont dépendantes de l'environnement de dev (jsbin & chrome pour le coup) ?
Le else, ne sera jamais executé pour le cas de "henry", car le if sera toujours vrai, henry etant toujours < à "jean","paul","marcel","jeannette","rené"
Contrairement à "salut" qui est bien > à "rene", dans ce cas on va rentrer dans le "else" soit du coté droit du tableau, et "salut" s'y trouve bien.
jsbin peut avoir un comportement diffèrent si tu utilises des grosses boucles qui durent longtemps pour faire des calculs ou sur des tres grand nombre. Sinon, il n'y a pas de différence particulière.
Mets des console.log un peu partout, comme ca tu comprendras mieux ce que fait l'algo:
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]