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++Builder Discussion :

Comment retourner un vecteur dans une fonction ?


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Comment retourner un vecteur dans une fonction ?
    Bonjour,


    dans mon application, j'ai une fonction qui fait un certain nombre de calcul dont les résultats sont de type float.
    Ensuite, je souhaiterai mettre ces résultats à l'intérieur d'un vecteur et le faire retourner.
    J'ai essayé avec la méthode insert mais cela ne fonctionne pas ... ou peut être que je ne l'utilise pas bien.
    Pourtant, j'ai regardé sur le net et dans la FAQ C++ mais je ne comprend pas bien comment on s'en sert.

    Je post ici 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
     
    std::vector<float> Fonction::Combinaison01 (unsigned char *Parametres)
    {
     
    	std::vector<float> Param;
    	float Val1, Val2, Val3;
     
    	Val1 = (float)Parametres[9]/10.0;
    	Val2 = (float)((Parametres[12]*256) + Parametres[11])/10.0;
    	Val3 =  (float)((Parametres[14]*256) + Parametres[13])/10.0;
     
    	Param.push_back(Val1);
    	Param.push_back(Val2);
    	Param.push_back(Val3);
     
    	//Param.insert(Param.begin(), Param.begin(), Param.end());
     
    	return Param;
     
    }
    Comment puis je tout d'abord insérer dans mon vecteur dans l'ordre Val1 Val2 Val3 et ensuite après retour réutiliser ces valeurs ?

    Merci d'avance et à bientôt !

  2. #2
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    je ne comprend pas bien ton problème, dans ton exemple tes valeurs sont ajouter au vecteur par les méthodes push_back, tu n'as pas besoin de faire un insert

    De plus, il est mieux de faire passé ton vecteur par un paramètre en référence, cela utilise moins de mémoire

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Je ne comprend pas bien ce que tu veux dire !!!

    J'ai essayé les 2 méthodes mais en retour je ne trouve (en mode pas à pas) que le résultat de Val1 !!!

    Comment ca se fait ?

  4. #4
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Est bien un vector s'utilise comme un tableau en lecture, tu trouvera donc tes valeur en fonction de l'index que tu demande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Param[0] //renvoie Val1
    Param[1] //renvoie Val2
    Param[2] //renvoie Val3

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Tu peux utiliser un vecteur dynamique, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    int *Vecteur = new int[Taille] ;
    et le faire retourner par ta fonction.

    Ici il faut remplacer int par l'autre type de données que tu utilise !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Merci beaucoup pour vos réponses.

    J'ai réussi à retourner les valeurs que je voulais.
    Par contre, je n'arrive pas à les réutiliser pour les inscrire dans un fichier.

    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
     
    void Fichier::EcrireCombinaison01 ()
    {
     
     
    	Fonction LesFonctions;
     
    	fprintf (Fichier, "%.2f", LesFonctions.Resultats[0]);
    	fprintf (Fichier, " ");
     
    	fprintf (Fichier, "%.2f", LesFonctions.Resultats[1]);
    	fprintf (Fichier, " ");
     
    	fprintf (Fichier, "%.1f", LesFonctions.Resultats[2]);
    	fprintf (Fichier, " \n");
     
    }
    Lorsque le programme essaie d'effectuer le fprintf, j'ai une erreur et on sort du thread !!!

    Comment dois je faire pour écrire mes valeurs ?

  7. #7
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Salut,
    il nous manque une partit de ton code pour pouvoir t'aider, quel est le type de LesFonctions et de Resultats ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Alors Resultats est déclaré en public dans la classe Fonction : std::vector <float> Resultats;

    Et ma fonction EcrireCombinaison01() est dans une autre unité .

  9. #9
    Expert confirmé

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Par défaut
    Ok, niveau code ca à l'air bon, regarde pendant l'exécution si ton vecteur est bien rempli, tu crash surement car tu essaye d'accéder à un index qui n'existe pas.

    tu peut par exemple ajouter un test en début de ta méthode :
    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
    void Fichier::EcrireCombinaison01 ()
    {
     
     
        Fonction LesFonctions;
     
        if(LesFonctions.Resultats.size() < 3)
             return;
     
        fprintf (Fichier, "%.2f", LesFonctions.Resultats[0]);
        fprintf (Fichier, " ");
     
        fprintf (Fichier, "%.2f", LesFonctions.Resultats[1]);
        fprintf (Fichier, " ");
     
        fprintf (Fichier, "%.1f", LesFonctions.Resultats[2]);
        fprintf (Fichier, " \n");
     
    }

  10. #10
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    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
     
    void Fichier::EcrireCombinaison01 ()
    {
     
     
        Fonction LesFonctions;
     
        if(LesFonctions.Resultats.size() < 3)
             return;
     
        fprintf (Fichier, "%.2f", LesFonctions.Resultats[0]);
        fprintf (Fichier, " ");
     
        fprintf (Fichier, "%.2f", LesFonctions.Resultats[1]);
        fprintf (Fichier, " ");
     
        fprintf (Fichier, "%.1f", LesFonctions.Resultats[2]);
        fprintf (Fichier, " \n");
     
    }
    Premièrement, je te propose d'écrire directement dans un fichier texte. Il y a un exemple dans la FAQ.

    Deuxièmement, je crois qu'il y a une ambiguïté entre le nom de la class "Fichier" et le "Fichier" que tu passe en paramètre dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Fichier::EcrireCombinaison01 ()
    {
     
    ... 
        fprintf (Fichier, "%.2f", LesFonctions.Resultats[0]);
    ...
    Essaye la première solution pour être sûr du résultat, ensuite tu perfectionne.

Discussions similaires

  1. [Débutant] Retourner un vecteur dans une fonction
    Par kheira dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/03/2010, 14h04
  2. comment faire un offset dans une fonction ?
    Par tempo-lyon dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/10/2007, 11h15
  3. Retourner un tableau dans une fonction
    Par oranoutan dans le forum Débuter
    Réponses: 14
    Dernier message: 05/10/2007, 13h39
  4. comment recuperer le resultat dans une fonction
    Par birame dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 11/06/2007, 12h00
  5. Retourné resultat curseur dans une fonction
    Par L8O8L dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/06/2007, 22h09

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