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 :

Déclaration d'un tableau dynamique à 2 dimensions


Sujet :

C++

  1. #1
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut Déclaration d'un tableau dynamique à 2 dimensions
    Bonjour,

    Comment faire pour déclarer un tableau dynamique à deux dimensions.

    J'utilise ce code

    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
     
    #include <iostream>
    #include <CImg.h>
     
    using namespace cimg_library;
    using namespace std;
    int ColorToID(int);
     
    int main(int argc,char *argv[])
    {
        const char *MapID = "D:\\MapID.bmp";
        const char *MapBorder = "D:\\MapBorder.bmp";
        const char *MapShading = "D:\\MapShading.bmp";
        CImg<unsigned char> imaID(MapID),imaBorder(MapBorder),imaShading(MapShading);
        const int Width=imaID.dimx();
        const int Height=imaID.dimy();
        int (*ID)=new int[Width][Height];
        for (int i=0; i<Width; i=i+1)
        {
        unsigned char valR;
        unsigned char valG;
        unsigned char valB;
            for (int j=0; j<Height; j=j+1)
                {
                    valR = imaID(i,j,0);  // Read the red component at coordinates (i,j).
                    valG = imaID(i,j,1);  // Read the green component at coordinates (i,j)
                    valB = imaID(i,j,2);  // Read the blue component at coordinates (i,j)
                    *ID[i][j]=ColorToID(valR*65536+valG*256+valB);
                }
        }
        /*
        const int NbBlockX=imaID.dimx()/32;
        const int NbBlockY=imaID.dimy()/32;
        for (int i=0; i<NbBlockX; i=i+1)
        {
            for (int j=0; j<NbBlockY; j=j+1)
            {
                int level=5;
     
     
            }
        }
     
        cout << id << endl;*/
        return 0;
    }
     
    int ColorToID (int rgb)
    {
        //color to ID
        // Compact distributed bits
        int i = ((rgb & 0xF00000) >> 12) | ((rgb & 0xF000) >> 8) | ((rgb & 0xF0) >> 4);
     
        // And move them to their correct places.
        return (((i & 0x8)>>1) | ((i & 0x4)<<3) | ((i & 0x2)<<7) | ((i & 0x1)<<11) |
            ((i & 0x80)>>6) | ((i & 0x40)>>2) | ((i & 0x20)<<2) | ((i & 0x10)<<6) |
            ((i& 0x800)>>11) | ((i & 0x400)>>7) | ((i & 0x200)>>3) | ((i & 0x100)<<1));
     
        //ID to color
        // Move bits around
        /*int result = (((id & 0x200)>>1) | ((id & 0x40)<<3) | ((id & 0x8)<<7) | ((id & 0x1)<<11) |
            ((id & 0x400)>>6) | ((id & 0x80)>>2) | ((id & 0x10)<<2) | ((id & 0x2)<<6) |
            ((id & 0x800)>>11) | ((id & 0x100)>>7) | ((id & 0x20)>>3) | ((id & 0x4)<<1));
     
        // Distribute over R, G and B.
        result = ((result & 0xF00) << 12) | ((result & 0xF0) << 8) | ((result & 0xF) << 4);*/
    }
    La compilation bloque sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int (*ID)=new int[Width][Height];
    car Height doit être constant.

    Comment faire ?

    J'ai cru comprendre qu'il fallait déclarer un tableau de pointeurs à une dimension puis pour chaque valeur un tableau de pointeurs.

    J'avoue que je suis encore un peu perdu dans les pointeurs.

    Existe-t'il des librairies qui permettent d'utiliser des tableaux dynamiques de façon plus intuitive ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 646

  3. #3
    Membre chevronné
    Inscrit en
    Novembre 2006
    Messages
    362
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 362
    Par défaut
    Il existe dans la librairie standart des tableaux dynamiques dont tu trouvera sles détails ici.

    Cela fait ce que tu veux.

    Par contre, il y a pas mal de choses à approfondir dans ton message :
    - en général on n'empoie pas "tableau dynamique" dans le sens que tu lui donne
    - il faut peut-être que tu te penches plus sur ce qu'est l'allocation mémoire et sur les pointeurs, tu n'y coupera pas.

    Bonne chance

  4. #4
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    merci pour ces réponses.

    En effet je viens de VB6 et là-bas un tableau dynamique est un tableau que l'on dimensionne pendant l'exécution...


    ...
    et les pointeurs n'existent pas.


    Je m'y mets doucement et j'applique quite à coder des bêtises au début.
    Si je fais que de la théorie, je vais me démotiver.

  5. #5
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    J'ai regardé les vector. Il n'y a pas d'exemple de déclaration de tableau à plusieurs dimensions.

  6. #6
    Membre confirmé Avatar de matteli
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 85
    Par défaut
    Ok merci j'ai réussi

    C'était plus simple en VB6

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

Discussions similaires

  1. Tableau dynamique à deux dimensions
    Par David Fouejio dans le forum MFC
    Réponses: 4
    Dernier message: 05/03/2007, 09h37
  2. [HashSet] Tableau dynamique à 2 dimensions
    Par ppopov dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 21/01/2007, 16h21
  3. Réponses: 4
    Dernier message: 19/12/2006, 20h06
  4. declaration d'un tableau dynamique 2 dimensions
    Par mike600river dans le forum C++Builder
    Réponses: 4
    Dernier message: 22/05/2006, 08h53
  5. Réponses: 1
    Dernier message: 09/03/2006, 17h25

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