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

  FORUM HardWare.fr
  Programmation
  C++

  problème de compilation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de compilation

n°2236098
etudoc
Posté le 25-08-2014 à 12:09:25  profilanswer
 

Bonjour tous le monde,
 
voila j'ai un petit problème de compilation,
j'ai fait une fonction pour calculer une loi log normale,et j'appelle cette fonction dans mon programme principal.
lors de l'exécution il m'affiche une fenêtre en me disant  que le programme à cesser de fonctionner.
mon erreur s'affiche à ce niveau:

Code :
  1. for (int i=0;i<lines;++i)
  2.      {
  3.        for (int j=0;j<lines;++j)
  4.         {
  5.           mat[i][j]=LognorDist(t1[j], t2[i], mu_y1[j], mu_y2[i], segma_y1[j], segma_y2[i], rho1, lines);
  6.           cout<<mat[i][j];
  7.         }
  8.      }


 
les déclarations sont les suivantes:
 

Code :
  1. vector<vector<double> > mat;
  2. vector<double> t1, t2, mu_t1, mu_t2, segma_t1, segma_t2,mu_y1,mu_y2,segma_y1,segma_y2, rho; //Y1=ln ( t1),Y2=ln ( X2)


 
je travaille avec des vecteurs  et je veux récuperer le résultat dans une matrice de 36X36.
 
le soucis c'est que quand je fait une commande pour récupérer un vecteur 36X1 ça marche mais pas une matrice!!!
 
SVP pourriez vous m'aider et m'orienter vers l'erreur commise?!
 
Je programme sous code blocks.
 
Merci d'avance


---------------
etudoc
mood
Publicité
Posté le 25-08-2014 à 12:09:25  profilanswer
 

n°2236109
theshockwa​ve
I work at a firm named Koslow
Posté le 25-08-2014 à 13:26:26  profilanswer
 

ce n'est pas une erreur de compilation si ton programme plante à l'exécution.

 

Tu dois probablement utiliser un index trop grand pour ton tableau àdeux dimensions.
Es-tu sur d'avoir bien redmiensionné mat et chaque mat[i] aussi ?

 

Edit : accessoirement, un vector<vector<>> pour une simple matrice, c'est pas top.
Edit2 : tu vas de 0 à lines dans tes deux boucles, tu es sr que ca ne devrait pas être columns pour l'un des deux ?


Message édité par theshockwave le 25-08-2014 à 13:27:20

---------------
last.fm
n°2236111
etudoc
Posté le 25-08-2014 à 13:39:35  profilanswer
 

puisque j'utilise le même nombre de colonnes et de ligne, j'ai fait directement lines (avec lines=36) c'est pour cette raison j’utilise le même indice

n°2236114
etudoc
Posté le 25-08-2014 à 13:45:15  profilanswer
 

tu a totalement raison c'est un problème de dimension car je fait debug, il me mentionne une erreur de size au niveau de mat.
mais je vois pas bien l'erreur car pour moi la déclaration que j'ai faite est logique.
chaque mat[i] est de dimension 36X1, donc je dois avoir une matrice mat de dimension 36x36!!non!!??

n°2236115
theshockwa​ve
I work at a firm named Koslow
Posté le 25-08-2014 à 13:50:00  profilanswer
 

Montre-nous donc comment tu initialises tes matrices.

 

Edit : note que n'importe quel autre accès en dehors des limites des tableaux pourrait avoir le même effet (je pense à tes "t1[j], t2[i], mu_y1[j], mu_y2[i], segma_y1[j], segma_y2[i]" )

Message cité 1 fois
Message édité par theshockwave le 25-08-2014 à 13:53:37

---------------
last.fm
n°2236116
etudoc
Posté le 25-08-2014 à 13:59:01  profilanswer
 

theshockwave a écrit :

Montre-nous donc comment tu initialises tes matrices.
 
Edit : note que n'importe quel autre accès en dehors des limites des tableaux pourrait avoir le même effet (je pense à tes "t1[j], t2[i], mu_y1[j], mu_y2[i], segma_y1[j], segma_y2[i]" )


 
dans mon programme j'utilise mes vecteurs et ma matrice comme variables globaux, donc je les déclare directement comme suit:

Code :
  1. vector<vector<double> > mat;
  2. vector<double> t1, t2, mu_t1, mu_t2, segma_t1, segma_t2,mu_y1,mu_y2,segma_y1,segma_y2, rho; //Y1=ln ( t1),Y2=ln ( X2)


 
