Programmation en C++, probleme tableau
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Programmation en C++, probleme tableau



  1. #1
    invite2e3f4e14

    Programmation en C++, probleme tableau


    ------

    Bonjour,
    j'ai un petit soucis de programmation, mon but est de programmer une fonction qui lorsqu'on lui donne un tableau et une donnée renvoie un tableau voila ce que j'ai fait :

    /****************************** ******************************/
    /* Déterminer la vitesse */
    /****************************** ******************************/
    long determine_vitesse (int a,short deltaT) //a tableau avec [vitesse; nb_front; nb_front_prec]
    {
    long p[20];

    p[0]=a[1]-a[2]; // différence entre le nombre de fronts actuel et le nombre de front de la dernière mesure
    p[0]=p[0]/(1000*deltaT); // résolution de 1000 fronts par tour, pendant le temps deltaT
    p[0]=p[0]*2*3,14*rayon;

    p[2]=a[2]; // on enregistre le nombre de front du calcul en nb_front_prec
    return p;
    }

    et il m'affiche cette erreur : Error [1129] [] operator requires a pointer and an integer as operands et ca :Warning [2054] suspicious pointer conversion
    Je suis tr_s novice en programmation, merci de m'aider

    -----

  2. #2
    invited8c72a90

    Re : Programmation en C++, probleme tableau

    Salut,

    il me semble me souvenir qu'on ne peut pas retourner un tableau en C.

    ce qu'on peut faire en revanche, c'est fournir en paramètre de la fonction un pointeur vers un tableau destiné à recevoir les valeurs que tu veux retourner. on appelle ça un paramètre en sortie, tu peux sans doute trouver des explications plus précises sur google.

    bonne journée

  3. #3
    invitec1cd705e

    Re : Programmation en C++, probleme tableau

    Salut

    -Utilise la balise CODE
    -Il y a une section programmation
    -Si ta variable 'a' est un tableau, pourquoi tu le passe en int a? passe le par un pointeur, ou bien directement un tableau
    -Pourquoi p est un tableau de 20 si tu écrit seulement à l'indice 0 et 2?
    -C'est pour quel micro?

  4. #4
    invite89303051

    Re : Programmation en C++, probleme tableau

    Bonjour,
    C'est normal, ton paramètre a est déclaré comme un int, par comme un tableau d'int.
    Ensuite, selon ton environnement, fait attention à tes conversions, ton short deltaT * 1000, c'est quoi comme type ?

    Cordialement

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : Programmation en C++, probleme tableau

    Citation Envoyé par emic21 Voir le message
    Bonjour,
    j'ai un petit soucis de programmation, mon but est de programmer une fonction qui lorsqu'on lui donne un tableau et une donnée renvoie un tableau voila ce que j'ai fait :

    /****************************** ******************************/
    /* Déterminer la vitesse */
    /****************************** ******************************/
    long determine_vitesse (int a,short deltaT) //a tableau avec [vitesse; nb_front; nb_front_prec]
    {
    long p[20];

    p[0]=a[1]-a[2]; // différence entre le nombre de fronts actuel et le nombre de front de la dernière mesure
    p[0]=p[0]/(1000*deltaT); // résolution de 1000 fronts par tour, pendant le temps deltaT
    p[0]=p[0]*2*3,14*rayon;

    p[2]=a[2]; // on enregistre le nombre de front du calcul en nb_front_prec
    return p;
    }

    et il m'affiche cette erreur : Error [1129] [] operator requires a pointer and an integer as operands et ca :Warning [2054] suspicious pointer conversion
    Je suis tr_s novice en programmation, merci de m'aider
    Hello,

    Pourquoi C++ ? Est-ce un contrainte dont tu ne peux te défaire ?

  7. #6
    Jack
    Modérateur

    Re : Programmation en C++, probleme tableau

    Déplacement dans le forum info / langages

  8. #7
    Jack
    Modérateur

    Re : Programmation en C++, probleme tableau

    ton short deltaT * 1000, c'est quoi comme type ?
    Un short est un short int, donc un entier court codé sur 16 bits.

    Pour le reste, je confirme: il faut récupérer un pointeur sur le tableau.

    A+

  9. #8
    invite895675d5

    Re : Programmation en C++, probleme tableau

    On ne peut pas retourner de tableau en C. Mais tu peux pour contourner le problème :
    - Soit tu utilises un allocation dynamique dans ta fonction (ne pas oublier alors de libérer la mémoire allouée dynamiquement).
    - Soit tu passe le tableau en paramètres.

    La seconde est surement la plus simple à mettre en place pour un débutant.

    Maintenant quelques remarques sur ton code :
    p[0]=p[0]/(1000*deltaT);
    Fais attention aux conversions implicite, là ça doit passer mais c'est très limite. Tu multiplies un int avec un short tu divise le tout avec un long et tu affectes ça dans un long. Heureusement qu'il n'y a pas de float dans le lot...
    p[0]=p[0]*2*3,14*rayon;
    Rayon n'est pas déclaré (variable globale ?).
    3,14 : cette syntaxe n'existe pas en C un float s'écrit 3.14.
    Là on retrouve le problème que je t'évoquais plus tôt : tu multiplies des entier et des floats et tu affectes ça dans un long. Si ça compile (ça dépend des options de ton compilateur), tu perdras de toute façon des données.

  10. #9
    Jack
    Modérateur

    Re : Programmation en C++, probleme tableau

    On ne peut pas retourner de tableau en C
    C'est vrai, mais il y a une astuce si on doit absolument passer un tableau en paramètre ou en valeur de retour:
    il suffit de l'encapsuler dans une structure.
    D'une manière générale c'est peu recommandable en raison de la place consommée, mais ça peut servir si on a besoin de faire dynamiquement une copie locale.

    A+

  11. #10
    invite895675d5

    Re : Programmation en C++, probleme tableau

    Citation Envoyé par Jack Voir le message
    C'est vrai, mais il y a une astuce si on doit absolument passer un tableau en paramètre ou en valeur de retour:
    il suffit de l'encapsuler dans une structure.
    D'une manière générale c'est peu recommandable en raison de la place consommée, mais ça peut servir si on a besoin de faire dynamiquement une copie locale.

    A+
    Le problème n'est pas le passage en paramètre (là pas de soucis et pas besoin d'astuces, il suffit de déclarer un pointeur à la fonction et de passer la taille du tableau si elle n'est pas fixe) mais pour le passer en valeur de retour, là par contre il faut utiliser soit la technique de la structure (comme tu l'as dit) soit l'allocation dynamique.

  12. #11
    Jack
    Modérateur

    Re : Programmation en C++, probleme tableau

    Le problème n'est pas le passage en paramètre (là pas de soucis et pas besoin d'astuces, il suffit de déclarer un pointeur à la fonction et de passer la taille du tableau si elle n'est pas fixe)
    sauf si tu veux travailler sur une copie du tableau afin de ne pas altérer l'original.

    A+

  13. #12
    invite895675d5

    Re : Programmation en C++, probleme tableau

    Dans ce cas tu passes un pointeur de pointeur (si la fonction est suceptible de modifier le tableau et pas seulement son contenu) ou tu fais une recopie en locale dans ta fonction.

  14. #13
    Jack
    Modérateur

    Re : Programmation en C++, probleme tableau

    Oui, ça revient au même. C'est ce que je disais plus haut, l'encapsulation évite juste d'avoir à écrire le code de recopie => une source d'erreur en moins.

    A+

Discussions similaires

  1. [HTML] Problème de tableau !
    Par invite2ed2e5e9 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/12/2009, 18h38
  2. Problème tableau de variations ?
    Par invite7889589c dans le forum Mathématiques du collège et du lycée
    Réponses: 4
    Dernier message: 07/06/2009, 19h25
  3. urgent (programmation de tri de tableau)
    Par invitee2f3230c dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 25/02/2009, 01h18
  4. Probleme tableau d'avancement
    Par invitefcc9c7d8 dans le forum Chimie
    Réponses: 4
    Dernier message: 04/12/2008, 22h30
  5. probléme de tableau d'avancement
    Par invite4ee02fe3 dans le forum Chimie
    Réponses: 4
    Dernier message: 18/11/2008, 20h03