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 appeler cette fonction array


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Décembre 2011
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9
    Par défaut comment appeler cette fonction array
    Bonjour,

    j'ai une fonction qui retourne un array comment puis je l'appeler pour récupérer le résultat ?
    comment déclarer la variable *len ?

    je suis nouveau sous c++ builder xe2
    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
     
    /**
     * Converts pitch, roll, and heave to lengths a, b, and c
     * @return 0 if OK, non-zero if failure.
     * @param pitch the pitch angle
     * @param roll the roll angle
     * @param heave the distance off the floor to the center of the platform
     * @param len an array of three floats that will store the lengths of the cables.
     */
    __fastcall TFormJoystick::IKinetics(float pitch,float roll,float heave,float *len)
     {
    	if(abs(pitch)>PI/2) return 1;
    	if(abs(roll)>PI/2) return 2;
     
    	CPoint p[3];
    	int i;
     
    	for(i=0;i<3;++i) {
    		// Find the roll component
    		// We do this first so that when we calculate the pitch the roll
    		// will still be relative to the platform, rather than the world.
    		p[i].x=platform[i].x;
    		p[i].y=platform[i].y * cos(roll) + platform[i].z * -sin(roll);
    		p[i].z=platform[i].y * sin(roll) + platform[i].z *  cos(roll);
     
    		// Find the pitch component
    		p[i].x=platform[i].x * cos(pitch) + platform[i].z * -sin(pitch);
    		p[i].z=platform[i].x * sin(pitch) + platform[i].z *  cos(pitch);
     
    		// Find the heave component
    		p[i].z+=heave;
    		if(p[i].z<0) return 3+i;
    		if(p[i].z>WINCH_HEIGHT) return 6+i;
     
    		// Get the lengths
    		float x = p[i].x - base[i].x;
    		float y = p[i].y - base[i].y;
    		float z = p[i].z - base[i].z;
    		len[i] = sqrt(x*x + y*y + z*z);
    	}
     
    	return 0;
    }
     
     
    // --------------------------------------------------------------------------
    merci de votre aide car je n'ai jamais été face a ce problème et mes tests sont pas concluants

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 080
    Par défaut
    float *len peut effectivement renvoyer un tableau de float mais c'est du basique C !
    Ton code semble correct len[] va manipuler le pointeur comme un tableau

    côté appelant, tu as trois possibilités

    Façon C (ne faisant du c++ que depuis 1 an et demi, je n'ai jamais utilisé cela, j'espère ne pas me tromper) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float *tab = (float *) malloc(3 * sizeof(float)); 
    IKinetics(1.0, 2.0, 3.0, tab);
    free(tab);
    Façon C++ dynamique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    float *tab = new float[3];
    IKinetics(1.0, 2.0, 3.0, tab);
    delete [] tab;
    Façon C allocation statique;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float tab[3];
    IKinetics(1.0, 2.0, 3.0, tab); // je ne crois pas que & soit nécessaire

    En C++, il existe les conteneur STL comme vector<float>
    En C++Builder, il existe un autre type à la syntaxe plus proche du tableau le TDoubleDynArray

    Faudrait que tu lises un peu plus les cours et les liens indiqué par Bien débuter en C++
    Puis quand tu maitriseras les bases du C et C++, tu pourras t'attaquer aux spécificités de C++ Builder

    IKinetics, comme nom de fonction c'est un peu ambigu, en lisant le code, je m'attends à une interface IKinetics et non à une fonction !

    C++Builder n'est pas forcément le meilleur outil pour débuter le C++, il offre tellement de possibilité entre la RTL C, la RTL Delphi, la STL C++, la VCL Delphi ... qu'il peut être difficile de savoir quoi utiliser à quel moment !

    Si tu veux apprendre le C++ en général, Notepad + GCC sera plus formateur
    Si tu veux apprendre C++Builder uniquement, il te faut donc privilégier systématiquement les fonctions Delphi décrite dans Référence des bibliothèques FMX-VCL-RTL
    La VCL Delphi est le principal intérêt de C++Builder, ne pas l'utiliser serait comme rouler à 50 avec une Ferrari !

    Pense que C++Builder dépend de Delphi même la structure des classes C++Builder héritant de TObject comme la TForm suivent les normes d'héritage de Delphi et non celui du C++ ce qui change énormément la gestion des constructeurs et des méthodes virtuelles...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Comment lancer cette fonction sur un bouton ?
    Par jeronimo dans le forum Access
    Réponses: 2
    Dernier message: 26/01/2006, 11h33
  2. Réponses: 6
    Dernier message: 30/09/2005, 00h53
  3. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 13/09/2005, 12h21
  4. comment appeler une fonction JAVA en JAVASCRIPT ?
    Par heleneh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/09/2005, 12h04
  5. Comment appeler une fonction JavaScript depuis Delphi ?
    Par Alfred12 dans le forum Web & réseau
    Réponses: 4
    Dernier message: 17/06/2005, 18h15

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