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 :

[debutant] créer une constante tableau


Sujet :

C

  1. #21
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Emcy
    => un man c'est quoi (un manuel) ?
    Bin si tu est sous Linux, dans ta console tape man et le nom de la fonction, appel système ou autre documentation d'un programme ... à condition d'avoir installé les doc et qu'elles soient sous ce format !

    Sinon il existe une page de manuel ici: http://man.developpez.com/
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  2. #22
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    d'accord, merci

    maintenant j'ai un autre probleme.

    j'ai declaré ma variable tableau comme ceci dans mon programme principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const int TabZ[7][5] = {{1,1,1,1,1},
    					  	{0,0,0,0,1},
    					  	{0,0,0,1,0},	
    					  	{0,0,1,0,0},
    					  	{0,1,0,0,0},					  
    					  	{1,0,0,0,0},					  
    		  				{1,1,1,1,1}}; // initialisation
    => j'ai pas de probleme de compilation.

    après pour structurer mon programme, j'ai voulu mettre ce bout de code dans un nouveau fichier "afficheur.c" que j'ai ajouté au projet mais ça ne marche plus (dans le programme principale, j'ai fait un #include "afficheur.c" mais à priori c'est un fichier en .h qu'il faut mettre.
    => j'ai le message : P1: Error (199) - Cannot open include file: afficheur.c

  3. #23
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Citation Envoyé par Emcy
    après pour structurer mon programme, j'ai voulu mettre ce bout de code dans un nouveau fichier "afficheur.c" que j'ai ajouté au projet mais ça ne marche plus (dans le programme principale, j'ai fait un #include "afficheur.c" mais à priori c'est un fichier en .h qu'il faut mettre.
    On n'inclu que des header (fichier d'entête - *.h) pas de fichier source, faut arrêter de faire des bétises ! Ce que tu peux faire si tu veux que le tableau soit rendu public, c'est de le déclarer extern mais c'est peu recommandé d'utiliser des variables globales !

    Maintenant, si ton tableau n'est utilisé que par un seul module, tu peux le mettre en privé (static) dans le fichier source qui l'utilise !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #24
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Excusez-moi pour toutes ces confusions mais je debute.

    Je vais essayer d'expliquer clairement mon appli :
    J'ai un micro-controlleur qui est relié à un afficheur (5x7).

    Donc, je voulais créer mes tableaux de references (TabA, ..., TabZ) qui indiquent les LEDs qui doivent être éclairés suivant la lettre qu'on veut afficher A,...,Z.

    Après, je voulais faire une fonction qui ait en paramêtre un "char" (la lettre que je veux afficher) et qui renvoie un Tableau (le tableau de la lettre correspondante) => mais pour gagner de l'espace memoire et de la vitesse, j'aimerais pas faire une copie du tableau mais pointer l'emplacement memoire des tableaux.
    => je voudrais que tout ça soit dans un fichier .c independant

    comment ferriez-vous ?

  5. #25
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Juste comme cela, j'ai voulu faire un memcpy du tableau 2D dans un tableau dynamique et j'obtiens une erreur de segmentation quand je passe dans ma boucle de memcpy, savez ou est le problème?

    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
    #define N 7
    #define M 5
     
    static const int TabZ[7][5] = {{1,1,1,1,1},
                                   {0,0,0,0,1},
                                   {0,0,0,1,0},	
    		               {0,0,1,0,0},
    		               {0,1,0,0,0},				 
    		               {1,0,0,0,0},					                            {1,1,1,1,1}};
     
    int main(int argc, char *argv[])
    {
      int i = 0, j = 0;
      bool **tab;
     
      /* Allocation de la 1er dimension */
      tab = malloc ( sizeof(*tab)  *  N);
      /* Allocation des tableaux */
      for (i = 0; i<M; i++)
      {
          tab[i] = malloc ( sizeof(**tab) * M);
      }
     
      memcpy(tab,TabZ,(N*sizeof(*tab)));
      for (i = 0; i < M; i++)
      {
          memcpy(tab[i],TabZ[i], (sizeof(**tab) * M));
      }
    }
    Merci

  6. #26
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Après, je voulais faire une fonction qui ait en paramêtre un "char" (la lettre que je veux afficher) et qui renvoie un Tableau (le tableau de la lettre correspondante) => mais pour gagner de l'espace memoire et de la vitesse, j'aimerais pas faire une copie du tableau mais pointer l'emplacement memoire des tableaux.
    Tu vas devoir utiliser un pointeur sur ton tableau comme paramètre d'entrée dans ta fonction d'appel. Ainsi tu pourras le modifier à ta guise selon le caractère passé. Pourquoi pas utiliser des "case" pour détecter ton char, et ensuite remplir ton tableau en fonction du caractère.
    C'est une solution, peut être est elle lourde....

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Emcy
    mais à priori, ça fait bien une copie :
    http://www.linux-kheops.com/doc/man/.../memcpy.3.html

    comment faire alors pour que ça ne prenne pas plus de memoire (si c'est possible)?
    La fonction recopie exactement le nombre de bytes du tableau. Utilise sizeof.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       memcpy(t_dest, t_src, sizeof t_dest);
    Pas de Wi-Fi à la maison : CPL

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Emcy
    d'accord, merci

    maintenant j'ai un autre probleme.

    j'ai declaré ma variable tableau comme ceci dans mon programme principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const int TabZ[7][5] = {{1,1,1,1,1},
    					  	{0,0,0,0,1},
    					  	{0,0,0,1,0},	
    					  	{0,0,1,0,0},
    					  	{0,1,0,0,0},					  
    					  	{1,0,0,0,0},					  
    		  				{1,1,1,1,1}}; // initialisation
    => j'ai pas de probleme de compilation.

    après pour structurer mon programme, j'ai voulu mettre ce bout de code dans un nouveau fichier "afficheur.c" que j'ai ajouté au projet mais ça ne marche plus (dans le programme principale, j'ai fait un #include "afficheur.c" mais à priori c'est un fichier en .h qu'il faut mettre.
    => j'ai le message : P1: Error (199) - Cannot open include file: afficheur.c
    Il ne faut pas inclure de .c. Les objets (aka variables) et fonctions doivent être définis de façon uniques dans un .c. Ensuite, il existe des mécanismes de déclaration, comme le mot-clé extern utiisé pour les objets, qui permettent d'utiliser un objet n'importe-où. C'est un peu crade, mais ça fonctionne.

    http://emmanuel-delahaye.developpez....s.htm#globales

    Par exmple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    extern const int TabZ[7][5];
    Pas de Wi-Fi à la maison : CPL

  9. #29
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emcy
    comment ferriez-vous ?
    Tout simplement :
    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
    #include <stdio.h>
     
    #define tab_from_char(c) Tab##c
     
    static const int TabZ[7][5] = {{1,1,1,1,1},
                                   {0,0,0,0,1},
                                   {0,0,0,1,0},
                                   {0,0,1,0,0},
    		                       {0,1,0,0,0},
                                   {1,0,0,0,0},
                                   {1,1,1,1,1}};
     
    int main(void)
    {
      int i;
      int j;
      const int (*tab)[7][5] = tab_from_char (Z);
     
      for (i = 0; i < 7; i++)
      {
        for (j = 0; j < 5; j++)
        {
          printf ("%d", (*tab)[i][j]);
        }
        printf ("\n");
      }
      return 0;
    }
    Temps de recherche du tableau correspondant à la lettre nul, c'est le préprocesseur qui s'en charge ! Pas de mémoire supplémentaire alloué, tu utilise un pointeur sur le tableau static !
    Reste plus qu'a créer les tableaux TabA...TabY

    Bon courrage

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Emcy
    Après, je voulais faire une fonction qui ait en paramêtre un "char" (la lettre que je veux afficher) et qui renvoie un Tableau (le tableau de la lettre correspondante) => mais pour gagner de l'espace memoire et de la vitesse, j'aimerais pas faire une copie du tableau mais pointer l'emplacement memoire des tableaux.
    Ah, c'est autre chose. Tu ne veux pas faire de copie. Oublie memcpy(). Tu veux simplement rendre le tableau accessible en lecture par tes fonctions. il suffit de passer l'adresse du premier élément du tableau (son nom, en fait) via un pointeur de ce type :
    et les données du tableau seront accessibles en lecture

    http://emmanuel-delahaye.developpez.....htm#param_tab
    Pas de Wi-Fi à la maison : CPL

  11. #31
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Citation Envoyé par homeostasie
    Tu vas devoir utiliser un pointeur sur ton tableau comme paramètre d'entrée dans ta fonction d'appel. Ainsi tu pourras le modifier à ta guise selon le caractère passé. Pourquoi pas utiliser des "case" pour détecter ton char, et ensuite remplir ton tableau en fonction du caractère.
    C'est une solution, peut être est elle lourde....
    => c'est ce que j'essaye de faire

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par homeostasie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      /* Allocation de la 1er dimension */
      tab = malloc ( sizeof(*tab)  *  N);
      /* Allocation des tableaux */
      for (i = 0; i<M; i++)
      {
          tab[i] = malloc ( sizeof(**tab) * M);
      }
     
      memcpy(tab,TabZ,(N*sizeof(*tab)));
    }
    Merci
    Tu fais n'importe quoi... Tu as écrasé les adresses de tous les blocs que tu as alloué (tab)...

    Il ne faut pas utiliser memcpy dans ce cas là...
    Pas de Wi-Fi à la maison : CPL

  13. #33
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Juste comme cela, j'ai voulu faire un memcpy du tableau 2D dans un tableau dynamique et j'obtiens une erreur de segmentation quand je passe dans ma boucle de memcpy, savez ou est le problème?
    Ceci à l'air de fonctionner:
    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
    #define N 7
    #define M 5
     
    void f(bool**p){
         for(int i=0;i<N;i++){
                 for(int j=0;j<M;j++){
                         printf("%d ",p[i][j]);
                         }
                         printf("\n");
                         }
                         }
     
    static const bool TabZ[7][5] = {{1,1,1,1,1},
                                   {0,0,0,0,1},
                                   {0,0,0,1,0},	
    		                       {0,0,1,0,0},
    		                       {0,1,0,0,0},				 
    		                       {1,0,0,0,0},
                                   {1,1,1,1,1}};
     
    int main(int argc, char *argv[])
    {
      int i = 0, j = 0;
      bool **tab;
     
      /* Allocation de la 1er dimension */
      tab = malloc ( sizeof(*tab)  *  N);
      /* Allocation des tableaux */
      for (i = 0; i<N; i++)
      {
          tab[i] = malloc ( sizeof(**tab) * M);
      }
     
      //memcpy(tab,TabZ,(N*sizeof(*tab)));
      for (i = 0; i < N; i++)
      {
          memcpy(tab[i],TabZ[i], (sizeof(**tab) * M));
      }
    f(tab);
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  14. #34
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Citation Envoyé par gege2061
    Tout simplement :
    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
    #include <stdio.h>
     
    #define tab_from_char(c) Tab##c
     
    static const int TabZ[7][5] = {{1,1,1,1,1},
                                   {0,0,0,0,1},
                                   {0,0,0,1,0},
                                   {0,0,1,0,0},
    		                       {0,1,0,0,0},
                                   {1,0,0,0,0},
                                   {1,1,1,1,1}};
     
    int main(void)
    {
      int i;
      int j;
      const int (*tab)[7][5] = tab_from_char (Z);
     
      for (i = 0; i < 7; i++)
      {
        for (j = 0; j < 5; j++)
        {
          printf ("%d", (*tab)[i][j]);
        }
        printf ("\n");
      }
      return 0;
    }
    Temps de recherche du tableau correspondant à la lettre nul, c'est le préprocesseur qui s'en charge ! Pas de mémoire supplémentaire alloué, tu utilise un pointeur sur le tableau static !
    Reste plus qu'a créer les tableaux TabA...TabY

    Bon courrage
    je comprends pas trop ce que fait cette ligne :
    #define tab_from_char(c) Tab##c

  15. #35
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    memcpy(tab,TabZ,(N*sizeof(*tab)));
    Tu fais n'importe quoi... Tu as écrasé les adresses de tous les blocs que tu as alloué (tab)...
    Ouhla, oui en effet....

  16. #36
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emcy
    je comprends pas trop ce que fait cette ligne :
    #define tab_from_char(c) Tab##c
    C'est l'opérateur ## du préprocesseur qui concataine ses deux opérandes : ici Tab et c. c est l'argument passé à la macro donc quand tu écrit :
    C'est remplacé par :
    Et ensuite :
    Le seul problème c'est que tu ne peux pas utiliser de caractère ou de chaine de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab_from_char ('Z')
    /* ou */
    tab_from_char ("Z")
    N'est pas possible

  17. #37
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Temps de recherche du tableau correspondant à la lettre nul, c'est le préprocesseur qui s'en charge ! Pas de mémoire supplémentaire alloué, tu utilise un pointeur sur le tableau static !
    Reste plus qu'a créer les tableaux TabA...TabY
    En fait ici, on privéligie la rapidité à la mémoire, non?
    Car obligation de définir en static les 26 tableaux.
    L'utilisation des "cases", ralentit l'application au niveau temps de recherche mais me parait moins riche en mémoire, même si le nombre de ligne de code est accrue et va donc enrichir le segment text du system image.

    Mais ta méthode proposée me semble bien plus agréable à lire en tout cas.

  18. #38
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    Citation Envoyé par gege2061
    C'est l'opérateur ## du préprocesseur qui concataine ses deux opérandes : ici Tab et c. c est l'argument passé à la macro donc quand tu écrit :
    C'est remplacé par :
    Et ensuite :
    Le seul problème c'est que tu ne peux pas utiliser de caractère ou de chaine de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tab_from_char ('Z')
    /* ou */
    tab_from_char ("Z")
    N'est pas possible
    => d'accord donc si j'ai bien compris ma fonction doit ressembler à ça , non ?
    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 tab_from_char(c) Tab##c
     
     
    static const int TabA[7][5] = {{0,1,1,1,0},
                                   {1,0,0,0,1},
                                   {1,0,0,0,1},
                                   {1,1,1,1,1},
    		                       {1,0,0,0,1},
                                   {1,0,0,0,1},
                                   {1,0,0,0,1}};
     
    static const int TabZ[7][5] = {{1,1,1,1,1},
                                   {0,0,0,0,1},
                                   {0,0,0,1,0},
                                   {0,0,1,0,0},
    		                       {0,1,0,0,0},
                                   {1,0,0,0,0},
                                   {1,1,1,1,1}};
     
    int *PointeurTableau(char MyChar)
    {	
    	switch(MyChar)
    	{
    	 case 'A':      
    		return *tab_from_char (A);
    	    break;
    	 case 'Z':				
    		return *tab_from_char (Z);
    		break;
    	}
    }
     
     
    int main(void)
    {
      int i;
      int j;
      int *tab
     
      tab = PointeurTableau('A');
     
      for (i = 0; i < 7; i++)
      {
        for (j = 0; j < 5; j++)
        {
          printf ("%d", (*tab)[i][j]);
        }
        printf ("\n");
      }
      return 0;
    }

  19. #39
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    d'accord donc si j'ai bien compris ma fonction doit ressembler à ça , non ?
    A moins que j'ai mal compris, ca ne doit pas ressembler à cela, tu ne dois pas utiliser de "case" puisque la variable de ton tableau sera celle fourni par la macro:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define tab_from_char(c) Tab##c
    Faut que tu récupères le caractère de l'alphabet, t'appelles la macro et tu vas pointer ensuite sur le résultat de la macro, c'est à dire le tableau correspondant à la lettre à afficher.

  20. #40
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par Emcy
    => d'accord donc si j'ai bien compris ma fonction doit ressembler à ça , non ?
    Oui mais ce que je t'ai donné n'est pas vraiment utile si tu doit obligatoirement passé par des caractères :
    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
    #include <stdio.h>
     
    typedef const int tab_lettre_t[7][5];
     
    static tab_lettre_t TabZ = {{1,1,1,1,1},
                                {0,0,0,0,1},
                                {0,0,0,1,0},
                                {0,0,1,0,0},
    		                    {0,1,0,0,0},
                                {1,0,0,0,0},
                                {1,1,1,1,1}};
     
    tab_lettre_t *PointeurTableau(char MyChar)
    {
      tab_lettre_t *tab = NULL;
     
      switch (MyChar)
      {
        case 'Z':
          tab = &TabZ;
        break;
      }
      return tab;
    }
     
    int main (void)
    {
      int i;
      int j;
      tab_lettre_t *tab;
     
      tab = PointeurTableau ('Z');
     
      for (i = 0; i < 7; i++)
      {
        for (j = 0; j < 5; j++)
        {
          printf ("%d", (*tab)[i][j]);
        }
        printf ("\n");
      }
      return 0;
    }

Discussions similaires

  1. Créer une classe tableau
    Par rouliane dans le forum C++
    Réponses: 36
    Dernier message: 29/01/2008, 23h48
  2. [Debutant]Créer une DLL MFC ?
    Par Chikh001 dans le forum MFC
    Réponses: 11
    Dernier message: 24/10/2007, 17h01
  3. Réponses: 18
    Dernier message: 11/04/2007, 15h18
  4. [Debutant] definir une constante de type Date
    Par gloglo dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 15/12/2006, 12h20
  5. Réponses: 3
    Dernier message: 20/02/2006, 18h32

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