Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Responsable Jeux-Concours

    Avatar de vermine
    Profil pro
    Inscrit en
    mars 2008
    Messages
    6 345
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations forums :
    Inscription : mars 2008
    Messages : 6 345
    Points : 75 209
    Points
    75 209
    Par défaut [Intermédiaire][Indispensable] Exercice 1.2.3 : Les particularités du switch et l'utilisation des standards
    Exercice 1.2.3 : Les particularités du switch et l'utilisation de la bibliothèque standard
    Apprendre le JavaScript de manière pédagogique


    Bonjour,

    Nous sommes en train de mettre en place une série d'exercices pour apprendre le JavaScript et Node.js.

    Autran, Gnuum et ABCIWEB ont participé à la rédaction de ce quatrième exercice qui porte sur les particularités de la structure conditionnelle switch. L'exercice est accompagné d'un petit cours théorique et vous propose une solution.

    • Objectif : Manipuler les structures conditionnelles de manière avancée.
    • Niveau : Intermédiaire
    • Exigence : Indispensable


    Exercice 1.2.3 : Les particularités du switch et l'utilisation de la bibliothèque standard

    N'hésitez pas nous faire part de vos remarques, difficultés rencontrées et autres suggestions. Les auteurs répondront à vos questions et vous guideront dans la réalisation d'une solution idéale.

    Découvrez également tous nos exercices JavaScript !

    Bon boulot !

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2016
    Messages : 40
    Points : 54
    Points
    54
    Par défaut
    Merci pour ces exercices, qui me semblent plus simple que ceux du blog d'Autran, bientot la suite ?

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 079
    Points : 2 700
    Points
    2 700
    Par défaut
    Salut Touit,

    Tu as déjà fait tous les exercices ? Tu as été rapide ! Bravo !

    Par contre tu ne postes pas tes réponses si j'ai bien compris ?

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2016
    Messages : 40
    Points : 54
    Points
    54
    Par défaut
    Salut ! Merci, non je les ai pas postes car je n avais pas vu jusqu a hier qu on pouvait poster. Du coup je vais les refaire demain et poster mes réponses

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    octobre 2011
    Messages
    2 079
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : octobre 2011
    Messages : 2 079
    Points : 2 700
    Points
    2 700
    Par défaut
    Salut tout le monde,

    @Touit : Tu as pris de l'avance à ce que je vois, il va falloir que je m'y remette !

  6. #6
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    On va essayer de faire arriver la suite des exercices rapidement! Désolé pour le petit retard!
    {gnu: ["um", "cki"]}

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2016
    Messages : 40
    Points : 54
    Points
    54
    Par défaut
    Salut

    Je n'ai pas pris trop d'avances Beginner, j'apprends php en même temps. Et ces derniers temps j'ai beaucoup été dessus.

    J'attends les nouveaux exercices avec plaisir

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 87
    Points : 40
    Points
    40
    Par défaut
    Bonsoir !!

    Je ne comprends pas trop la solution de l'exercice au final car même si j'y était presque, j'ai du regarder la solution... Je comprend a quoi tout cela sert tout ce que j'ai appris jusqu'à présent mais ca reste compliqué à mettre en place, c'est un peu comme un puzzle, on a les pièces mais pas facile de les placé la ou il faut :/
    De plus je ne crois pas avoir bien compris le switch au final... De ce que j'ai compris, si il n'y a pas de break alors il va passer au case d'en dessous en gardant la valeur jusqu'au prochain break ? Mais dans l'exercice le T de terra est tout en haut et devrait donc donné un petit chiffre (bytes = bytes * 1024) mais il donne bien un chiffre énorme et si ce n'est pas un T alors c'est en dessous et donc va garder la valeur du premier bytes et refaire le même calcul jusqu'a tomber sur la bonne case ou le break.. Mais plus ca "descend" plus le chiffre diminue... j'avoue ne pas saisir :/
    Pour conclure dans l’énoncé il y a une variable number qui disparait dans la réponse... du coup j'suis un peu perdu...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 87
    Points : 40
    Points
    40
    Par défaut
    Voici le code que j'ai écris


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    var shortenBytes = '10t'; 
    var letter = shortenBytes.substr(-1, 1); 
    var bytes; 
    var number = Number.parseInt(shortenBytes, 10); 
     
    //console.log(letter)  
     
    if (isNaN(number)){
        bytes =  false
    }else if (number != isNaN){
     
    switch (letter.toUpperCase()) { 
        case 'K':
            bytes = number * 1024;
            break;
        case 'M':
            bytes = number * 1024 * 1024;
            break;
        case 'G':
            bytes = number * 1024 * 1024 * 1024;
            break;
        case 'T':
            bytes = number * 1024 * 1024 * 1024 * 1024;
            break;
        default:
            bytes = false; 
    } 
    }
     
    console.log(bytes);

  10. #10
    Candidat au Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : février 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut exercice 1.2.3
    Bonjour,
    L'exercice est très intéressant et instructif. On trouve rarement des exercices sur JS afin de mettre en pratique les apports théoriques. Un grand merci donc.
    A quand un bootcamp virtuel où on ferait des TP à longueur de journée pour assimiler et graver durablement la syntaxe JS ?!
    En tous les cas, il y a un point qui m'échappe dans votre correction.
    A supposer en effet qu'on n'ait pas renseigné d'unité, n'aurait-on pas dû tomber sur default dans le switch ?

    J'ai d'abord tenté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var nombreUniteMesure = '150';
    var nombre = nombreUniteMesure.substr(0,--nombreUniteMesure.length);
    var number = +nombre; 
    var uniteMesure = nombreUniteMesure.substr(-1,1);
    switch (uniteMesure.toUpperCase()){ 
        case ' '://"Si on n'indique pas d'unité', on suppose que la var testée indique des octets"
        result = number;
        break;
      case 'K':
        result = number*1024;
        break;
      case 'M':
        result = number*Math.pow(1024,2);
        break; 
      case 'G':
        result = number*Math.pow(1024,3);
        break;   
      case 'T':
        result = number*Math.pow(1024,4);
        break;  
      default:
        result=(!true)
    }
    console.log(result);
    "Globalement", ça fonctionne. Certes, l'approche est infiniment moins pertinente que votre solution...
    Mais par contre, on tombe sur default si on n'indique pas d'unité. J'ai essayé avec case undefined (pas d'unité de mesure indiquée) et on tombe aussi sur default.
    Pourriez-vous éclairer ma lanterne ?
    Merci d'avance
    maed

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    14 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 14 134
    Points : 34 883
    Points
    34 883
    Par défaut
    Bonjour,
    Mais par contre, on tombe sur default si on n'indique pas d'unité.
    regarde simplement pour commencer ce que donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var nombreUniteMesure = '150';
    //  var nombre = nombreUniteMesure.substr(0,--nombreUniteMesure.length);
    //  var number = +nombre; 
    var uniteMesure = nombreUniteMesure.substr(-1,1);
    console.log(uniteMesure);
    surement pas ce à quoi tu t'attends !

  12. #12
    Candidat au Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    février 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : février 2019
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Bonjour NoSmoking,

    D'abord merci pour ta réponse

    Oui, je m'attends à avoir pour retour 0.
    Mais mon switch fait sa besogne si et seulement si on ajoute une lettre (uniteMesure) comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var nombreUniteMesure = '150k';
    Seulement, je n'arrive pas à répondre à la dernière partie de la question 1 de l'exercice 1.2.3 "Si l'on n’indique pas d'unité, par exemple : var shortenBytes = '887';, on supposera que la variable testée indique des octets". Et si on reprend la solution donnée avec le fameux //fall trough

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    var shortenBytes = '150k'; 
    var letter = shortenBytes.substr(shortenBytes.length - 1); // Retourne le dernier caractère 
    var bytes = parseInt(shortenBytes, 10); // Convertit la chaîne de caractères '150K' en le nombre 150. 
     
    // Gère le cas où shortenBytes n'est pas une valeur numérique convertissable. 
    if (isNaN(bytes)) { 
        bytes = false; 
    // Gère le cas où le dernier caractère de `shortenBytes` est une lettre. 
    } else if (isNaN(letter)) { 
        // Teste la valeur de la lettre mise en majuscule. 
        switch (letter.toUpperCase()) { 
            case 'T': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'G': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'M': 
                bytes *= 1024; // Multiplie par 1024. 
                //fall through 
            case 'K': 
                bytes *= 1024; // Multiplie par 1024. 
                break; // Sort du switch. 
            default: 
                bytes = false; // Renvoie false si la lettre est inconnue. 
        } 
    } 
     
    console.log(bytes);
    Pour moi, l'absence d'unité ne correspondant à aucun des cas du switch, je ne comprends vraiment pas pourquoi on n'a pas false pour retour.
    Et cependant le code fonctionne bien si on ne met pas d'unité.
    Je n'arrive pas à comprendre comment...
    Bien à toi
    maed

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    janvier 2011
    Messages
    14 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2011
    Messages : 14 134
    Points : 34 883
    Points
    34 883
    Par défaut
    Pour moi, l'absence d'unité ne correspondant à aucun des cas du switch
    tu as raison mais tu ne passe pas dans les swicth.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (isNaN(bytes)) {
      // on ne passe ici que si « bytes » n'est pas un nombre
    }
    else if (isNaN(letter)) {
      // on ne passe ici que si « bytes » est bien numérique
      // et
      // si « letter » n'est pas un chiffre
    }

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2016, 19h14
  2. Exercice en c sur les forks+Pipe+exec
    Par Elendhil dans le forum Linux
    Réponses: 6
    Dernier message: 07/11/2007, 20h32
  3. Exercice et tutos sur les macros ?
    Par Herman dans le forum Excel
    Réponses: 1
    Dernier message: 24/03/2007, 09h12
  4. exercice c probleme sur les switch
    Par john93 dans le forum C
    Réponses: 7
    Dernier message: 14/01/2006, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo