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 :

Manipulation des pointeurs dans les tableaux


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut Manipulation des pointeurs dans les tableaux
    Bonjour,
    je viens vers vous car j'ai besoin d'aide !

    Voila : je fais un exercice qui doit calculer la somme des éléments en-dessous de la diagonale d'un tableau carré et afficher cette somme.
    La consigne est d'utiliser des pointeurs pour effectuer cette tâche.
    Pourriez-vous m'aider car je ne comprends pas pourquoi un de mes pointeurs (pt2) ne ce pointe pas au bon endroit.
    Merci d'avance.

    Voici mon code entier la partie qui pose souci c'est celle à partir de la boucle de calcul

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define NMAX 5
    #define MMAX 5
     
    int main()
    {
       int  tab[NMAX][MMAX];
       int i,j=0,n,m;
       int *ptab,*pt1,*pt2;
       int somme=0;
     
       srand(time(NULL));
     
        do
        {
             printf("entre la dimension de ton tableau carre: \n");
             fflush(stdin);
             scanf("%d",&n);
        }while(n<0||n>20);
     
        m=n;
        ptab=tab[0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                *ptab=rand()%9;
                  ptab++;
            }
        }
        m=n;
        ptab=tab[0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                printf("%d",*ptab);
                ptab++;
            }
            printf("\n");
        }
    //boucle de calcul
       m=n;
       ptab=tab[0];
     
     
       for(i=0;i<n;i++)//colonne
        {
     
            pt1=ptab+i;//parcour les colonnes
     
            pt2=ptab+(i+1)*n;//parcour les lignes fonctionne en partie
          // pt2=ptab+(i+1)*MMAX;//ne fonctionne pas me donne des valeurpointé erronées
     
            for(j=i+1;j<m;j++)//ligne
            {
                somme+=*pt2;
                pt1++;
                pt2=pt2+MMAX;
     
            }
        }
        printf("la somme est de %d",somme);
        return 0;
    }

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Au cours de l'initialisation, puis de l'affichage, tu considères que ce sont les vecteurs lignes qui sont contigüs en mémoire (i.e. ptab + 1 pointe sur l'élément suivant). En revanche, pendant le traitement, tu sembles changer d'avis et adresser les vecteurs lignes comme devraient l'être les vecteurs colonnes : pt2=pt2+MMAX; . D'ailleurs MMAX n'a rien à faire ici, c'est la valeur de m qui t'intéresse.

    Des remarques annexes :

    • tu contrôles la valeur saisie par l'utilisateur mais ce contrôle ne respecte pas la contrainte de taille de tableau maximale que tu as fixé avec tes constantes ;
    • la variable pt1 est inutilisée : tu ne lis jamais son contenu ;
    • on ne flush jamais stdin.

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut merci MATT_HOUSTON
    merci beaucoup pour vos informations je vais regarder à cela.

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 11
    Par défaut CODE résolu
    voilà le code fonctionne merci MATT_HOUSTON pour votre aide.
    Voici le code complet avec les modifications et qui fonctionne.
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    #define NMAX 5
    #define MMAX 5
     
    int main()
    {
       int  tab[NMAX][MMAX];
       int i,j=0,n,m;
       int *ptab,*pt2;
       int somme=0;
     
       srand(time(NULL));
     
        do
        {
             printf("entre la dimension de ton tableau carre: \n");
             scanf("%d",&n);
        }while(n>NMAX);
     
        m=n;
        ptab=tab[0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                *ptab=rand()%9;
                  ptab++;
            }
        }
        m=n;
        ptab=tab[0];
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                printf(" %d ",*ptab);
                ptab++;
            }
            printf("\n");
        }
    //boucle de calcul
       m=n;
       ptab=tab[0];
     
       for(i=0;i<n;i++)//colonne
        {
            pt2=ptab+(i+1)*n+i;//parcours les lignes 
     
            for(j=i+1;j<m;j++)//ligne
            {
                somme+=*pt2;
                pt2=pt2+n;
     
            }
        }
        printf("la somme est de %d",somme);
        return 0;
    }

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

Discussions similaires

  1. Usage des pointeurs dans les fonctions
    Par didou31 dans le forum Débuter
    Réponses: 12
    Dernier message: 22/11/2011, 13h31
  2. Réponses: 1
    Dernier message: 04/10/2009, 11h40
  3. [Tableaux] Manipulation d'entrées dans les tableaux
    Par Phenol dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h53
  4. [Tableaux] URL des pages dans les liens
    Par jlb59 dans le forum Langage
    Réponses: 2
    Dernier message: 14/01/2007, 20h38

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