Matrice 3D

Idonnow -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un projet pour lequel j'ai besoin de passer une matrice 3 dimensions à une fonction.
Je programme sur un PIC 32 car il y a une application derrière.
Je n'arrive pas à envoyer ma matrice à ma fonction, le compilateur me dis à chaque fois
error: subscripted value is neither array nor pointer

Est ce que quelqu'un aurais la solution à mon problème?
Voici mon code:

main :

int main (void)

{
    char x,y,z;
   int matrice[][5][7];
    for(z=0; z<=4; z++)
    {
        for(y=0; y<=5;y++)
        {
            for (x=0;x<=7;x++) matrice[z][y][x]=0;
        }
    }
    matrice[0][0][5]=1;

    Init_micro();

    while (1)
    {
        Afichage_tableau(matrice);
    }



fonction :

void Afichage_tableau (int *matrice)
{
int tab_matrice[5][32],w=0;
    int i,j,x=7,y=5,z=16,Trame=0;
    for (i=18;i > 0 ; i--)
    {
        for (j=32; j>0 ; j--)
        {
            if(x > 0)
            {
                x=7;
                y--;
                if(y > 0)
                {
                    y=5;
                    z--;
                }
            }
            w = *matrice[z][y][x];
            tab_matrice[i][j]= w;
            Trame = Trame | (tab_matrice[i][j] << j);
            x--;
        }
        envoi_trame(Trame);
    }
    PORTE = PORTE | ((1 << VALA) | (1 << VALB) | (1 << VALC) | (1 << VALD));
}


merci d'avance pour l'aide apportée.
Idonnow

A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Il manque la première dimension à ton tableau.
Et attention à tes for. Il faut mettre inferieur strictement.
0
Idonnow Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai enlevé la première dimension parce que j'ai fais des test :-). Ensuite le code dans les for dans la fonction, je suis d'accord, est faux; je l'ai d'ailleurs changé et refondu en entier. Mais le réel problème se trouve dans l'envoi, la réception et l'utilisation de la matrice 3 dimensions. J'ai parcouru un certain nombre de site et je n'ai trouvé aucun site qui répond à ma question :-/
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
J'ai enlevé la première dimension parce que j'ai fais des test :-).
Il n'empêche que c'est faux !
int matrice[][5][7];
Soit tu fais : int matrice[5][7] (version où tu enlèves la première dimension), soit tu fais int matrice[4][5][7]; mais pas ce que tu as fait.

Donc corrige, reposte ton code en mettant le nouveau message d'erreur.
0
Idonnow Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai pas mon code ,en se moment ,avec moi mais je t'assure avec ou sans il n'y a rien qui change entre les deux .
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Normal, il y a plein d'autres erreurs. Mais il faut commencer par corriger petit à petit.

void Afichage_tableau (int *matrice)
Tu mets int *matrice, il faudrait mettre : int matrice[NBLIG][NBCOL] (si t'es en 2 dim).

w = *matrice[z][y][x];
w=matrice[y][x];

for (x=0;x<=7;x++) matrice[z][y][x]=0;
Matrice doit être de 2 dimensions puisque c'est ton test. x<=7, à corriger comme dit plus haut.

Voilà, mais il faut corriger tout ça, recompiler pour voir s'il reste des erreurs. Reposte après avoir corrigé et mets le(s) message(s) d'erreur s'il en reste.
0