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 :

Conditions aux arguments d'une fonction ?


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut Conditions aux arguments d'une fonction ?
    Bonjour a tous,

    Ma Question: Est-il possible de créer une condition dans les arguments lors de l'envoi d'une fonction en langage C ?

    Je m'explique:
    C'est-à-dire en simplifier par rapport a ce que je souhaite faire ca donnerai cela.

    — prenons 3 variables « a », « b » et « n » ;
    — envoyer à une fonction X la variable « a » ou « b » suite a une condition « n ».

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        // VARIABLES
        int a , b;
        int n;
     
        // MA FONCTION
        addition(  if( n == 5 )  a; else  b; ); // SI "n" VAUT 5 ENVOI "a" SINON "b"
        // CE CI NE FONCTIONNE PAS C'EST SIMPLEMENT POUR EXPLIQUER

    En réalité, dans mon programme, ce n'est pas de simples variables mais des tableaux à double dimension que je souhaiterais envoyer à une fonction qui doit se répéter un certain nombre de fois.

    ( a[x][y] et b[x][y] et n représentant l'incrémentation d'une boucle )

    notez qu'on pourrait facilement penser à faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int a,b;
        int n;
     
        if( n == 5 )
        addition ( a ) ;
        else
        addition ( b ) ;
    Mais vu que je voudrais faire une boucle à la fonction, j'aimerais contourner le problème
    de répéter constamment et exactement le nombre de fois que fais la boucle.
    Et cela serait embêtant si cette boucle venait à changer.

    Ce serait en fait créer une sorte de fonction dynamique.

    Y a-t-il donc une méthode simple que j'ignore et que je serais curieux de le découvrir ?
    Sinon pouvons-nous contourner le problème via des macros ? si oui laquelle ou lesquels ?

    C'est pour cela que j'en appelle aux experts du langage C

    Merci d'avoir pris le temps de me lire et d'essayer de résoudre mon problème ou peut-être bien même votre futur problème

    NB: je n'ai rien trouvé sur le Net ou bien je n'ai pas tapé les bons mot-clés qu'il fallait. Si c'est le cas, je m'en excuse par avance, et vous seriez bien aimable de me rediriger vers le site en question.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    bonjour,
    SANS HURLER!
    tu peux envisager le ?: .

    pour addition( if( n == 5 ) a; else b; );tu as deux possibilités:
    if(n==5) addition(a); else addition(b);addition( n == 5 ? a : b );En pratique la grammaire du langage contient:
    instruction:= if (expression) instruction else instruction
    expression:= expression ? expression : expression
    Sachant qu'une expression à une valeur, pas une instruction.

    autre possibilité, addition(n, a, b), qui ferait le choix en interne.
    autre possibilité, utiliser un tableau de pointeurs de fonction

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    Merci pour cette réponse rapide, c'est cool des forums comme ça,
    je viens de m'inscrire, poster mon problème et a peine 20 minutes et déjà une réponse BRAVO!



    Citation:
    expression:= expression ? expression : expression

    je l'avais déjà utiliser plusieurs fois mais dans d'autre circonstance,
    cette façon d'écrire la condition ne m'est pas venu a l'idée pour l'envoie
    d'une valeur.

    la méthode fonctionne excellente réponse merci beaucoup!

    la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         int a,b;
         int n;
     
         addition( n == 5  ? a : b );

    Les autres possibilités sont aussi valable seulement ils ne me convienne pas
    pour mon code:
    - autre possibilité, addition(n, a, b), qui ferait le choix en interne.

    je ne souhaite envoyer qu'une des 2 variables afin d'évité de travailler a l'intérieur de la fonction pour une certaine raison

    - autre possibilité, utiliser un tableau de pointeurs de fonction

    mes variables sont a doubles dimension a[][] et en rajouté une troisième
    me compliquerai les choses


    Voilà , merci et encore Bravo l'expert!

  4. #4
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par FR4Z3R69 Voir le message
    [...]
    En réalité, dans mon programme, ce n'est pas de simples variables mais des tableaux à double dimension que je souhaiterais envoyer à une fonction qui doit se répéter un certain nombre de fois.

    ( a[x][y] et b[x][y] et n représentant l'incrémentation d'une boucle )

    notez qu'on pourrait facilement penser à faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int a,b;
        int n;
     
        if( n == 5 )
        addition ( a ) ;
        else
        addition ( b ) ;
    Mais vu que je voudrais faire une boucle à la fonction, j'aimerais contourner le problème
    de répéter constamment et exactement le nombre de fois que fais la boucle.
    Et cela serait embêtant si cette boucle venait à changer.

    [...]
    Bonjour,

    comme l'Éternel te l'a proposé tu as l'opérateur ternaire ?:
    Mais je me demande bien où se trouve le problème d'avoir un if dans une boucle ???
    Si de toute façon tu dois faire un choix tu devras passer par un if ou équivalent (switch ou ?: )
    Alors je me demande pourquoi tu veux cacher le if ????
    Si c'est esthétique : ça ne sert à rien sinon à compliquer la lecture.
    Si c'est pour une raison de performance, à mon avis c'est largement inutile.


    Il y aurait bien une autre solution, mais uniquement si ta condition ne porte que sur un choix limité (du style n ne pourra être qu'un entier entre 0 et NMAX). Dans ce cas tu peux construire un tableau de NMAX pointeurs sur des fonctions, quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #define NMAX 3
     
    void fonction1(void* a, void* b);
    void fonction2(void* a, void* b);
    void fonction3(void* a, void* b);
     
    typedef void (*fonction_t)(void*, void*);
    fonction_t mesfonctions[NMAX]={fonction1, fonction2, fonction3};
     
    ....
     
    // l'appel suivant n :
    mesfonction[n](truc, bidule);

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Par défaut
    merci pour ce savoir supplémentaire

    J'avoue avoir mis un peu de temps a comprendre,
    je vais donc me contenté de la première solution afin de ne pas être trop perdu
    a mon simple niveau

    Citation Envoyé par kwariz
    Mais je me demande bien où se trouve le problème d'avoir un if dans une boucle ??? Si de toute façon tu dois faire un choix tu devras passer par un if ou équivalent (switch ou ?: ) Alors je me demande pourquoi tu veux cacher le if ????
    Si c'est esthétique : ça ne sert à rien sinon à compliquer la lecture.
    Si c'est pour une raison de performance, à mon avis c'est largement inutile.
    wouah toute les questions que vous vous posez c'est bien je n'aurai
    pas pensé a tout cela a première vu

    alors pour vous répondre chère expert ^^ qui a pris du temps a me répondre et que je vous en remercie,
    ca ne m'est pas vraiment un problème d'avoir un if mais le faite que dans ma fonction possède plusieurs
    valeur a envoyer , réécrire tout pour changer une valeur me dérangeait surtout si on en a une dizaine de ce genre.

    Et j'ai appris que pour être un bon programmeur, il faut être un flemmard

    avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        int a,b;
        int n;
     
        if(n == 5)
        addition( a  );
        else
        addition( b );
    après:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         int a,b;
         int n;
     
         addition( n == 5  ? a : b );
    pour moi pas de doute


    MERCI ENCORE POUR TOUT!

    Donc:
    Est-il possible de créer une condition dans les arguments lors de l'envoi d'une fonction en langage C ?
    La réponse est oui via a opérateur ternaire .

    MESSAGE RESOLU!

    Bonne continuation a tous!

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

Discussions similaires

  1. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04
  2. Récupération d'arguments sur une fonction
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/09/2005, 09h17
  3. premier argument d'une fonction
    Par Ickou dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 14h17
  4. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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