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

 C Discussion :

Transformer une condition if..else en switch


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Transformer une condition if..else en switch
    Bonjour à tous,

    Tout est dans le titre, si vous avez des suggestions, je suis preneur

    Voici mon 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
     
    void function_test_natural(char * function_name, IDL_LONG n_q_values, double *q_values, double *p_values, double *results)
    {
     
        int i;    
     
        sasfit_param param;
     
        // Sets the parameters according to user-defined values.
        for (i = 0; i < MAXPAR; i = i + 1)
        {
            param.p[i] = *p_values++;
        }
     
     
        if (strcmp(function_name, "sphere") == 0)
     
            // Loop over the q values.        
            for (i = 0; i < (int)n_q_values; i = i + 1)
            {
                *results++ = (double) sasfit_ff_sphere(*q_values++, &param);
            }
     
        else
            *results++ = -9999.999;
     
    }
     
    void function_test(int argc, void *argv[])
    {  
        double *q_values, *p_values, *results;
        IDL_LONG n_q_values;
        char * function_name;
     
        function_name = argv[0];
        n_q_values    = (IDL_LONG) argv[1];
        q_values      = argv[2];
        p_values      = argv[3];
        results       = argv[4];
     
        function_test_natural(function_name, n_q_values, q_values, p_values, results);
    }
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je ne comprends pas trop ton problème, qu'est ce que tu veux faire ?

    Ensuite quand je vois du code comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *results++ = -9999.999;
    je me demande toujours si cela fait bien ce que c'est censé faire (à cause des priorités des différents opérateurs *, ++, =)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    L'idée étant de rendre mon code plus lisible, à l'intérieur de ma boucle if..else, je vais avoir une multitude de conditions, un switch case est à mon sens plus approprié afin d'éviter des centaines de ligne de code "inutile".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        if (strcmp(function_name, "sphere") == 0)
     
            // Loop over the q values.        
            for (i = 0; i < (int)n_q_values; i = i + 1)
            {
                *results++ = (double) sasfit_ff_sphere(*q_values++, &param);
            }
     
        else
            *results++ = -9999.999;
    La modification est à faire à ce niveau là, le problème est que j'ai pas mal de difficultés avec ce langage, et je ne sais pas vraiment comment modifier ce code pour avoir une condition switch au lieu de mon if...else.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Tu veux dire que tu auras plusieurs valeurs possible pour function_name ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (strcmp(function_name, "sphere") == 0)
    ...
    if (strcmp(function_name, "carre") == 0)
    ...
    if (strcmp(function_name, "rectangle") == 0)
    ...
    if (strcmp(function_name, "ellipse") == 0)
    ...
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Exactement, désolé j'aurais du le préciser :p

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Nyxin Voir le message
    L'idée étant de rendre mon code plus lisible, à l'intérieur de ma boucle if..else, je vais avoir une multitude de conditions, un switch case est à mon sens plus approprié afin d'éviter des centaines de ligne de code "inutile".
    Non. A ce niveau là, un tableau associatif mot-clef <=> fonction est encore plus approprié...

    Code c : 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
    typedef struct {
        char *mot_clef;
        double (*fct)(int, void *);
    } t_choix;
     
    t_choix tabChoix[]={
        {"sphere", sasfit_ff_sphere},
        {"carre", sasfit_ff_carre},
        {"cube", sasfit_ff_cube},
        {NULL, NULL},
    }
    t_choix *ptChoix;
     
    for (ptChoix=tabChoix; ptChoix->mot_clef != NULL; ptChoix++)
    {
        if (strcmp(ptChoix->mot_clef, function_name) == 0)
        {
            for (i = 0; i < (int)n_q_values; i++)
            {
                *results++ = (double) (ptChoix->fct)(*q_values++, &param);
            }
            break;
        }
    }
    if (ptChoix->mot_clef == NULL)
        // Rien n'a été trouvé
        *results++=-9999.999;

    PS: j'ai recopié tel quel le *results++=... pour que tu piges le principe de l'algo mais je suis d'accord avec ram-0000 quand il dit que c'est pas génial comme instruction...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par Nyxin Voir le message
    Tout est dans le titre, si vous avez des suggestions, je suis preneur
    50 minutes plus tard ...

    Citation Envoyé par Nyxin Voir le message
    Exactement, désolé j'aurais du le préciser :p
    Comme quoi, ce qui va sans dire, va mieux en le disant. Expliquer ton problème concrètement et du premier coups t'aurais permis de gagner 1 heure.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Ouep désolé, j'aurais du mieux m'exprimer la première fois =/

    Je vous remercie pour vos réponses, je vais essayer de faire fonctionner tout ça

Discussions similaires

  1. Comment faire une condition switch
    Par y-bab dans le forum IHM
    Réponses: 3
    Dernier message: 07/08/2008, 09h37
  2. Sauter d'une condition à l'autre dans un switch
    Par divad dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2008, 23h00
  3. case du switch avec une condition
    Par benkunz dans le forum Langage
    Réponses: 5
    Dernier message: 04/05/2007, 12h14
  4. Réponses: 3
    Dernier message: 11/06/2006, 12h09

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