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 :

Affichage d'un tableau ( en plus compliqué )


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut Affichage d'un tableau ( en plus compliqué )
    Bonjour,
    Je suis arrivé au chapitre 10 et j'ai ( presque ) réussi le 1er exo.
    Pourquoi presque ? Ce que je fais me parait cohérent mais la sortie l'est un peu moins

    Je vous donne l'énoncé ;

    Créez une fonction avec une variable statique qui est un pointeur (avec un argument par défaut à zéro).
    Quand l'appelant fournit une valeur pour cet argument, elle est utilisée pour pointer au début d'un tableau de
    int. Si vous appelez la fonction avec un argument à zéro (utilisant l'argument par défaut), la fonction retourne
    la prochaine valeur dans le tableau, jusqu'à ce qu'il voit une valeur “-1” dans le tableau (pour agir comme
    indicateur de fin de tableau). Testez cette fonction dans le main( ).
    La fonction est nommée "fonction", le pointeur statique est "point2" et le pointeur qui me sert d'argument est "point"

    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
    #include <iostream>
     
    using namespace std;
     
    // #1
     
     
     
    void fonction( int* point = 0 ){
        static int* point2;
     
        if ( point == 0 ){
            for (int i = 0 ; (*point2) != -1 ;i++ ){
                point2 += i;
                cout << *point2 << endl;
            }
        } else {
            point2 = point;
            cout << "tableau charge : " << point2 << endl;
        }
    }
     
    int main(){
        int tab[5] = { 42 , 7 , 5 , -8 , -1};
        int taab[6] = { 83 , 83 , -83 , -1 , 42};
     
        fonction(&tab[0]);
        fonction();
     
        fonction (&taab[0]);
        fonction ();
     
        return(0);
    }

    Merci d'avance pour vos critiques


    Edit : Je crois que je me fais avoir sur la taille du pointeur

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    Bonjour,

    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
    #include <iostream>
     
    using namespace std;
     
    // #1
     
     
     
    void fonction( int* point = 0 ){
        static int* point2;
     
        if ( point == 0 ){
            for (int i = 0 ; (*point2) != -1 ;i++ ){
                point2 += 1; // Avec "+= i", tu faisais +1, +2, +3, +4 au lieu de juste faire +1
                cout << *point2 << endl;
            }
        } else {
            point2 = point;
            cout << "tableau charge : " << *point2 << endl; // Oubli du '*' (erreur que tu n'as pas fait juste au-dessus)
        }
    }
     
    int main(){
        int tab[5] = { 42 , 7 , 5 , -8 , -1};
        int taab[6] = { 83 , 83 , -83 , -1 , 42};
     
        fonction(&tab[0]);
        fonction();
     
        fonction (&taab[0]);
        fonction ();
     
        return(0);
    }
    Voilà Testé et vérifié.

  3. #3
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,

    Un bon compilateur te dirait qu'une des variables est susceptible d'être utilisée alors qu'elle n'est pas initialisée.
    Pas bon du tout…

    Que se passe-t-il si la première fois que l'on appelle cette fonction on ne lui passe pas d'argument ou un argument NULL ?
    Ou si on le fait après la découverte de la valeur « -1 » ?


    la fonction retourne la prochaine valeur dans le tableau
    Cette fonction n'est censée sortir qu'une seule valeur à la fois.

    la fonction retourne la prochaine valeur dans le tableau
    Visiblement, cette fonction est censée retourner une valeur.
    Jusqu'à preuve du contraire, « void » indique qu'une fonction ne retourne rien.

    Sinon, deux petites remarques.
    Lorsque l'on déclare et initialise un tableau en même temps, on n'est pas obligé de spécifier sa taille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int tab[] = { 42 , 7 , 5 , -8 , -1}; // Ça suffit

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 62
    Par défaut
    Comment j'ai fait pour rester sur mon "i" alors que je pensais +1 ( j'ai relu plus de 10 fois cette ligne ).
    L'* n'était pas un oubli et me servait à repérer le tableau par son adresse et non par sa première valeur.

    Il est clair qu'il manque des structures de contrôle, j'ai pensé à ces éventuels problèmes mais mon soucis principal restait de faire fonctionner ce machin.
    Le second fait est que je me suis trompé lors de la lecture de l'énoncé
    Pas grave, je l'aurais fait de 2 façon différentes.

    A propos des 2 remarques : c'est vrai que je m'embête avec des formules plus longues que nécessaire ...

    Merci à vous deux, je posterai le code final et cocherai résolu en même temps .

    PS : Est ce qu'il est possible d'afficher le nom d'une variable pointée à l'utilisateur ? J'aimerais avoir une sortie du style : " Tableau chargé : tab " et non l'adresse en hexadécimal ( l'adresse me sert de repère mais ce serait plus simple un nom qu'un nombre en hexa )

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Avril 2010
    Messages : 66
    Par défaut
    A moins que ce ne soit une nouveauté en C++ dont je n'ai pas entendu parler (je débute en C++), je ne crois pas que ce soit possible et Google semble me le confirmer (ou alors mauvaise recherche...).

  6. #6
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Un nom de variable n'est visible que dans ton code, c'est un "alias", le compilateur va justement transformer tout ça en adresses hexadécimales. Si tu as besoin de voir ce genre d'informations, c'est possible en utilisant un debugger et en compilant l'option autorisant le debuggage (-g pour gcc).

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

Discussions similaires

  1. Prob d'affichage d'un tableau resultant d'u...
    Par Yohips dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 08/12/2004, 17h23
  2. [XSLT] Affichage dans 2 colonnes ou plus ?
    Par stebar dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 05/08/2004, 09h07
  3. [MFC] Affichage d'un tableau
    Par SethPech dans le forum MFC
    Réponses: 7
    Dernier message: 23/02/2004, 15h48
  4. Voyageur de commerce, mais en plus compliqué
    Par Krispy dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 16/02/2004, 08h44
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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