Problème avec c++

Fermé
Céline - 23 févr. 2010 à 18:11
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 26 févr. 2010 à 08:13
Bonjour tout le monde,
J'ai un problème de programmation c++ .je définis une classe contrat et à partir de cette classe je définis une autre classe economie. la classe contrat c'est des contrats de transport entre une ville origine et une ville destionation .mon problème c'est que lorsuque je veux avoir les différentes economies dans une vecteur je fais une boucle dans une boucle mais seule la première itération est correct c'est à dire lorsque i=0 et j=0 puis j=1 et ainsi de suite mais lorsque on commence à la deuxième itération mon programme déconne et je ne sais pas pourquoi si qlq a une idée et qui peut m'aider Merci d'avance.

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include<math.h>


const double Xdep = 5.6;
const double Ydep = 6.9;
using namespace std;
class Contrat {
public:
double mAbsco ,mOrdo,mAbscd ,mOrdd,mDemand,mTpservice;
int cle;
public:Contrat();
public:
Contrat (double x ,double y,double u,double v,double w, double z,int n):mAbsco(x),mOrdo(y),mAbscd(u),mOrdd(v),mDemand(w),mTpservice(z),cle(n){}
Contrat(const Contrat& inP ):mAbsco(inP.mAbsco),mOrdo(inP.mOrdo),mAbscd(inP.mAbscd),mOrdd(inP.mOrdd),mDemand(inP.mDemand),mTpservice(inP.mTpservice),cle(inP.cle){}
public: Contrat &operator=(const Contrat &Source)

{

mAbsco = Source.mAbsco;
mOrdo = Source.mOrdo;
mAbscd = Source.mAbscd;
mOrdd = Source.mOrdd;
mDemand= Source.mDemand;
mTpservice=Source.mTpservice;
cle =Source.cle;

return *this;
}
public: ~ Contrat() {};
};

double cost1 (const Contrat& inCon){double result = (Xdep -inCon.mAbsco)*(Xdep -inCon.mAbsco) +(Ydep - inCon.mOrdo)*(Ydep-inCon.mOrdo);
return sqrt(result);}
double cost2 (const Contrat& inCon){double result =(inCon.mAbsco -inCon.mAbscd)*(inCon.mAbsco -inCon.mAbscd)+(inCon.mOrdo-inCon.mOrdd)*(inCon.mOrdo-inCon.mOrdd);
return sqrt(result);}
double cost3(const Contrat& inCon){double result = (Xdep-inCon.mAbscd)*(Xdep-inCon.mAbscd)+(Ydep-inCon.mOrdd)*(Ydep-inCon.mOrdd);
return sqrt(result);}
double cost4 (const Contrat& inP , const Contrat& inQ){double result = (inP.mAbscd-inQ.mAbsco)*(inP.mAbscd-inQ.mAbsco)+(inP.mOrdd-inQ.mOrdo)*(inP.mOrdd-inQ.mOrdo);
return sqrt(result) ;}
double saving (const Contrat& inP, const Contrat& inQ){double result = cost3(inP)+cost1(inQ)-cost4(inP,inQ);
return (inP.cle ==inQ.cle)? 0:result; }
/*double result2 = ((inCon.mAbsco-inCon.mAbscd)*(inCon.mAbsco-inCon.mAbscd)+(inCon.mOrdo-inCon.mOrdd)*(inCon.mOrdo-inCon.mOrdd));
double result3 = (Xdep -inCon.mAbscd)*(Xdep -inCon.mAbscd) +(Ydep - inCon.mOrdd)*(Ydep-inCon.mOrdd);
double result = sqrt(result1) + sqrt(result2) + sqrt(result3) ;
return result;}
double cost2( const Contrat& inP,const Contrat& inQ) {
double resut1 = (Xdep -inP.mAbsco)*(Xdep -inP.mAbsco) +(Ydep - inP.mOrdo)*(Ydep-inP.mOrdo);
double result2 = (inP.mAbsco-inP.mAbscd)*(inP.mAbsco-inP.mAbscd)+(inP.mOrdo-inP.mOrdd)*(inP.mOrdo-inP.mOrdd);
double result3 = (inP.mAbscd-inQ.mAbsco)*(inP.mAbscd-inQ.mAbsco)+(inP.mOrdd-inQ.mOrdo)*(inP.mOrdd-inQ.mOrdo);
double result4 = ((inQ.mAbsco-inQ.mAbscd)*(inQ.mAbsco-inQ.mAbscd)+(inQ.mOrdo-inQ.mOrdd)*(inQ.mOrdo-inQ.mOrdd));
double result5 = (Xdep -inQ.mAbscd)*(Xdep -inQ.mAbscd) +(Ydep - inQ.mOrdd)*(Ydep-inQ.mOrdd);
double result6 = sqrt(resut1)+ sqrt(result2) +sqrt(result3)+sqrt(result4)+sqrt(result5);
return result6;}*/
class economie {
public: Contrat mFirst , mSecond ;
double mSav;
public:
economie(const Contrat& inP , const Contrat& inQ, const double& meco): mFirst(inP), mSecond(inQ),mSav(meco){}
economie(const economie& Econ ):mFirst(Econ.mFirst),mSecond(Econ.mSecond),mSav(Econ.mSav){}

public: ~ economie() {};
};
int main()