Est ce que j'ai raté quelque chose??
 
et pour les vecteurs je les récupère directement d'une sous fonction que j'ai deja programmé

Code :
  1. for(int i = 0; i < lines; i++)
  2.     {
  3.         t1.push_back(matrix [i][4]);
  4.         t2.push_back(matrix [i][5]);
  5.         mu_t1.push_back(matrix [i][10]);
  6.         mu_t2.push_back(matrix [i][11]);
  7.         segma_t1.push_back(matrix [i][12]);
  8.         segma_t2.push_back(matrix [i][13]);
  9.         cout<<t1[i]<<"\t"<<t2[i]<<"\t"<<mu_t1[i]<<"\t"<<mu_t2[i]<<"\t"<<segma_t1[i]<<"\t"<<segma_t2[i]<<"\n";
  10.     }


et pour les segma_y et mu_y sont calculés en fonction de segma_t et mu_t comme suit:

Code :
  1. for (int i=0;i<lines;i++)
  2.     {
  3.        segma_y1.push_back(sqrt(log(1+(pow(segma_t1[i],2)/pow(mu_t1[i],2)))));
  4.        mu_y1.push_back(log(mu_t1[i])-(pow(segma_y1[i],2)/2));
  5.        segma_y2.push_back(sqrt(log(1+(pow(segma_t2[i],2)/pow(mu_t2[i],2)))));
  6.        mu_y2.push_back(log(mu_t2[i])-(pow(segma_y2[i],2)/2));
  7.        cout<<segma_y1[i]<<" \t "<<mu_y1[i]<<" \t "<<segma_y2[i]<<" \t "<<mu_y2[i]<<"\n";
  8.     }


Message édité par etudoc le 25-08-2014 à 14:09:36

---------------
etudoc
n°2236117
theshockwa​ve
I work at a firm named Koslow
Posté le 25-08-2014 à 14:05:23  profilanswer
 

Oui, comment ton vecteur sait-il quelle taille il doit faire ?

 

Par défaut, ton vecteur a une taille nulle. Tenter d'accéder à l'un de ses éléments via l'opérateur [] est une erreur. Tu dois le redimensionner, par exemple, comme ca :

 
Code :
  1. vector<vector<double> > mat( lines, vector<double>( lines ) );
  2. vector<double> t1, t2, mu_t1, mu_t2, segma_t1, segma_t2,mu_y1,mu_y2,segma_y1,segma_y2, rho; //Y1=ln ( t1),Y2=ln ( X2)
 

Attention à tes autres vecteurs aussi (si tu les remplis avec des push_back, tout se passera bien)

 

(Edit : typo)

Message cité 1 fois
Message édité par theshockwave le 25-08-2014 à 14:06:36

---------------
last.fm
n°2236119
etudoc
Posté le 25-08-2014 à 14:19:13  profilanswer
 

theshockwave a écrit :

Oui, comment ton vecteur sait-il quelle taille il doit faire ?
 
Par défaut, ton vecteur a une taille nulle. Tenter d'accéder à l'un de ses éléments via l'opérateur [] est une erreur. Tu dois le redimensionner, par exemple, comme ca :
 

Code :
  1. vector<vector<double> > mat( lines, vector<double>( lines ) );
  2. vector<double> t1, t2, mu_t1, mu_t2, segma_t1, segma_t2,mu_y1,mu_y2,segma_y1,segma_y2, rho; //Y1=ln ( t1),Y2=ln ( X2)


 
Attention à tes autres vecteurs aussi (si tu les remplis avec des push_back, tout se passera bien)
 
(Edit : typo)


 
 
Un GRAND MERCII theshockwave, le problème est résolu; en mettant

Code :
  1. vector<vector<double> > mat( lines, vector<double>( lines ) );

.
merci beaucoup.


---------------
etudoc

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

  problème de compilation

 

Sujets relatifs
Probleme de compilation sur Javascool[resolu] problème compilation programmes C sous Dev-C++
Probleme compilation MacOSXprobléme d'installation et compilation de QWT sous netbeans
[C][OSX][LibSDL] Compilation OK, mais problème d'exécution...Probleme de Compilation (switch)
Problème de compilation[RESOLU] Problème compilation Visual C++
Probléme de compilationProblème de compilation avec Code Block
Plus de sujets relatifs à : problème de compilation


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