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

MATLAB Discussion :

Utilisation Switch and Case


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut Utilisation Switch and Case
    Bonjour à tous,

    L'idée principale est que mon script fasse différentes choses selon la passation ou non d'un critère de réussite. Par exemple, le script présente des images d'un type particulier (level 1) et dès qu'il y a obtention de 70% de réponses correctes deux fois consécutives, on présente d'autres images (level 2) et ainsi de suite jusqu'au level 3. Si le critère n'est pas atteint, le script doit présenter les images du level en question,...

    Par ce faire et faciliter les choses, j'ai pensé à utiliser switch et case dans un version plus simpliste du programme. Dans ce cas, il y a maximum six présentations d'images et trois level/types d'images différentes. Dans ce script et pour pouvoir simuler les différents cas de figure, j'insère moi-même les résultats

    Voici le code;
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    crit = 0; % permet de fixer le critère de réussite
     
    for i=1:6
        if (i==1)
            level = 1;
        end
     
        if (i==2)
            level = 1;
        end
     
        if (i==3) & (crit==2)
            level = 2;
        else
            level = 1;
        end
     
        if (i==4) & (crit==2)
            level = 2
        else
            level = 1;
        end
     
        if (i==5) & (crit==2)
            level = 3;
        end
     
        if (i==6) & (crit==2)
            level = 3;
        end
     
     
    switch level
    case 1
        a=input('\nEnter Pourcentage Level1 : ');% permet de donner un chiffre supérieur ou inférieur à 70 pour tester la simulation 
        if a>=70 & crit==0
            crit=1
        elseif a>=70 & crit==1
            crit=crit+1
        else
            crit=0
        end
     
    case 2
        b=input('\nEnter Pourcentage Level2 : '); 
        if b>70
            crit=1
        elseif a>70 & crit==1
            crit=crit+1
        else
            crit=0
        end
     
    case 3
        c=input('\nEnter Pourcentage Level3 : '); 
        if c>70
            crit=1
        elseif a>70 & crit==1
            crit=crit+1
        else
            crit=0
        end
     
    end
    end
    Malheureusement, je ne parviens pas à faire passer le script d'un level de présentation à un autre lorsque le critère est atteint. Cependant, au cours de simulation, je vois bien que le paramètre crit augmente de 0 jusqu'à 2 et puis soudainement il repasse à 0 et cela sans passer d'un level à un autre... je vous avoue donc que je ne sais pas trop d'où peut provenir mon erreur.

    Si vous avez une idée ou une suggestion, n'hésitez pas!

    Merci d'avance

  2. #2
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Tout d'abord, les premiers if ont l'air exclusif, et il serait préférable de les remplacer par une série de elseif.

    Pour résoudre ton problème, je te conseille le debugger, comme suit:
    - Mets ton script dans une fonction sans argument
    - Mets un point d'arret à la première ligne sous le for
    - Appel ta fonction
    - Fais F5 jusqu'à être au cas qui te pose problème (i=3) si j'ai bien compris
    - regarde les valeurs de tes variables, et avance ligne à ligne (F10) jusqu'à détecter d’où vient ton erreur.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 59
    Points : 35
    Points
    35
    Par défaut
    Merci pour ton aide VV33D.

    Effectivement, il était plus facile de debugger le script et d'y aller petit à petit. De la sorte, j'ai pu voir qu'il y avait beaucoup plus de paramètres à prendre en compte que ce que je ne pensais au début et dans ce cas, j'ai du simuler tous les cas de figure possibles. J'ai également intégré les premiers if qui avaient l'air exclusif en les remplacer par une série de elseif. Pour finir, j'ai également ajouté une variable qui permet d’enregistrer les paramètres quels que les critères et les niveaux et de visualisé après l'arrêt des différentes boucles. Il me semble que cela fonctionne à présent.

    Pour ceux qui seraient intéressé par le problème et que cela pourrait inspirer, voici le code:

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    % Structure avec critère acquis 2 fois consécutives
    %%% if needed sortrows
    crit = 0; % permet de fixer le critère de réussite
    all_level = [];
     
    for i=1:6
     
        if (i==1)
            level = 1;
     
        elseif (i==2)
            level = 1;
     
        elseif (i==3) && (crit==0)
            level = 1;
        elseif (i==3) && (crit==1)
            level = 1;
        elseif (i==3) && (crit==2)
            level = 2;
            crit = 0;
     
        elseif (i==4) && (crit==0) && (level==1)
            level = 1;
        elseif (i==4) && (crit==1) && (level==1)
            level = 1;
        elseif (i==4) && (crit==2) && (level==1)
            level = 2;
            crit= 0;
        elseif (i==4) && (crit==0) && (level==2)
            level = 2;
        elseif (i==4) && (crit==1) && (level==2)
            level = 2;
     
     
        elseif (i==5) && (crit==0) && (level==1)
            level = 1;
        elseif (i==5) && (crit==1) && (level==1)
            level = 1;
        elseif (i==5) && (crit==2) && (level==1)
            level = 2;
            crit = 0;
        elseif (i==5) && (crit==0) && (level==2)
            level = 2;
        elseif (i==5) && (crit==1) && (level==2)
            level = 2;
        elseif (i==5) && (crit==2) && (level==2)
            level = 3;
            crit = 0;
     
        elseif (i==6) && (crit==0) && (level==1)
            level = 1;
        elseif (i==6) && (crit==1) && (level==1)
            level = 1;
        elseif (i==6) && (crit==2) && (level==1)
            level = 2;
            crit = 0;
        elseif (i==6) && (crit==0) && (level==2)
            level = 2;
        elseif (i==6) && (crit==1) && (level==2)
            level = 2;    
        elseif (i==6) && (crit==2) && (level==2)
            level = 3;
            crit = 0;    
        elseif (i==6) && (crit==0) && (level==3)
            level = 3;
        elseif (i==6) && (crit==1) && (level==3)
            level = 3;
        elseif (i==6) && (crit==2) && (level==3)
            level = 3;
        end
     
    switch level
    case 1
        a=input('\nEnter Pourcentage Level1 : ');% permet de donner un chiffre supérieur ou inférieur à 70 pour tester la simulation 
        if a>=70 && crit==0
            crit=1
        elseif a>=70 && crit==1
            crit=crit+1
        else
            crit=0
        end
     
    case 2
        b=input('\nEnter Pourcentage Level2 : '); 
        if b>70 && crit==0
            crit=1
        elseif b>70 && crit==1
            crit=crit+1
        else
            crit=0
        end
     
    case 3
        c=input('\nEnter Pourcentage Level3 : '); 
        if c>70 && crit==0
            crit=1
        elseif c>70 && crit==1
            crit=crit+1
        else
            crit=0
        end
     
    end
     
    all_level = [all_level ; i crit level]
     
    end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation switch case
    Par sebounty dans le forum Débuter
    Réponses: 12
    Dernier message: 06/06/2007, 11h05
  2. [Oracle]utilisation d'un CASE
    Par magic charly dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/04/2006, 16h30
  3. Erreur de compilation avec SWITCH et CASE
    Par barbarello dans le forum C++
    Réponses: 4
    Dernier message: 21/01/2006, 21h47
  4. Commande switch et case
    Par bullrot dans le forum Langage
    Réponses: 6
    Dernier message: 14/12/2005, 11h37
  5. [Debutant] URL utilisable depuis une case d'un tableau de BD
    Par Marc_3 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/04/2005, 19h06

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