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

    [Facile][Indispensable] Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"
    Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"
    Apprendre le JavaScript en interagissant avec les passionnés


    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 troisième exercice qui porte sur la structure conditionnelle switch. L'exercice est accompagné d'indications théoriques en guise de cours préalable et d'une solution. Bien entendu, cette solution n'est pas nécessairement unique.

    • Objectif : Manipuler les structures conditionnelles de type switch.
    • Niveau : Facile
    • Exigence : Indispensable


    Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"

    N'hésitez pas nous faire part de vos remarques, difficultés rencontrées et autres suggestions.

    Découvrez également tous nos exercices JavaScript !

    Bonne chance !

  2. #2
    Membre du Club
    Bonjour,

    Voici ma solution en utilisant if ... else :

    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
     
     
    var quantity = 2, 
        unit = 'K', 
        result = 0;
    ; 
     
    if (unit = 'K') {
      result = quantity * 1024;
      console.log( "Voici la taille en octets  " + result);
    }
    else if (unit = 'M'){
      result = quantity * 1024 * 1024;
      console.log( "Voici la taille en megaoctets  " + result);}
    else if (unit = 'G') {
     
      result = quantity *1024 * 1024 *1024;
      console.log( "Voici la taille en gigaoctets  " + result);
    }
    else {
     
      console.log("il y a une erreur");
    }
     
     
    console.log(result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048).



    Et voici celle en utilisant switch :

    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
     
    var quantity = 2, 
        unit = 'K', 
        result = 0;
    ; 
     
     
    switch (unit) {
     
      case 'K':
        result = 1024 * quantity;
        console.log( "Voici la taille en octets  " + result);
     
        break;
      case 'M':
        result = 1024 * 1024* quantity ;
        console.log( "Voici la taille en megaoctets  " + result);
        break;
      case 'G':
        result = 1024 * 1024 * 1024 * quantity;
        console.log( "Voici la taille en gigaoctets  " + result):
        break;
      default : 
        console.log("il y a une erreur");
    }

  3. #3
    Membre expérimenté
    La résolution avec le if...else ne fonctionne pas. L'exemple que tu as pris t'en donne l'illusion mais ce n'est pas le cas. Pourquoi?

    En fait quand tu fais if(unit ='K'){, tu ne compares pas la variable unit et la valeur 'K' mais tu assigne la valeur 'K' à la variable unit (unit va prendre la valeur 'K' pour le dire autrement). Ensuite le if évalue la valeur de unit qui est une chaîne de caractères non vide et donc évaluée à true. Ce qui fait que tu exécutes les instructions contenue dans ce if.
    Vu que tu as pris comme exemple la lettre K, ton code semble fonctionner. Cependant si tu changes la lettre, tu verras que ton code rentre toujours dans la lettre K.

    C'est un problème classique du jeune programmeur. L'opérateur de comparaison d'égalité n'est pas
    = mais == ou ===. = sert à assigner une valeur à une variable.
    Une technique qu'utilise certains développeurs pour éviter cette erreur bête (souvent liée à une inattention) mais qui peut faire perdre pas mal de temps est d'inverser la valeur testée et la variable:
    Code javascript :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    if ('K' === unit) { // est équivalent à if (unit === 'K') {
    if ('K' = unit) { // lève une erreur car tu ne peux pas assigner le contenu d'une variable à une valeur


    Le switch semble être correct, bravo!

    En ce qui concerne ta façon de coder, fais bien attention à respecter des conventions strictes. Ne saute pas des lignes à tel endroit si tu ne le fais pas de la même manière dans un autre endroit similaire, si tu mets un espace devant tes accolades, fais le bien partout, ...
    color{gnu: ["[/COLOR]um", "cki"]}

  4. #4
    Membre expert
    Salut,

    Je poste ma réponse :

    Code javascript :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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    'use strict';
     
    var quantity = 2,
        unit = 'K',
        result;
     
     
    if (unit === "K") {
        result = 1024 * quantity;
    }
    else if (unit === "M") {
        result = 1024 * 1024 * quantity;
    }
    else if (unit === "G") {
        result = 1024 * 1024 * 1024 * quantity;
    }
    else if (unit === "T") {
        result = 1024 * 1024 * 1024 * 1024 * quantity;
    }
    else {
        result = false;
    }
     
    console.log("resultat avec if else : " + result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048).
     
    switch (unit) {
        case 'K':
            result = 1024 * quantity;
            break;
     
        case 'M':
            result = 1024 * 1024 * quantity;
            break;
     
        case 'G':
            result = 1024 * 1024 * 1024 * quantity;
            break;
     
        case 'T':
            result = 1024 * 1024 * 1024 * 1024 * quantity;
            break;
     
        default:
            result = false;
    }
     
    console.log("resultat avec switch : " + result);

  5. #5
    Nouveau Candidat au Club
    Ma réponse
    Bonjour,

    je suis grande débutante en Javascript... bref voici ma réponse... si il y a des erreurs n'hésitez pas à me corriger et à m'expliquer... pour que je comprenne... merci d'avance.

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    var quantity = 2; 
    var unit = "K"; 
    var result ; 
     
    // avec if .. else
     
    if (unit === "K") {
    	result = quantity * 1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "M") {
    	result = quantity * 1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "G") {
    	result = quantity * 1024*1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else if (unit === "T") {
    	result = quantity * 1024*1024*1024*1024;
    	console.log(quantity + unit + " vaut "+ result + " octets.");
    } else {
    	console.log("ce n'est pas une valeurs");
    }
     
    // avec switch
    switch (unit){
    	case ("K") :
      	result = quantity * 1024;
      	console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
      case ("M") :
      	result = quantity * 1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       case ("G") :
       	result = quantity * 1024*1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       case ("T") :
       	result = quantity * 1024*1024*1024*1024;
    		console.log(quantity + unit + " vaut "+ result + " octets.");
        break;
       default :
       	console.log("ce n'est pas une valeurs");
    }
     
    // TODO: Coder l'algorithme de transformation ici. 
     
    console.log(result); // Affiche le résultat (avec les valeurs par défaut, cela donnera 2048).

  6. #6
    Membre expérimenté
    Salut lijasu,

    Déjà ton code fonctionne donc c'est déjà bien!

    La seule remarque importante que je peux te faire, c'est à propos de la factorisation de ton code.
    C'est un des premiers premiers principes que l'on apprend en programmation et qui consiste dans le fait de ne pas dupliquer du code à plusieurs endroits. Une des principales raisons est que si un code dupliqué possède un bug, ce dernier existe alors en plusieurs exemplaires dans l'application. En général, on ne corrige qu'un seul endroit et c'est le drame car le problème revient forcément plusieurs fois (ce qui est généralement très mal vu par les utilisateurs et autres chefs de projet fonctionnel).
    On peut ainsi voir dans ton code, certaines lignes qui se répètent. Par exemple console.log(quantity + unit + " vaut "+ result + " octets.");.
    Voici une manière de factoriser:
    Code JavaScript :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
    var result = false;
     
    if (unit === "K") {
        result = quantity * 1024;
    } else if (unit === "M") {
        result = quantity * 1024 * 1024;
    } else if (unit === "G") {
        result = quantity * 1024 * 1024 * 1024;
    } else if (unit === "T") {
        result = quantity * 1024 * 1024 * 1024 * 1024;
    }
     
    if (result !== false) {
        console.log(quantity + unit + " vaut " + result + " octets.");
    } else {
        console.log("ce n'est pas une valeur.");
    }


    Le reste de mes commentaires vont plus être sur la forme que sur le fond:
    • attention à la précision de tes indentations
    • ton formatage doit être cohérent: e.g. si tu mets un espace avant une accolade, il faut que ce soit le cas tout le temps

    La rigueur de codage est primordiale!

    Au final, l'exercice est plutôt bien réussi donc bravo.
    color{gnu: ["[/COLOR]um", "cki"]}

  7. #7
    Modérateur

    Bonjour,
    heureux de voir que les exercices sont encore vus, lus et réalisés.

    Je rebondis sur
    (...) qui consiste dans le fait de ne pas dupliquer du code à plusieurs endroits.
    pour suggérer également cette façon de coder qui consiste à initialiser une variable suivant les cas et de s'en servir en final

    Bonjour les curieux !
    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
    var quantity = 20,
        unit = "M",
        multi = 0;
     
    if (unit === "K") {
        multi = 1024;
    } else if (unit === "M") {
        multi = 1024 * 1024;
    } else if (unit === "G") {
        multi = 1024 * 1024 * 1024;
    } else if (unit === "T") {
        multi = 1024 * 1024 * 1024 * 1024;
    }
    if (multi !== 0) {    // pour que cela soit clair pour tout le monde
        console.log(quantity + unit + " vaut " + quantity * multi + " octets.");
    } else {
        console.log("ce n'est pas une valeur.");
    }

    Bonne continuation

###raw>template_hook.ano_emploi###