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 :

Comment faire pour que ma fonction retourne un tableau de 2 éléments?


Sujet :

C

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 170
    Points : 66
    Points
    66
    Par défaut Comment faire pour que ma fonction retourne un tableau de 2 éléments?
    Je vous salue!

    Ben , je peine depuis plusieurs heures pour trouver la méthodes qui me permettra de faire retourner par une fonction un tableau 2 éléments!
    Si je suppose que ma fonction est float mafonction (float x, float y), comment faire alors pour lui dire que je veux retourner un tableau (return(tab[2])?

    C'est assez urgent !

    Je vous remercie d'avance!!!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Tu devrais pas deja faire, si tu retourne un tableau :
    avec float *tab ?

    Et si c'est ca, pense aussi a changer la declaration de ta fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      float *mafonction(float x, float y)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 298
    Points : 901
    Points
    901
    Par défaut
    je veux retourner un tableau (return(tab[2])?
    tu ne retourne pas un tableau, tu retourne le 2e élément du tableau, et je te rappelle que les indices d'un tableau vont de 0 à n-1 (et non de 1 à n) !!

    tu peux faire qqch du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    double tab[2];
    void f(x,y,double tab[])
    {
    tab[0]=x;
    tab[1]=y;
    }
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double * f(double x,double y)
     {
      double * tab=malloc(2*sizeof(*tab));
    if(tab==NULL) return(EXIT_FAILURE);
    tab[0]=x;
    tab[1]=y;
    return tab;
    }
    mais après il faudra faire un free(tab);

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 170
    Points : 66
    Points
    66
    Par défaut
    Merci de votre promptitude!

    Oui j'ai fait une erreur de frappe (je dirai ) en ecrivant return (tab[2]) ; salseropom;
    C'est un tableau contenant 2 éléments de type float que je veux retourner.
    Faut il absolument utiliser les pointeurs? et faire du genre:
    float * mafonction(float x,float y)
    {
    float * tab=malloc(2*sizeof(*tab));
    tab[0]=x;
    tab[1]=y;
    return tab;
    }

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par flet le kid
    Ben , je peine depuis plusieurs heures pour trouver la méthodes qui me permettra de faire retourner par une fonction un tableau 2 éléments!
    Une fonction C ne peut pas retourner un tableau. Tu peux, par exemple, passer l'adresse du premier élément d'un tableau, son nombre d'élements (à des fins de contrôle) et modifier ses valeurs dans la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       T a[N];
     
       f(a, N);
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void f (T *a, size_t n)
    {
       a[0] = ...;
       a[1] = ...;
    }
    http://emmanuel-delahaye.developpez.....htm#param_tab

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par flet le kid
    MFaut il absolument utiliser les pointeurs?
    Oui.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Une fonction C ne peut pas retourner un tableau.
    Vraiment ? Ca m'est deja arrive et pourtant aucuns problemes...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par NaeiKinDus
    Vraiment ? Ca m'est deja arrive et pourtant aucuns problemes...
    Un tableau est un pointeur ;-)

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par oFlex
    Un tableau est un pointeur ;-)
    Arf quel boulet... Effectivement j'avais oublie qu'un tableau est un pointeur ^_^
    Vu sous cet angle, je comprends mieux
    Merci !

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par NaeiKinDus
    Vraiment ? Ca m'est deja arrive et pourtant aucuns problemes...
    Montre le code.

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par oFlex
    Un tableau est un pointeur ;-)
    Non, et c'est bien pour ça qu'on ne peut pas retourner un tableau.

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 170
    Points : 66
    Points
    66
    Par défaut
    Donc ce que j'écris là (selon toi,NaeikinDus) est il juste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     float * mafonction(float x,float y)
     {
      float * tab=malloc(2*sizeof(*tab));
      tab[0]=x;
      tab[1]=y;
      return tab;
    }
    ou bien je veux passer le tableau comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void mafonction(float x,float y, *tab)
     {
    tab[0]=x;
      tab[1]=y;
    }
    et puis je vais travailler. Si cette deuxième méthode est juste, je vais l'adopter finalement.


    J'ai un autre problème, oh là vraiment bien rien de grave!

    J'utilise un TEDIT et je voudrais (comme pour une calculatrice) que les écriture partent de la droite vers la gauche. J'ai essayer de modifier BIDIMODE mais ça n'a rien fait!

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par flet le kid
    J'utilise un TEDIT
    Pas du C. Si c'est du Windows : Développement Windows

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 170
    Points : 66
    Points
    66
    Par défaut
    Escusez, j'ai oubliez, c'est avec C++Builder, mais est ce que mon deuxième code avec le tableau en paramètre est correcte?
    Pour l'autre j'irai voir dans le forum suivant (c++)!
    Merci

  15. #15
    Invité
    Invité(e)
    Par défaut
    Exemple :

    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
     
    int    *func()
    {
      int    lol[2];
     
      lol[0] = 69;
      lol[1] = 666;
      return lol;
    }
     
    int main()
    {
      int *erf;
     
      erf = func();
      printf("%d\n%d\n", erf[0], erf[1]);
    }
    Y'a bien un warning, mais a l'execution tout passe... Si tu pouvais m'expliquer ca, je t'en remercierai

  16. #16
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par NaeiKinDus
    Exemple :

    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
     
    int    *func()
    {
      int    lol[2];
     
      lol[0] = 69;
      lol[1] = 666;
      return lol;
    }
     
    int main()
    {
      int *erf;
     
      erf = func();
      printf("%d\n%d\n", erf[0], erf[1]);
    }
    Y'a bien un warning, mais a l'execution tout passe... Si tu pouvais m'expliquer ca, je t'en remercierai
    C'est parce que tu retournes l'adresse d'un elemement local a ton fonction autrement dit ton tableau a une adresse dans la fonction et à la fin de la fonction l'adresse sera invalide le tableau ayant étant liberé.
    Pour eviter ca il faut creer ton tableau dynamiquement, retourner l'adresse, et le liberer quand tu n'en a plus besoin.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Non, et c'est bien pour ça qu'on ne peut pas retourner un tableau.
    Si tu sais développer ta remarque parce que là j'ai pas compris pourquoi tu dis que c'est pas un pointeur alors qu'en labo je l'utilise souvent comme tel.

    Désolé de perturber le topic.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Oui je comprends bien Skyrunner, mais c'etait pour illustrer rapidement...
    Cependant, Emmanuel faisait il reference au fait que la le return renvoit une adresse et non un tableau pour dire qu'une fonction C ne renvoit pas de tableau?

  19. #19
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    170
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 170
    Points : 66
    Points
    66
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    float * mafonction(float x,float y)
     {
      float * tab=malloc(2*sizeof(*tab));
      tab[0]=x;
      tab[1]=y;
      return tab;
    }
    free (tab);
    ou bien je veux passer le tableau comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void mafonction(float x,float y, *tab)
     {
    tab[0]=x;
      tab[1]=y;
    }
    Les 2 sont justes, n'est ce pas?

  20. #20
    Invité
    Invité(e)
    Par défaut
    Je pense que oui

    A un detail pres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void mafonction(float x,float y, float *tab)
    N'oublies pas le float * pour tab
    Dernière modification par gege2061 ; 03/06/2006 à 19h23.

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

Discussions similaires

  1. Comment faire pour que SELECT retourne 0 s'il est vide
    Par Chacha35 dans le forum Développement
    Réponses: 4
    Dernier message: 14/10/2009, 14h58
  2. Réponses: 5
    Dernier message: 31/01/2008, 18h05
  3. [VB6]Comment faire pour que le caption d'une ARProgressBar..
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 02/04/2006, 21h42
  4. comment faire pour que plusieurs user utilise mem macro?
    Par megapacman dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 17h55
  5. CSS: comment faire pour que mes coins soit arrondi
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 16/02/2006, 13h08

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