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 :

Pointeurs et tableaux à deux dimensions


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut Pointeurs et tableaux à deux dimensions
    Hello!
    Voilà un bon moment que je me casse la tête sur ce mini code en C.
    Malgré les astuces sur les pointeurs et le passage par paramètre de tableaux, je peine toujours à faire fonctionner ce code.
    Si quelqu'un avait une tite idée, voyait une erreur immense qui m'a échappé... Je n'ai tout simplement aucun truc affiché dans la console et aucune erreur selon le compilateur...
    Merci!

    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
     
    /*Ecrivez un programme qui additionne les deux matrices suivantes :
    A={(1,2),(0,1),(2,2)}, B={(1,2),(1,4),(3,4)}
    */
     
    #include <stdio.h>
     
    //Matrices de [3][2] uniquement!
    //Passages des matrices A et B en pointeurs prend - de place!
    //pointeur resultat est pris pr etre modifie direct. Sinon besoin d'un return.
    void addition(int *pointeurA, int *pointeurB, int *pointeurRes){
     
        int i;
        for(i=0; i<12; i+4){
            int j;
            for(j=0; j<2; j++){
                //Soit i le deplacement d'une adresse a l'autre (4 pour un int)
                (pointeurRes+i)[j]=((pointeurA+i)[j])+((pointeurB+i)[j]);
            }
        }
    }
     
    int main(){
     
        int matriceA[3][2]={{1,2},{0,1},{2,2}};
        //Pointeur vers les 1er element du tableau de 3 (soit, un premier couple de valeurs(d'ou le nombre 2 de sous elements))
        int (*ptrA)[2]=matriceA;
        int matriceB[3][2]={{1,2},{1,4},{3,4}};
        int (*ptrB)[2]=matriceB;
        int matriceResultat[3][2];
        int (*ptrRes)[2]= matriceResultat;
     
        addition(*ptrA, *ptrB, *ptrRes);
     
        printf("A+B=\n");
        int i;
        for (i=0; i<3; i++){
            printf("\n");
            int j;
            for (j=0; j<2; j++) {printf("%6d", (matriceResultat)[i][j]);}
        }
        return 0;
    }

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    Soit i le deplacement d'une adresse a l'autre (4 pour un int)
    Quand tu ajoute une unité à un pointeur il va étre ajouté en fait la taille de son type.
    regarde un cours sur l'aritmethique des pointeurs.

    il faut que le type valeurs que tu transmets à la fonction coresponde au type des paramètres de ta fonction soit dans ton cas des int(*)[2]

    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
    void addition(int(*pointeurA)[2], int (*pointeurB)[2], int (*pointeurRes)[2]){
     
        int i;
        for(i=0; i<3; i++){
            int j;
            for(j=0; j<2; j++){
                pointeurRes[i][j]= pointeurA[i][j]+pointeurB[i][j];
            }
        }
    }
     
    int main(){
        int i;
     
        int matriceA[3][2]={{1,2},{0,1},{2,2}};
        int matriceB[3][2]={{1,2},{1,4},{3,4}};
     
        int matriceResultat[3][2];
     
        addition(matriceA, matriceB, matriceResultat);
     
        printf("A+B=\n");
     
        for (i=0; i<3; i++){
            int j;
            printf("\n");
            for (j=0; j<2; j++) {
                     printf("%6d", matriceResultat[i][j]);
            }
        }
        return 0;
    }

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 4
    Par défaut
    Pourquoi faire simple quand on peut faire compliquer!
    Merci!

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

Discussions similaires

  1. Pointeurs et tableaux à deux dimensions
    Par Patrice.H dans le forum Débuter
    Réponses: 2
    Dernier message: 27/05/2010, 12h08
  2. decalaration dynamique tableaux deux dimensions et TRI
    Par Alex35 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/12/2007, 13h48
  3. [Problème]Tableaux deux dimensions
    Par maloute80 dans le forum Langage
    Réponses: 4
    Dernier message: 14/12/2007, 14h31
  4. [Tableaux] Gerer des tableaux à deux dimensions
    Par FrankOVD dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 15h20

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