retourner un tableau 2d d une fct

retourner un tableau 2d d une fct - C++ - Programmation

Marsh Posté le 06-03-2015 à 11:27:23    

bonjour,
j essais d avoir une matrice 3*3 comme return d une fct mais je n y arrive pas et c est important que ca soit ca parseque je suis en train de reecrire un code python en c++ c est difficile de tout changer apres voila ce que j ai esseye de faire  
float** toMatrix() {
float mat[3][3]; float a ; float b ; float c ; float d ;
 
a=R; b=I; c=J; d=K;
 
mat[0][0]= a*a+b*b-c*c-d*d; mat[0][1]= 2*(b*c-a*d); mat[0][2]= 2*(a*c+b*d);
 
mat[1][0]= 2*(b*c+a*d); mat[1][1]= a*a-b*b+c*c-d*d; mat[1][2]=2*(c*d-a*b);
 
mat[2][0]= 2*(b*d-a*c); mat[2][1]=2*(a*b+c*d); mat[2][2]=a*a-b*b-c*c+d*d;
 
return mat;
 
 
 
}  
et apres j ai ca  " error: cannot convert 'float (*)[3]' to 'float**' in return return mat;"  
est ce que quelqu un pourrais m aider ?
merci

Reply

Marsh Posté le 06-03-2015 à 11:27:23   

Reply

Marsh Posté le 07-03-2015 à 20:10:53    

Salut, difficile de bien comprendre ton problème.
A titre d'information, tu peux éditer ton message avec des balises de code <cpp></cpp> entre crochets [] ça aide la lecture et augmente la probabilité de réponse.
 
Si ta matrice est toujours de dimensions 3x3, tu peux utiliser le code suivant :
 

Code :
  1. // example for HFR                                                                                                                                 
  2. #include <iostream>
  3. using namespace std;
  4. void tomatrix(const double &A, const double &B, const double &C, double MAT[3][3])
  5. {
  6.   MAT[0][0] = A*A + B*B;
  7.   MAT[0][1] = A*A + B*B;
  8.   MAT[0][2] = A*A + B*B;
  9.   MAT[1][0] = A*A + B*B;
  10.   MAT[1][1] = A*A + B*B;
  11.   MAT[1][2] = A*A + B*B;
  12.   MAT[2][0] = A*A + B*B;
  13.   MAT[2][1] = A*A + B*B;
  14.   MAT[2][2] = A*A + B*B;
  15. }
  16. int main(int argc, char* argv[]){
  17.   double mat[3][3] = {{0.,0.,0.}, {0.,0.,0.}, {0.,0.,0.}};
  18.   double a=1.;
  19.   double b=3.;
  20.   double c=5.;
  21.   tomatrix(a, b, c, mat);
  22. }


Message édité par vckbm le 07-03-2015 à 20:13:30

---------------
A Vendre
Reply

Marsh Posté le 07-03-2015 à 20:17:58    

Je pense que ton problème consiste à passer un tableau 2D comme argument d'une fonction, tu peux faire des recherches google sur ce sujet.
 
Il en n'est pas moins que le code ci dessus est dégueulasse, il faudrait :
 
* soit créer des objets matrice et vecteurs
* soit utiliser des objets matrices et vecteurs en prenant n'importe quelle bibliothèque d'algèbre linéaire -- par ex BLAS --


---------------
A Vendre
Reply

Marsh Posté le 07-03-2015 à 20:36:20    

complètement à l'arrache en mode fatigué:
 
class mat33 {
 
   double m_data[3][3]; /// pod
 
public:
   operator double[3][3] () {
        return m_data;
   }
};
 
mat33 machin() {
 mat33 value; // nrvo
 // truc fait avec value
 return value;
}
 
void pouet( double mat[3][3] ){
 // autre truc fait avec mat
}
 
 
void bidule() {
  mat33 space = machin();
  pouet( space ); // l'operator de cast devrait être appellé
}
 
 
si le compilo peut faire du link-time optimization, il fera un nrvo:
 
void machin( mat33 & value ) {
 // truc fait avec value
}
 
de manière à pas faire de copie pour rien.

pfff, j'ai dit de la merde, oublie :D


Message édité par bjone le 09-03-2015 à 19:05:51
Reply

Marsh Posté le 11-03-2015 à 13:06:43    

Hello, y'a qqu'un? ne me dis pas que tu t'es inscrit juste pour poser une question et disparaître dans la nature ?


---------------
A Vendre
Reply

Marsh Posté le 11-03-2015 à 17:21:42    

Code :
  1. struct Matrix
  2. {
  3. // ...
  4. };


Et hop ! Plus de problèmes [:manust]


---------------
last.fm
Reply

Sujets relatifs:

Leave a Replay

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