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 :

C++ - Pointeurs Tableau


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut C++ - Pointeurs Tableau
    Ecrire un programme qui lit un entier X et un tableau A du type int au clavier et élimine toutes les occurrences de X dans A en tassant les éléments restants. Le programme utilisera les pointeurs P1 et P2 pour parcourir le tableau.

    J'ai pas compris la partie du code en rouge. On a deux pointeurs p1 et p2 qui pointent au tableau A. Comment je suis en train d'eliminer les occurrences du tableau?? Je vois que p2 pointe uniquement sur les elements distincts. Je n'ai pas tres bien assimilie le deplacement des pointeurs et la relation entre p1 et p2.


    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
    void main(){
        char test[10];
        int A[10],*p1,*p2,x,n;
        cout<<"Donnez la dimension du tableau: ";
        cin>>n;
        for(p1=A;p1<A+n;p1++){
            cout<<"Donner un element: ";
            cin>>*p1;
        }
        cout<<"Donner l'element a eliminer: ";
        cin>>x;
     /* Effacer toutes les occurrences de X et comprimer :  */
     /* Copier tous les éléments de P1 vers P2 et augmenter */
     /* P2 pour tous les éléments différents de X.          */
    
        for(p1=p2=A;p1<A+n;p1++){
            if(*p1!=x){
                *p2=*p1;
                p2++;
            }
        }
      /* Nouvelle dimension de A */
         n=p2-A;
         cout<<"n "<<n<<" p2: "<<p2<<" A "<<A;
        for(p1=A;p1<A+n;p1++)
            cout<<*p1<<" ";
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le principe de base est de lire les données saisies dans le tableau d'origine, et de les recopier dans le tableau de destination en sautant la valeur à ignorée. Mais comme on sait que la lecture sera toujours en avance sur l'écriture (on ne fait qu'enlever les éléments), l'astuce est d'avoir les 2 tableaux source et destination en un seul : P2 représente l'endroit où l'on doit écrire, et P1 celui où l'on doit lire.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut
    oui, P2 représente l'endroit où l'on doit écrire, et P1 celui où l'on doit lire.
    Mais dans la derniere partie du code, on affiche le nouveau tableau en utilisant le pointeur p1.

    J'ai compris que p2 pointe vers le tableau destination. Mais p1 pointe-t-il aussi a ce nouveau tableau et comment?

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Dans la partie initialisation du for à la fin, on fait pointer P1 au début du tableau, qui est désormais le tableau épuré.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    218
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 218
    Par défaut
    aha. Si j'ai bien assimile ce truc alors nous avons copie tous les éléments de P1 vers P2 et comme P2 pointe vers A et p1=p2 donc p1 pointe a ce que p2 pointe donc au tableau de destination, right ?

Discussions similaires

  1. Pointeur tableau 2 dimensions
    Par rtg57 dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/05/2007, 19h30
  2. pointeur & tableau
    Par laurent933 dans le forum C
    Réponses: 10
    Dernier message: 10/04/2007, 00h56
  3. Pointeur, tableau et chaines de caractères.
    Par rouliane dans le forum C++
    Réponses: 8
    Dernier message: 19/12/2006, 20h27
  4. [Prob] classe + pointeur + tableau :x
    Par Saturnin123 dans le forum C++
    Réponses: 4
    Dernier message: 12/07/2006, 14h41
  5. Pb pointeur tableau struct
    Par difficiledetrouver1pseudo dans le forum C
    Réponses: 12
    Dernier message: 02/05/2006, 15h48

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