IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Exercices Discussion :

[Facile][Indispensable] Exercice 1.2.2 : Les structures conditionnelles avec l'instruction "switch"


Sujet :

Exercices

  1. #1
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut [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
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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
    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é
    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
    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, ...
    {gnu: ["um", "cki"]}

  4. #4
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    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
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 1
    Points : 1
    Points
    1
    Par défaut 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é
    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
    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.
    {gnu: ["um", "cki"]}

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 955
    Points : 44 104
    Points
    44 104
    Par défaut
    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

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/05/2016, 18h14
  2. Réponses: 9
    Dernier message: 30/04/2016, 21h40
  3. Probleme sur les structures conditionnelles
    Par minus1992 dans le forum Général Python
    Réponses: 3
    Dernier message: 25/02/2015, 08h24
  4. Exercices sur les structures conditionnelles
    Par alibouriga dans le forum Pascal
    Réponses: 5
    Dernier message: 24/03/2013, 22h11
  5. Les structures de répétition - l'instruction FOR
    Par Imanou dans le forum Langage
    Réponses: 6
    Dernier message: 17/01/2008, 19h13

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