Matrice 3D

Fermé
Idonnow - 25 avril 2013 à 13:51
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 avril 2013 à 22:39
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 avril 2013 à 20:19
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 jeudi 25 avril 2013 Statut Membre Dernière intervention 25 avril 2013
25 avril 2013 à 21:39
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 avril 2013 à 21:45
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 jeudi 25 avril 2013 Statut Membre Dernière intervention 25 avril 2013
25 avril 2013 à 21:49
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 836
25 avril 2013 à 22:39
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