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 :

probleme programme C


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut probleme programme C
    bonjour,
    j'ai un problème avec ce programme, je voudrais remplir une matrice et l'afficher.
    est-ce que quelqu'un pourrait corriger ce code pour qu'il fonctionne, svp ?
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int a, b;
    int i,j;     
     
    int remplir_mat(int *l, int *c)
    {
         int **mat;
         for(i=0;i<*l;i++)
         {for(j=0;j<*c;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
         return mat;
    }
     
    void affiche_mat(int **mat, int l, int c)
    {
     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("%d ", &mat[i][j]);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int mat[10][10];
        N=2;
        M=2;
         printf("%d %d", a, b);
        remplir_mat(&a, &b);
        affiche_mat(mat, a, b);
    }

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par space_56 Voir le message
    j'ai un problème avec ce programme, je voudrais remplir une matrice et l'afficher.
    Beaucoup de fautes dans ce code... Tu devrais déjà revoir comment on passe un tableau à 2 dimensions à une fonction :

    http://emmanuel-delahaye.developpez.....htm#param_tab

    est-ce que quelqu'un pourrait corriger ce code pour qu'il fonctionne, svp ?
    Euh, non. Ca, c'est ton boulot... Commence par supprimer ces globales inutiles et par bien configurer ton compilateur :

    http://emmanuel-delahaye.developpez....tm#cfg_compilo

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    tu peux me dire où sont les erreurs de ligne, stp ?
    dans ce code les tableaux sont-ils bien transmis ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par space_56 Voir le message
    tu peux me dire où sont les erreurs de ligne, stp ?
    dans ce code les tableaux sont-ils bien transmis ?
    Tu ne vois pas que int **mat n'a aucun sens ici ? Il faut utiliser ce que j'ai indiqué, c'est à dire int mat[10][10] ou int mat[][10] et ne pas oublier de passer les dimensions aux fonctions.

  5. #5
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Je m'étais amusé à gérer des matrices avec un programme c. On m'avait aidé sur HFR. Je peux toujours poster le code auquel j'étais arrivé, ça pourra toujours aider. Mais je sais pas si c'est dans l'esprit du forum. Donc si ça peut t'aider space_56

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    je ne comprends pas, ça ne marche toujours pas.

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int N, M;
    int i,j;     
     
    int remplir_matrice(int *l, int *c)
    {
         int mat[10][10];
         /*scanf("%d %d", l, c);
         printf("%d %d", *l, *c);*/
         //mat = (int**) malloc((*l) * sizeof(int*)); 
         for(i=0;i<*l;i++)
         {for(j=0;j<*c;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
         return mat;
    }
     
    void affiche_mat(int mat[][], int l, int c)
    {
     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("%d ", 1);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int mat[10][10];
        N=2;
        M=2;
        printf("%d %d", N, M);
        remplir_matrice(&N, &M);
        affiche_mat(mat, N, M);
    }

  7. #7
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Pourquoi tu déclares tes variables N,M,i,j en globale? Surtout i, j c'est bizzare.

    Ta fonction remplir_matrice doit renvoyer un int alors que tu renvoies un pointeur mat. Il faut donc rajouter un *après le int du prototype de ta fonction pour lui indiquer qu'elle doit renvoyer un pointeur vers un int et non pas un int.

    Pourquoi tu passes tes paramètres (N,M) par pointeurs?

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par space_56 Voir le message
    je ne comprends pas, ça ne marche toujours pas.
    Parce que tu codes au hasard. Premièrement, tu devrais enlever tes globales. Puis, dans ta fonction remplir_matrice(), mat est tableau de 10 tableaux de 10 ints (ou plus simplement dit une matrice de 10 x 10 ints). Tu ne peux pas retourner mat comme ça, et pour deux raisons.

    1. Le type de retour est faux! Ce n'est pas int, mais un pointeur sur un tableau de 10 ints. Ce qui nous donnerait le prototype suivant:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
       
      int (*(remplir_matrice(int *l, int *c)))[10];
      cryptique, non?
    2. mat est un tableau local à ta fonction. La mémoire allouée est libérée dès la sortie de la fonction. Ainsi, l'adresse retournée par la fonction devient aussitôt invalide.


    De plus, le prototype de affiche_mat() doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void affiche_mat(int mat[][10], int l, int c);
    où mat est de type pointeur sur tableau de 10 ints.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Citation Envoyé par Thierry Chappuis Voir le message
    De plus, le prototype de affiche_mat() doit être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void affiche_mat(int mat[][10], int l, int c);
    où mat est de type pointeur sur tableau de 10 ints.
    C'est obligatoire d'écrire mat[][10] dans le prototype? Il me semble que non?

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    C'est obligatoire d'écrire mat[][10] dans le prototype? Il me semble que non?
    Dans ce cas là (tableau statique), oui.

    http://emmanuel-delahaye.developpez.....htm#param_tab

  11. #11
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Dans ce cas là (tableau statique), oui.

    http://emmanuel-delahaye.developpez.....htm#param_tab
    Dans ce cas statique on peut passer mat[] (ou *mat) en paramètre?

    D'ailleurs je sais pas si c'est moi, mais je trouve la formulation confuse ici:
    Pour définir un paramètre de type pointeur sur un tableau à 2 dimensions, on serait tenté d'écrire type p[][], ce qui est une erreur de syntaxe. En effet, la notation [] est une notation abrégée de [TAILLE] point ou point virgule? dans les cas où cette taille est ignorée par le compilateur, c'est à dire lorsque la dimension concernée est la plus à gauche.
    On pourrait penser que la notation [] est interprété comme [TAILLE] quand la taille est ignorée par le compilot.

    Encore une fois très utile ce site!

  12. #12
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Ta fonction remplir_matrice doit renvoyer un int alors que tu renvoies un pointeur mat. Il faut donc rajouter un *après le int du prototype de ta fonction pour lui indiquer qu'elle doit renvoyer un pointeur vers un int et non pas un int.
    Non, si le PO veut renvoyer mat, le type de retour devra être un pointeur sur tableau de 10 ints, comme mentionné plus haut. Mais la mémoire pour mat devra être allouée dynamiquement (entre autres possibilités).

    Voici un code corrigé:

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #include <stdio.h>
    #include <stdlib.h>
     
    #define MAT_NB_LIGNES 3
    #define MAT_NB_COLS 4
     
    void clean(void)
    {
        int c;
     
        while ((c =getc(stdin)) != '\n' && c != EOF)
        {
        }
    }
     
    /* -tc- la fonction appelante alloue la mémoire pour la matrice et passe son 
        adresse en arguments. */
    void remplir_matrice(int mat[][MAT_NB_COLS], int l, int c)
    {
        /* -tc- validation des arguments */
        if (mat != NULL && l > 0 && c > 0)
        {
            /* -tc- les indices de boucles peuvent être locaux a la fonction */
            int i, j;
            int rv;
     
            for (i = 0; i < l; i++)
            {
                for (j = 0; j < c; j++)
                {
                    /* -tc- saisie securisee d'un entier */
                    do
                    {
                        printf("ligne %d, colonne %d : ", i+1, j+1);
                        /* -tc- forcer l'affichage de l'invite avec fflush() */
                        fflush(stdout);
                        /* -tc- il est deconseille d'utiliser scanf() pour toute saisie
                            non formatee. Toutefois, si on desires vraiment l'utiliser,
                            il faut au minimum tester sa valeur de retour et faire le
                            menage apres utilisation. */
                        rv = scanf("%d", &mat[i][j]);
                        clean();
                    }
                    while (rv != 1);
                }
            }
        }
    }
     
    void affiche_mat(int mat[][MAT_NB_COLS], int l, int c)
    {
        if (mat != NULL && l > 0 && c > 0)
        {
            /* -tc- ne pas definir lkes indices de boucle en global */
            int i, j;
     
            for (i = 0; i < l; i++)
            {
                for (j = 0; j < c; j++)
                {
                    printf("%3d ", mat[i][j]);
                }
                printf("\n");
            }
        }
    }
     
    int main(void)
    {
        int mat[MAT_NB_LIGNES][MAT_NB_COLS] = {{0}};
     
        printf("Matrice %d x %d\n", MAT_NB_LIGNES, MAT_NB_COLS);
        remplir_matrice(mat, MAT_NB_LIGNES, MAT_NB_COLS);
     
        affiche_mat(mat, MAT_NB_LIGNES, MAT_NB_COLS);
     
        /* -tc- main() doit retourner , EXIT_SUCCESS ou EXIT_FAILURE */
        return 0;
    }
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  13. #13
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Dans ce cas statique on peut passer mat[] (ou *mat) en paramètre?
    Bah non. Il y a 2 dimensions... C'est théoriquement
    On peut néanmoins omettre la taille de gauche, car elle n'entre pas dans le calcul :
    D'ailleurs je sais pas si c'est moi, mais je trouve la formulation confuse ici:
    C'est possible... En fait non. C'est bien la suite de la phrase.
    On pourrait penser que la notation [] est interprété comme [TAILLE] quand la taille est ignorée par le compilot.
    J'ai écrit ça ? Ben c'est correct.

  14. #14
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Dans ce cas statique on peut passer mat[] (ou *mat) en paramètre?
    Si mat était un simple tableau à une dimension, oui! Pour un tableau à dimensions, on doit utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void ma_fonction(int mat[][NB_COLONNES], size_t lignes);
    qui est strictement équivalent à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ma_fonction(int (*mat)[NB_COLONNES], size_t lignes);
    Comme pour les tableau à une dimension, tu utilises un pointeur sur le premier élément du tableau. Dans notre cas, le premier élément du tableau est un lui-même un tableau.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  15. #15
    Membre confirmé
    Avatar de Nykoo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 234
    Par défaut
    Ah je viens de comprendre pour l'histoire mat[][TAILLE]. En fait j'étais convaincu que le but était de passer le tableau en paramètre par son pointeur et non pas de passer tout le tableau en paramètre.

    Pour la confusion dans le texte c'était mois qui était confus dans ma tête.

    Sinon c'est sympa pour l'exemple propre de programme.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    il y a une erreur dans le programme, mais je ne vois pas comment la corriger ?

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void remplir_matrice(int mat[][10])
    {
     
         int N, M;
         int i,j;     
         printf("taille de la matrice : \n");
         scanf("%d %d", &N, &M);
         for(i=0;i<N;i++)
         {for(j=0;j<M;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
     
    }
     
    void affiche_mat(int mat[][10], int l, int c)
    {
        int i,j;     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("3%d ", mat[i][j]);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int N, M;
        int mat[10][10]={0};
        remplir_matrice(mat);
        affiche_mat(mat, N, M);
    }
    en fait je n'arrive pas à transmettre la matrice dans affiche_mat, comment faire ?

  17. #17
    Membre Expert Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Par défaut
    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
    #include <stdio.h>
     
    #define NB_ELEM(tab) (sizeof (tab))/(sizeof *(tab))
    #define ROWS 10
    #define COLS 10
     
    void remplir_matrice(int mat[][COLS], size_t rows, size_t cols);
    void affiche_mat(int const mat[][COLS], size_t rows, size_t cols);
     
    int main(void)
    {
       int mat[ROWS][COLS] = { 0 };
        remplir_matrice(mat, NB_ELEM(mat), NB_ELEM(*mat));
        affiche_mat(mat, NB_ELEM(mat), NB_ELEM(*mat));
        return 0;
    }
     
    void remplir_matrice(int mat[][COLS], size_t rows, size_t cols)
    { 
       if(mat != NULL)
       {
          for(size_t i = 0; i < rows; i++)
          {
             for(size_t j = 0; j < cols; j++)
             {
                int ret;
                do
                {
                   printf("ligne %u, colonne %u : ", i+1, j+1);
                   fflush(stdout);
                   ret = scanf("%d", &mat[i][j]);
                   scanf("%*[^\n]"),getchar();
                }
                while(ret != 1);
             }
          }
       }
    }
     
    void affiche_mat(int const mat[][COLS], size_t rows, size_t cols)
    {
       if(mat != NULL)
       {
          for(size_t i = 0; i < rows; i++)
          {
             for(size_t j = 0; j < cols; j++)
             { 
                printf("%d ", mat[i][j]);
             }
             puts("");
          }
       }
    }

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    Citation Envoyé par space_56 Voir le message
    il y a une erreur dans le programme, mais je ne vois pas comment la corriger ?

    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    void remplir_matrice(int mat[][10])
    {
     
         int N, M;
         int i,j;     
         printf("taille de la matrice : \n");
         scanf("%d %d", &N, &M);
         for(i=0;i<N;i++)
         {for(j=0;j<M;j++)
         {printf("ligne %d, colonne %d : ", i+1, j+1);
         scanf("%d", &mat[i][j]);
         }
         }
     
    }
     
    void affiche_mat(int mat[][10], int l, int c)
    {
        int i,j;     
         for(i=0;i<l;i++){
         for(j=0;j<c;j++)
         { printf("3%d ", mat[i][j]);
         }
         printf("\n");
         }
    }
     
    int main()
    {
        int N, M;
        int mat[10][10]={0};
        remplir_matrice(mat);
        affiche_mat(mat, N, M);
    }
    en fait je n'arrive pas à transmettre la matrice dans affiche_mat, comment faire ?

  19. #19
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Nykoo Voir le message
    Ah je viens de comprendre pour l'histoire mat[][TAILLE]. En fait j'étais convaincu que le but était de passer le tableau en paramètre par son pointeur et non pas de passer tout le tableau en paramètre.

    Pour la confusion dans le texte c'était mois qui était confus dans ma tête.
    Hélas, tu es toujours dans la confusion.

    Le paramètre qui permet à une fonction d'accéder à un tableau est toujours un pointeur.

    En 1D, on écrit (T est le type, p le pointeur et N le nombre d'éléments) :

    f (T p[N]) ou f (T p[]) ou f (T *p)

    N étant 'à gauche' (c'est pas frappant quand il n'y a qu'une dimension, OK), il peut être omis.

    Le paramètre est une 'adresse de type T'.

    Ce trois pointeurs sont strictement identiques, parce qu'on est dans le cadre d'un paramètre de fonction.

    En 2 D, on écrit :

    f (T p[N][M]) ou f (T p[][M]) ou f (T *p[M])

    Les 3 notations sont identiques et le paramètre est une 'adresse de type tableau de M x T'. p est donc bien un pointeur.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 67
    Par défaut
    quand je fais la fonction remplir_mat, est-ce que le tableau est-il toujours là en sortant de la fonction ?

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/03/2009, 21h10
  2. Probleme programme d'une Liaison RS232 Série en C
    Par dawud dans le forum Réseau
    Réponses: 4
    Dernier message: 02/03/2009, 22h08
  3. Probleme programme java
    Par G4uthier dans le forum Applets
    Réponses: 4
    Dernier message: 13/01/2008, 08h50
  4. probleme programme structuré.
    Par argon dans le forum C
    Réponses: 10
    Dernier message: 31/01/2007, 10h11
  5. Slider problème programmation
    Par Bizarroide63 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 27/07/2006, 03h43

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