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

JavaScript Discussion :

switch pour calculette


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut switch pour calculette
    Bonjour,

    Voila, on doit faire en cour un tp : une calculette en javascript.

    Pour le moment, tout va bien, mais je suis à la phase débugage (au cas ou l'utilisateur entre ex-pré des mauvaise valeurs).

    Bref la je fais la division par zéro qui évidament n'existe pas, et je ferais le reste sur le même principe.
    Je fais en fait une fonction total qui va calculé ce que l'utilisateur a entré. Dans cette fonction il y a un switch qui va donc servir à faire ce débugage en fonction de ce que l'utilisateur a entré.

    voila mon code (enfin juste la fonction total). C'est le switch qui "bug" (oui entre guillemet car je n'est aucune erreur).

    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
     
    function total(r){
    		switch(r){
    			case r.search("/0"):{
    			document.getElementById('calcul').value='Division par zéro impossible !';
    			break;
    			}
    			default:{
    			 if(n1 != ''){
    				document.getElementById('calcul').value=Math.pow(n1, r);
    				n1='';
    			 }
    			 else{
    				document.getElementById('calcul').value=eval(r);
    			 }// fin du else 
    			} // fin du défault
    		}
    }
    En faite j'utilise la fonction search pour cherche si dans l'input de saisit il ya a "/0" (division par zéro). Mais évidement ça ne marche pas

    J'ai essayé tout ça déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    case r.search("/0"):{}
    case r.search("/0")!=-1:{}
    case r.search("/0")<0:{}
    case r.search("/0")>0:{}
    case r.search("/0")!=0:{}
    quelqu'un peut-il m'aider svp ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    ex-pré
    c'est un fitur parking ?
    exprès ...

    bref tu dois faire un switch (true)
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Oui c'est les correction google chromium et g pas fais gaffe autan pour moi...

    Sinon un switch "true" c-a-d ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function total(r){
    		switch(r){
    			case r.search("/0"):{
    que va te retourner r.search("/0") ??? true ou false

    ce n'est donc pas sur r qu'il faut swicther !!! mais sur true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function total(r){
    		switch(true){
    			case r.search("/0"):{
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Oui c'est les correction google chromium et g pas fais gaffe autan pour moi...
    Comme quoi google chromium a des gros progrès à faire

    Sinon, as tu lu la définition de la fonction search ?
    The search() method searches for a match between a regular expression and a string. This method returns the position of the match, or -1 if no match is found.
    Donc tu comprends que ton switch a du plomb dans l'aile car quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    switch(r){
    	case r.search("/0"):{
    ...
    alors tu compare r qui est ton expression avec la position du /0.

    Ensuite pour t'éviter un écueil supplémentaire, que penses tu du cas "3/0.5" ?

    ERE

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Mais ce que tu me dis n'est pas possible ! je ne peut switcher sur true, car je n'aurais pas que ce test, j'aurais dans ce même switch environ un cinquantaine de test donc voila quoi :s

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Citation Envoyé par emmanuel.remy Voir le message
    alors tu compare r qui est ton expression avec la position du /0.

    Ensuite pour t'éviter un écueil supplémentaire, que penses tu du cas "3/0.5" ?

    ERE
    A merde... Comment on "recherche" un ou plusieurs caractères alors ? et oui c'est vrai pour le 0.5, mais puis-je rechercher "/0_et_rien_d_autre_apres" ?

  8. #8
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Re,

    Pour le moment, tout va bien, mais je suis à la phase débugage (au cas ou l'utilisateur entre ex-pré des mauvaise valeurs).
    A mon avis tu avais oublié les tests unitaires !

    Comment on "recherche" un ou plusieurs caractères alors ? et oui c'est vrai pour le 0.5, mais puis-je rechercher "/0_et_rien_d_autre_apres" ?
    Cela s'appelle une expression régulière.

    C'est un TP très formateur que tu fais

    ERE

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    AAAAAAAAAAAAA je hais ce mot c'est mon cochemard ! Pas les RegExp pitié... Bon allé heureusement qu'on a 4 semaine pour le faire =_=

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Bon, mal grès moi j'ai utilisé des RegExp, mais ça ne marche pas plus...

    Voila à présent ma fonction :

    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
     
    function total(r){
    		switch(r){
    			case regue = new RegExp("$(/0)+", "gi"):{
    			document.getElementById('calcul').value='Division par zéro impossible !'.fontcolor('red');
    			break;
    			}
    			default:{
    			 if(n1 != ''){
    				document.getElementById('calcul').value=Math.pow(n1, r);
    				n1='';
    			 }
    			 else{
    				document.getElementById('calcul').value=eval(r);
    			 }// fin du else 
    			} // fin du défault
    		}
    }
    Pas d'erreur de script, juste une fonctin qui marche pas =_=

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    tu as toujours un souci dans le case du switch

    tu lui passes r il doit donc tester l'egalité entre r et le case ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    switch(r){
        case ('coucou'):   alert('r vaut coucou');  // le case teste si r=="coucou"
                                    break;
    il faut dans ton cas faire un switch true !!!

    switch(true){
    case (r=='coucou'): alert('r vaut coucou'); // le case teste si r=="coucou"
    break;[/CODE]
    c'est a pru près la meêm chose sauf que le switch true te permet de tester autre chose que r==
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    J'ai du mal a voir ce switch true, je suis débutant et j'ai vraiment du mal a concevoir ça... Mais sinon, ok pour le case "coucou" mais est-ce que cela marche avec des expressions régulières ? Car en JS il faut faire ce p**** de new RegExp dans une variable donc je suis un peu perdu...

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    il suffit que le test regExp retourne true ou false ...

    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
    <script type ='text/javascript'>
    function foo(bar){
    switch (true){
    				case (/[0-9]+/.test(bar)): alert('numérique');
    				                         break;
    				case (/[a-z]+/i.test(bar)): alert('alphabetique');
    				                         break;
    				case (/[*+-\/]+/.test(bar)): alert('operateur');
    				                         break;
    				default: alert('autre');                         
    			 }
    }
    </script>
    <body>
    <input type='text' value='' id='saisie' />			 
    <input type='button' value='go' onclick="foo(document.getElementById('saisie').value)"  />
    </body>
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Javascript répond par "Infinity" à une division par zéro. Le résultat est donc isNaN. Ca ne peut pas te suffir ?

    pseudo code
    ev = eval(r)
    if isNaN(ev) return "ERROR" else return ev
    /pseudo code

    Sinon, pour gagner en souplesse de contrôle, si tu as un peu de temps, penche toi sur le design pattern Interpreter pour réaliser ta calculatrice. Ca peut t'aider à envisager ton tp sous un autre angle.

    ERRATUM
    isNaN(100/0) => false
    (100/0 == Infinity) => true

    Infinity est une constante, -Infinity aussi. donc :
    pseudo code
    ev = eval(r)
    if( isNaN(ev) || (Math.abs(ev) == Infinity)) return "ERROR" else return ev
    /pseudo code

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Merci a vous deux, je vais continuer sur ces pistes et je tiens informé l'évolution pour ne pas ré-ouvrir 10000 post :p

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Bon sa avance mais j'ai un problème avec la solution du switch(true) :

    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
     
    function total(r){
    		switch(true){
    			case ($(/0)+.test(r)):{
    			document.getElementById('calcul').value='Division par zéro impossible !'.fontcolor('red');
    			break;
    			}
    			default:{
    			 if(n1 != ''){
    				document.getElementById('calcul').value=Math.pow(n1, r);
    				n1='';
    			 }
    			 else{
    				document.getElementById('calcul').value=eval(r);
    			 }// fin du else 
    			} // fin du défault
    		} // fin du switch
    } // fin de la fonction
    Voila le code firebug :

    ajout is not defined
    [Break on this error] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\r\ncalculette.html (ligne 1)
    eff is not defined
    [Break on this error] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\r\ncalculette.html (ligne 1)
    loga is not defined
    [Break on this error] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\r\ncalculette.html (ligne 1)
    caree is not defined
    [Break on this error] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"\r\ncalculette.html (ligne 1)
    racine is not defined
    Alors que lorsque j'enlève (ou que je commente) le switch, tout marche (sauf total =_=)

    Une idée ?

  17. #17
    Membre expérimenté Avatar de marts
    Inscrit en
    Février 2008
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 233
    Par défaut
    Curieuse façon de faire !
    Pourquoi ne pas simplement utiliser les exceptions ? C'est fait pour.

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 241
    Par défaut
    Qu'entends-tu par les "exceptions" ?

  19. #19
    Membre expérimenté Avatar de marts
    Inscrit en
    Février 2008
    Messages
    233
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 233
    Par défaut
    Je voulais parler des blocs try-catch.
    Mais je viens de me rendre compte que le javascript ne génère pas d'erreur en cas de division par 0 !
    Donc oublies ça.
    A mon avis la meilleure solution est celle de kernelfailure : une division par 0 donne Infinity comme résultat.

  20. #20
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    313
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 313
    Par défaut
    Pas besoin des {} pour tes blocs case et default.

    La syntaxe de ton regex curieuse :
    Ce sera déjà plus juste.
    Mais ^ = debut
    $ = fin

    Que veux tu faire exactement ici ?
    Ne serait-ce pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /\/[-]?[0\.]+$/.test(r)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Adaptateur sur switch pour fibre optique?
    Par flyingman dans le forum Périphériques
    Réponses: 2
    Dernier message: 30/07/2012, 16h14
  2. Réponses: 3
    Dernier message: 17/12/2011, 09h20
  3. Cherche switch pour baie de brassage
    Par gramlinz60 dans le forum Achat et Conseils
    Réponses: 3
    Dernier message: 27/01/2011, 20h48
  4. erreur switch pour ouvrir des fenêtres childform
    Par zabdaniel dans le forum C#
    Réponses: 4
    Dernier message: 03/03/2009, 11h37
  5. Réponses: 9
    Dernier message: 19/05/2005, 21h29

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