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 :

[DEBUTANT]Return un tableau de INT


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut [DEBUTANT]Return un tableau de INT
    • je n'arrive pas à trouver le prototypage de la fonction qui renvoit un tableau de INT.

      int* mamethode (void) ne marche pas
      int[] mamethode(void) ne marche pas non plus

    • Il y a aussi autre chose qui me tracasse c'est pour la taille des tableaux, j'aurais voulu spécifier la taille du tableau fonction d'une variable d'entrée; or ont est obligé de définir un tableau à l'aide d'une constante.
      J'imagine qu'il doit bien y avoir une astuce, comment faites vous ?

  2. #2
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    utilise des conteneurs tel que vector ? ou alors si tu veux rester sur des tableaux d'entiers, utilise new.

  3. #3
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    comment ça utiliser new quel type je dois mettre en renvoi de la méthode alors ?

  4. #4
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Je répondais à ton deuxième point, et non à ton premier. Mais pour ce qui est de ton premier point, as-tu essayé int tout simplement ?

  5. #5
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    oui ca donne ceci :

    [C++ Warning] Unit2.cpp(47): W8075 Suspicious pointer conversion
    [C++ Error] Unit2.cpp(47): E2034 Cannot convert 'int *' to 'int'

  6. #6
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Bonjour,
    il faudrait que tu montres ta fonction, car si tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int * taFonction(void)
    {
      int tab[100];
      return tab;
    }
    C'est sûr que ça ne fonctionne pas.

    Pour ta deuxème question, il faut que tu passes un paramètre constant dans ta fonction.

    Je te conseille de consulter la FAQ.

  7. #7
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Je crois avoir compris ce que tu voulais.. Tu veux créer une fonction te permettant de déclarer un tableau d'entier de n élément ? Si tu connais n, tu peut agîr comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int *tableau = new int[n];
    PS: Pourquoi n'utilise tu pas des conteneurs tel que vector ?

    http://c.developpez.com/faq/cpp/?page=STL#STL_container
    http://c.developpez.com/faq/cpp/?page=STL#STL_vector

  8. #8
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    voici le code :
    j'aimerais pour l'instant avant de m'attaquer a un algo de nombre premier.
    Faire un algo qui remplit un tableau de N éléments qui qui le renvois.
    Pour que la fonction qui l'appelle puisse stocker les chiffres dans un fichier.
    Le hic c'est que je n'arrive pas à renvoyez le tableau !

    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
    int Nombre::Premier(int in_chiffre)
    {
        //VAR
    	int i,tab_premier[10000];
        bool premier;
     
        //INIT
        tab_premier[0] = 1;
    	tab_premier[1] = 2;
        tab_premier[2] = 3;
     
        //ALGO remplissage
        for (i=3 ;i<in_chiffre;i++);
        {
    		tab_premier[i] = i;
        }
     
        return tab_premier;
    }

  9. #9
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Et si tu renvoyais un pointeur sur ton tableau plutôt que le tableau lui même ?

  10. #10
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Bon c'est bien ce que je pensais,
    tu crées un tableau dans ta méthode et donc quand tu le renvoies il n'existe plus.
    Pour que ça marche il faut que tu crées un tableau avec new.

    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
    int * Nombre::Premier(int in_chiffre)
    {
        //VAR
    	int i;
        int * tab_premier = new int[10000]; // il faut le desallouer quand tu n'en a plus besoin avec delete [] nomDeVariable
        bool premier;
     
        //INIT
        tab_premier[0] = 1;
    	tab_premier[1] = 2;
        tab_premier[2] = 3;
     
        //ALGO remplissage
        for (i=3 ;i<in_chiffre;i++);
        {
    		tab_premier[i] = i;
        }
     
        return tab_premier;
    }
    Sinon une question :
    A quoi te sert ce tableau ?

  11. #11
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    int * tab_premier = new int[10000]; // il faut le desallouer a la fin du programme avec delete [] nomDeVariable
    Désallouer à la fin du programme n'a pas vraiment d'intérêt.
    Il faut le désallouer quand tu n'en as plus besoin. Et le moyen le plus simple pour ça, c'est d'utiliser du RAII...

  12. #12
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Ah oui loufoque,
    c'est vrai, mais bon pour moi ça veut dire quand il en a plus besoin.

    Mais cette méthode n'est pas très bonne, il vaudrait mieux qu'il passe par un vector.

  13. #13
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    Nous y voila, enfin

  14. #14
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    vector c'est un tableau d'objet ?
    Sinon j'utilise le le tableau pour stocker des nombres que je copie dans un fichier.

    que fait new de plus qu'une simple déclaration de tableau comme je l'avais faite ?

  15. #15
    Membre chevronné Avatar de alceste
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 318
    Par défaut
    http://c.developpez.com/faq/cpp/?page=STL#STL_container
    http://c.developpez.com/faq/cpp/?page=STL#STL_vector



    PS: L'utilisation de new dans le cas présent, permet d'allouer un pointeur comme un tableau d'entier pour ensuite renvoyer ce pointeur vers ton tableau à la fin de la méthode. Ce qui résoud ton problème, car tu n'arrivais pas à renvoyer le tableau lui même.

  16. #16
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Il faut savoir que les variables locales sont allouées sur la pile, et lorsqu'on utilise new c'est sur le tas.
    C'est quoi la différence ?
    Je prends un exemple pour te montrer :
    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
     
    int tableauA[5]; // tableau de 5 entiers alloué sur la pile
     
    int * maFonctionPile()
    {
      int i; // cree un entier alloué sur la pile
      int tableauB[10]; // cree un tableau de 10 entiers alloué sur la pile
      return tableauB;
    } // le tableauB est depilé (donc désalloué/détruit), puis i est depilé
     
     
    int * maFonctionTas()
    {
      int * tableauB; // crée un pointeur d'entier sur la pile
      tableauB = new int[10]; // cree un tableau de 10 entiers alloué sur le tas
      return tableauB;
    } // le pointeur d'entier est dépilé, mais pas ce sur quoi il pointe !!
     
     
    int main()
    {
      int * pTab;
      pTab = maFonctionPile(); // pointe sur nimporte quoi car tableauB est detruit a la fin de la fonction
     
      pTab = maFonctionTas(); // ok, mais je dois le supprimer quand je ne l'utilise plus
     
      delete [] pTab; // on desalloue
     
      return 0;
    } // le tableauA est dépilé

  17. #17
    Membre averti
    Inscrit en
    Mai 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 33
    Par défaut
    merci pour tes lumières,
    mais je ne comprends pas ce que tu mets derrière le mot TAS quelle est la différence avec la PILE, je connaissais la PILE la FILE mais TAS je ne sais pas ce que c'est.

  18. #18
    Membre confirmé Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Par défaut
    Uh, en fait la pile c'est une zone mémoire dans ton ordinateur, et le tas c'est aussi une zone mémoire dans ton ordinateur sauf qu'elle est dynamique.

    Voir l'article de Wikipedia Allocation memoire.

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

Discussions similaires

  1. [Debutant] conversion de char en int
    Par Marc_3 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2011, 12h02
  2. aide manipulation tableau de int
    Par capone dans le forum C++
    Réponses: 4
    Dernier message: 30/01/2006, 11h55
  3. [TP] [Débutant] Afficher un tableau en mode graphique
    Par xiungung dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 13/01/2006, 22h13
  4. [Debutant][XSLT] sortie tableau
    Par bejnat dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/07/2005, 15h57
  5. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42

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