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 :

Passage d'une matrice à une fonction


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Par défaut Passage d'une matrice à une fonction
    J'ai un tableau à 2 dimensions que je veux remplir à partir d'une fonction et l'afficher à partir d'une autre J'ai donc créé mes deux fonctions mais ça marche pas est ce que quelqu'un peut m'aider
    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>
    #define N 2
    #define M 3
    void remplir(int *tab);
    void affichage(int *tab);
    int main()
    {
        int m[1][2];
        remplir(m);
        affichage(m);
        return 0;
    }
    void remplir(int *tab)
    {
    int i=0;
    int j=0;
    for(i=0;i<N;i++)
     {
         for(j=0;j<M;j++)
         {
            tab[i][j]=i+j;
         }
     }
    }
    void affichage(int *tab){
        int i=0;
        int j=0;
    for(i=0;i<N;i++)
     {
         for(j=0;j<M;j++)
         {
            printf("%d\t",tab[i][j]);
         }
         printf("\n");
     }
    }

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Le tab++ dans affichage il est de trop à mon avis.

  3. #3
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    tab est de type int * donc étant donné un entier k, tab[k] est un int. Du coup, étant donné un entier n, tab[k][n] est un expression invalide car tab[k] est un int, pas un tableau. Ainsi les "tab[i][j]" que l'on rencontre dans chacune de tes fonctions provoqueront toutes des erreurs à la compilation. En fait, il faut écrire tab[N*i + j] à la place de tab[i][j], les explications se trouvant ici. Supprimer également le tab++ dans l'affichage.

  4. #4
    Invité
    Invité(e)
    Par défaut
    exact, je n'avais pas vu ça aussi.
    autre solution: garder le tableau à deux dimensions et passer les signatures des fonctions pour prendre int **tab comme argument.

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Nudger Voir le message
    autre solution: garder le tableau à deux dimensions et passer les signatures des fonctions pour prendre int **tab comme argument.
    Hélas non, c'est une erreur fatale. En mémoire, il n'y a aucune différence entre int m[3][4] et int m[12], c'est pour ça qu'on peut utiliser int * pour pointer sur un tableau de int de n'importe quelle dimension et y accéder à n'importe quel élément en faisant un bon calcul d'adresse comme je l'ai montré. Un int ** par contre permet de pointer sur un tableau (à une dimension) de pointeurs. int ** sert donc plutôt à manipuler les "tableaux à deux dimensions" alloués dynamiquement, les tableaux de pointeurs (int * m[3] par exemple), mais certainement pas les tableaux à deux dimensions statiques (comme int m[3][4]). Ce sujets sont beaucoup traités dans les cours et FAQ de developpez.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Par défaut
    merci les amis pour votre aide pour le "tab++" c'était une erreur de frape
    voila la version corrigée
    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>
    #define N 2
    #define M 3
    void remplir(int *tab);
    void affichage(int *tab);
    int main()
    {
        int m[1][2];
        remplir(m);
        affichage(m);
        return 0;
    }
    void remplir(int *tab)
    {
    int i=0;
    int j=0;
    for(i=0;i<N;i++)
     {
         for(j=0;j<M;j++)
         {
            tab[i][j]=i+j;
         }
     }
    }
    void affichage(int *tab){
        int i=0;
        int j=0;
    for(i=0;i<N;i++)
     {
         for(j=0;j<M;j++)
         {
            printf("%d\t",tab[i][j]);
         }
         printf("\n");
     }
    }

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2010
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2010
    Messages : 106
    Par défaut
    s'il vous plait proposez moi une correction

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2010, 14h58
  2. Création d'une matrice en fonction d'une autre
    Par brf1982 dans le forum MATLAB
    Réponses: 1
    Dernier message: 03/11/2009, 08h39
  3. passage d'un dico à une matrice
    Par pedro99 dans le forum Général Python
    Réponses: 2
    Dernier message: 09/10/2007, 09h16
  4. Passage en parametre d'une matrice NON carrés
    Par Steffane dans le forum C
    Réponses: 11
    Dernier message: 02/08/2006, 14h10

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