modification d'une matrice dans une procedure

modification d'une matrice dans une procedure - C - Programmation

Marsh Posté le 19-09-2008 à 18:43:23    

Je suis en train de faire un programme pour lequel j'ai besoin d'une procedure qui va modifier une matrice a 3 dimension. Je l'ai declare comme ca:
 
void Push (float matrice[4][3][3])
{ // programme
}
 
et dans le main j'ai fai l'appel de la procedure comme ca:
 
Push(matrix);
 
j'ai bien sur déclaré la matrice avec les bonnes dimensions avant, ca compile sans probleme, mais ca ne modifie pas la matrice. je sais que lorsqu'on passe un paramete int a modifier, il faut utiliser le & , mais avec la matrice ca ne marche pas.
 
Quelqu'un aurait-il une idée pour m'aider?
je vous remercie

Reply

Marsh Posté le 19-09-2008 à 18:43:23   

Reply

Marsh Posté le 19-09-2008 à 19:04:39    

ton code est ou ?

Reply

Marsh Posté le 19-09-2008 à 19:23:15    

le code de la pocedure est :
 
void push_m(int & nivel, float  matrix[10][3][3])
{
    int i,j;
 
    nivel=nivel+1;
    for (i=0;i<3;i++)
        {
         for(j=0;j<3;j++) matrix[nivel][i][j]=matrix[nivel-1][i][j];
        }
}
 
et l'appel a la procedure est :
 
int main(){
    float pila[10][3][3];
    int estado;
    int i,j;
 
   for (i=0;i<3;i++){
         for(j=0;j<3;j++){
                          if(i==j) pila[0][i][j]=1;
                          else pila[0][i][j]=0;
                         }
         }
                     
 
     push_m(estado,pila);
     return 0;  
     }
 
Mais je ne pense que le probleme se situe au niveau du passage des parametres, enfin, c'est juste ce que je pense.

Reply

Marsh Posté le 19-09-2008 à 19:57:08    

Hmm, c'est moi ou ta variable 'estado' n'est pas initialisée au moment où tu appelles "push_m" ?

Reply

Marsh Posté le 19-09-2008 à 22:14:16    

le probleme ne vient pas de la, ceci est juste la partie du code qui ne marche pas , la variable estado est initialis'e a ce moment.
Ce que je ne comprend pas, c que la variable estado subit la modification, et la guarde, mais la matrice non, la procedure n'arrive pas a renvoyer la version modifiée.

Reply

Marsh Posté le 19-09-2008 à 22:46:59    

deja c'ets du melange infame C/C++ ... ta variable est modifié à travers l'appel de fonction car tu passes une référence à cette dernière alors que ton immonde tableau est copié. Utilise boost::multi_array pour faire ça :o

Reply

Marsh Posté le 20-09-2008 à 13:49:43    

Joel F a écrit :

...alors que ton immonde tableau est copié.


Euh non, il passe le nom du tableau donc c'est une adresse qui est reçue par la fonction (pfff je fais plus de C depuis un an alors suis un peu rouillé mais c'est quand-même bien ce qu'il me semble)
 

caliban47 a écrit :

le code de la pocedure est :
 
void push_m(int & nivel, float  matrix[10][3][3])
{
    int i,j;
 
    nivel=nivel+1;
    for (i=0;i<3;i++)
        {
         for(j=0;j<3;j++) matrix[nivel][i][j]=matrix[nivel-1][i][j];
        }
}
 
et l'appel a la procedure est :
 
int main(){
    float pila[10][3][3];
    int estado;
    int i,j;
 
   for (i=0;i<3;i++){
         for(j=0;j<3;j++){
                          if(i==j) pila[0][i][j]=1;
                          else pila[0][i][j]=0;
                         }
         }
                     
 
     push_m(estado,pila);
     return 0;  
     }
 
Mais je ne pense que le probleme se situe au niveau du passage des parametres, enfin, c'est juste ce que je pense.


 
Pfff... venir poster un code C++ dans un forum C  :sarcastic:  
 

Code :
  1. void push_m(int* nivel, float matrix[10][3][3])
  2. {
  3.     int i,j;
  4.     *nivel=(*nivel)+1;
  5.     for (i=0;i<3;i++)
  6.         {
  7.          for(j=0;j<3;j++) matrix[*nivel][i][j]=matrix[*nivel - 1][i][j];
  8.         }
  9. }
  10. int main(){
  11.     float pila[10][3][3];
  12.     int estado;
  13.     int i,j;
  14.    for (i=0;i<3;i++){
  15.          for(j=0;j<3;j++){
  16.                           pila[0][i][j]=(i == j ?1 : 0);
  17.                          }
  18.          }
  19.                    
  20.      push_m(&estado, pila);
  21.      return 0;
  22. }


 
Maintenant, étant donné que "estado" et "pila" semblent liés l'un à l'autre, l'intelligence voudrait qu'ils soient liés réellement via une structure. Ah évidemment ça demande une certaine remise en question mais quel putain de gain de temps par la suite !!!
 

Code :
  1. typedef struct {
  2.     float pila[10][3][3];
  3.     int estado;
  4. } t_monTruc;
  5. void push_m(t_monTruc *truc)
  6. {
  7.     int i,j;
  8.     truc->estado++;
  9.     for (i=0;i<3;i++)
  10.         {
  11.          for(j=0;j<3;j++) truc->pila[truc->estado][i][j]=truc->pila[truc->estado - 1][i][j];
  12.         }
  13. }
  14. int main(){
  15.     t_monTruc truc;
  16.     int i,j;
  17.    for (i=0;i<3;i++){
  18.          for(j=0;j<3;j++){
  19.                           truc.pila[0][i][j]=(i == j ?1 : 0);
  20.                          }
  21.          }
  22.                    
  23.      push_m(&truc);
  24.      return 0;
  25. }

Message cité 1 fois
Message édité par Sve@r le 20-09-2008 à 14:03:54

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 20-09-2008 à 15:30:23    

Sve@r a écrit :


Euh non, il passe le nom du tableau donc c'est une adresse qui est reçue par la fonction (pfff je fais plus de C depuis un an alors suis un peu rouillé mais c'est quand-même bien ce qu'il me semble)


 
Peut-etre, anyway c'etait pas du C :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed