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 :

tableau 2D dans différents fichiers .c


Sujet :

C

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 3
    Points
    3
    Par défaut tableau 2D dans différents fichiers .c
    Bonjour,

    Je travail sur un program ou j utilise une matrise 2D, dont la longueur est fixée en début de programe(mais que j aimerai pouvoir changer en cas de besoin)

    long nx=40;
    long ny=40;
    double matrix[nx][ny] ;

    Mon programme marche, mais j essaye désormais de le séparer en plusieurs sous fichiers .c et .h de façon à le rendre plus lisible, cependant, quand je copie mes fonctions opérant sur mon tableau, en dehors de ma fonction main, comme pour la fonction :

    void generate_matrix(double matrix[nx][ny],long nx,long ny,long *iseed){
    long i,j ;
    for (i=0;i<nx;i++){
    for (j=0;j<ny;j++){
    double rand=ran2(&iseed) ;
    matrix[i][j]=(rand<0.5) ? (matrix[i][j]=-1.) : (matrix[i][j]=1.) ;
    printf("matrix[%d][%d]=%f\n",i,j,matrix[i][j]) ;
    }
    }
    printf("I m going out of generate matrix\n") ;
    }

    Il me dit qu il connait pas nx et ny.
    J aimerai bien trouvé une façon de faire marcher ça sans avoir à redéfinir nx et ny dans chaque sous fichiers .c, ni avoir à changer toute ma structure en redéfinissant ma matrisse sous forme de pointeur.

    Merci d avance.

    Olivier

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    matrise
    non ...

    matrisse
    non plus ...

    Il me dit qu il connait pas nx et ny.
    Ca parait plutôt normal, où sont définies ces variables ?

    Si tu ne veux rien changer, tu peux utiliser des variables globales (je prefère un define en début de fichier .h que tu inclues partout)


  3. #3
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Il faut faire tes declarations comme ça :
    #define nx 40
    #define ny 40

  4. #4
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Dans mon programme principal, je fais :

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #define nx 40
    #define ny 40
    #include "ran2.h"
    #include "function.h"
    #include "energy.h"
    #include "matrix.h"


    ben il me répond
    matrix.c:8: error: 'nx' undeclared here (not in a function)
    matrix.c:8: error: 'ny' undeclared here (not in a function)
    matrix.c: In function 'generate_matrix':

    Ou est qu il faut que je définisse x et ny pour qu ils soient pris en compte partout?
    Quel intitulé je dois mettre sur mes fichiers .h ou .c ??
    (J aimerai bien ne pas avoir à définir nx et ny dans chaque sous fichier, pour pouvoir les changer facilement)...


    Merci pour vos réponse en attendant.

    Olivier

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    En général tu peux faire un fichier param.h avec le contenu suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #ifndef _PARAM_H_
    #define _PARAM_H_
     
    #define nx ...
    #define ny ...
     
    #enfif
    et tu inclus ce fichier dans tous les fichiers qui ont besoin de ce paramètre.

  6. #6
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    pour l'extension des fichiers c'est ".h".
    le code que tu as mis existe dans quel fichier?
    l'erreure signalée c'est dans matrix.c, mais je voix pas que c'est à la ligne 8.
    donc je croix que tu utilise tes 2 variables dans "function.h" sans les declarés.

    je te propose de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define nx 40
    #define ny 40
    dans "function.h".

  7. #7
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Citation Envoyé par karami
    pour l'extension des fichiers c'est ".h".
    le code que tu as mis existe dans quel fichier?
    l'erreure signalée c'est dans matrix.c, mais je voix pas que c'est à la ligne 8.
    donc je croix que tu utilise tes 2 variables dans "function.h" sans les declarés.

    je te propose de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define nx 40
    #define ny 40
    dans "function.h".
    Ca fait deux fois que tu reponds la même chose que moi ... Je vais mettre ça sur le compte de la simultanéité des réponses.

    Pour ce qui est de ta solution, elle n'est pas logique puisqu'il n'y a aucune raison pour que les variables soit définies ici, de plus si tu veux rajouter un fichier, cela complique le tout puisque tu dois respecter un ordre pour l'inclusion des fichiers...

  8. #8
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Ce n'est pas de l'ajout,Le fichier "function.h" existe déja.
    pour la resemblance de nos réponses c'est un probleme de simultanité comme tu vient de dire.

  9. #9
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Ce n'est pas de l'ajout,Le fichier "function.h" existe déja.
    C'est bien ce que je disais...

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    double matrix[nx][ny] comme argument ca me semble bizarre.

    essaye plutôt double ** matrix.

    un tableau c'est comme un pointeur et un tableau de tableau ne serait t'il pas comme un pointeur de pointeur ?

  11. #11
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Je croix pas qu'il a besoin des pointeurs puisqu'il spécifie la taille de la matrice.

  12. #12
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    un tableau c'est comme un pointeur et un tableau de tableau ne serait t'il pas comme un pointeur de pointeur ?
    Attention à ne pas dire n'importe quoi, un tableau n'est pas un pointeur !

  13. #13
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Parfait,

    en effet, un fichier param.h correspond tout à fait à ce dont j avais besoin.
    Ca marche maintenant..

    Merci beaucoup pour ces conseils.

    Olivier

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 382
    Points : 80
    Points
    80
    Par défaut
    Je dis peut etre des betises mais
    est un pointeur sur un tableau de pointeur... Il faut par la suite allouer la mémoire afin d'écrire dedans...

  15. #15
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Ce sont des liste chainées dans ce cas, et accéder à un élément on doit parcourir et tester tous les pointeurs...

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Un tableau n'est pas un pointeur. Un tableau est une zone mémoire pouvant contenir N éléments consécutifs de même type. Un pointeur est une zone mémoire qui contient l'adresse d'une autre zone mémoire. Toutefois, dans un grand nombre de cas, tout se passe comme si c'était la même chose.

  17. #17
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    est un pointeur sur un tableau de pointeur...
    Euh, non plus.

    Ceci définit un pointeur de pointeur sur un type T.

    Attention encore une fois avec la confusion entre un pointeur et un tableau, ce sont deux choses totalement différentes !

  18. #18
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Un pointeur est une zone mémoire qui contient l'adresse d'une autre zone mémoire.
    Il s'agit d'une variable qui contient une adresse mémoire. (j'aime très peu le terme zone mémoire que tu emploi parce qu'elle porte à confusion)

    Toutefois, dans un grand nombre de cas, tout se passe comme si c'était la même chose.
    Attention, ça n'est pas parce qu'on utilise les pointeurs pour manipuler les tableaux dynamiques ou les tableaux statiques que les deux sont la même chose !

  19. #19
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Tout se passe comme si c'était la même chose ne signifie pas que c'est la même chose...

    On est bien d'accord.

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

Discussions similaires

  1. [XL-2000] formulaire à partir d'une liste dans différent fichiers
    Par Avinetor dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 02/06/2009, 18h51
  2. Réponses: 8
    Dernier message: 13/05/2009, 11h00
  3. [Débutant] accéder à des variables partagées dans différents fichiers
    Par jane40 dans le forum MATLAB
    Réponses: 16
    Dernier message: 24/04/2009, 15h17
  4. export d'un tableau byte dans un fichier excel
    Par JauB dans le forum ASP.NET
    Réponses: 4
    Dernier message: 22/04/2008, 12h36
  5. Réponses: 4
    Dernier message: 10/02/2005, 16h10

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