{vector <Contrat> Vec;
double a,b,c,d ,e,f;
int g;
ifstream fichier("C:/Users/kamal/Desktop/test22.txt", ios::in);

if(fichier){
for (int i = 0;i <4; i++){

fichier >> a;fichier >> b; fichier >> c;fichier >> d;fichier >> e;fichier >> f;fichier >> g;
Vec.push_back(Contrat(a,b,c,d,e,f,g));
cout << Vec[i].mDemand <<';'<< cost2(Vec[i])<< endl;

}
// cout << cost4(Vec[0],Vec[1]);

//cout <<"kimo" << saving(Vec[1],Vec[2]);

fichier.close();
}

else
cerr << "Impossible d'ouvrir le fichier !" << endl;

vector <economie> Slist;
for (int i=0;i<4;i++){
for (int j=0;j<4;j++){economie Econ( Vec[i],Vec[j],saving(Vec[i],Vec[j]));
Slist.push_back(Econ);

}
for (int i =0;i<16;i++){ cout << Slist [i].mSecond.mDemand << endl;}
//cout << Slist[5].mSav <<"ggg"<< saving(Vec[1],Vec[1])<< Slist[3].mSav;

//for (int i=0;i<16;i++){cout << Slist[i].mSav << ";" ;}
// for (int i=0;i<4;i++){for (int j=0;j<4;j++)

//cout << saving (Vec[i],Vec[j])<< "kimo";}
cout << Vec[0].mDemand;

return 0;
}
/* economie Econ(Vec[0],Vec[1],saving(Vec[0],Vec[1]));
cout << Econ.mSav << "kimkim" <<";" << saving(Vec[0],Vec[1]);
*
*

return 0;*/
}

4 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
23 févr. 2010 à 19:32
Salut,

pense à utiliser les balises code stp pour poster du code aussi long (le bouton à coté de gras italique...).


je crois que c'est un problème de création dynamique, mais je ne suis pas sûr.

Pourrais-tu fournir les fichiers (avec cjoint.com par exemple) qui permettent de tester le code stp ?
0
céline_19 Messages postés 1 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 24 février 2010
24 févr. 2010 à 01:48
Merci Pacorabanix de venir à mon aide mais j'ai réussi à trouver le bug après 3 jours de travail c'était juste une accolade qui m'a rendu folle.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
24 févr. 2010 à 15:11
ah oui, saleté d'accolades :)

Un conseil (très important) : indente correctement ton code, et tu passseras beaucoup moins de temps à repérer ce genre de problème d'accolades :

int fonction() {
   //une accolade a été ouvert ---> on indente le code
   instruction
   autre instruction 
   if (condition) {
      //de même, une nouvelle accolade a été ouverte ->indentation supplémentaire
      instruction
   } /* fin du bloc, on annule l'indentation lrosque l'accolade se ferme, on prend soin de mettre l'accolade fermante sur une nouvelle ligne*/
   instruction; // on voit clairement que cette instruction ne fait pas partie du bloc if.
}
0
Merci pour les conseils bonne soirée.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
26 févr. 2010 à 08:13
Autre précision, même si ce n'est pas activer par défaut la plupart des éditeurs proposent une "correspondance" des parenthèses et accolade, c'est à dire que lorsque tu mets le curseurs sur une accolade il doit mettre en emphase (surligné, gras...) la parenthèse correspondante. C'est bien pratique aussi.
0