Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1760 connectés 

  FORUM HardWare.fr
  Programmation
  C

  modification d'une matrice dans une procedure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

modification d'une matrice dans une procedure

n°1789529
caliban47
Posté le 19-09-2008 à 18:43:23  profilanswer
 

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

mood
Publicité
Posté le 19-09-2008 à 18:43:23  profilanswer
 

n°1789536
Taz
bisounours-codeur
Posté le 19-09-2008 à 19:04:39  profilanswer
 

ton code est ou ?

n°1789548
caliban47
Posté le 19-09-2008 à 19:23:15  profilanswer
 

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.

n°1789576
tpierron
Posté le 19-09-2008 à 19:57:08  profilanswer
 

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

n°1789621
caliban47
Posté le 19-09-2008 à 22:14:16  profilanswer
 

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.

n°1789640
Joel F
Real men use unique_ptr
Posté le 19-09-2008 à 22:46:59  profilanswer
 

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

n°1789769
Sve@r
Posté le 20-09-2008 à 13:49:43  profilanswer
 

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.
n°1789800
Joel F
Real men use unique_ptr
Posté le 20-09-2008 à 15:30:23  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  modification d'une matrice dans une procedure

 

Sujets relatifs
Modification des caractères en j2mecalculer inverse matrice
matrice sur le c++ BuilderXML-XSL => XML, modification d'un fichier XML
Modification de données dans un fichiermodification fichier *.set
modification de variable d'environements en .bat[ACCESS] Procédure double clic sur enregistrement
Premier programme C (manip. de fichiers txt)appel procedure stockée de MySQL avec du java
Plus de sujets relatifs à : modification d'une matrice dans une procedure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR