kiriki94
Messages postés6Date d'inscriptionlundi 18 novembre 2013StatutMembreDernière intervention 1 avril 2015
-
Modifié par BunoCS le 31/03/2015 à 14:15
ccgousset
Messages postés150Date d'inscriptionsamedi 1 août 2009StatutMembreDernière intervention 4 mars 2023
-
12 juin 2015 à 19:12
bonjour a tous jai besoin de votre aide afin de trouver le problème qui se trouve dans mon code.. je souhaiterais réaliser la fonction construire de l'algorithme de bellman ford en c++ pour déterminer le plus cours chemin...
merci pour votre aide....
/*********************** fonction construire *****/
La fonction lis, ouvre le fichier dont le nom est indiqué en
paramètre puis y lit, d'abord l'ordre du graphe, puis la liste
des arcs codés sous la forme (origine, extrémité, longueur).
La fonction DOIT ALLOUER la place en mémoire pour le tableau
graphe et doit construire les chaînes de pères.
Exemple : le graphe ayant trois sommets, dont les noms sont 0, 1 et 2,
l'arc (0,1) de poids 5.2 et l'arc (2,0) de poids -3 sera décrit ainsi
dans un fichier :
3
0 1 5.2
2 0 -3
La fonction ferme le fichier qu'elle a ouvert.
voici mon code :
#include "bellman.h"
#include <iostream>
#include <fstream>
#include<string>
using namespace std;
/* La fonction suivante permet de vérifier que le graphe a été saisi
correctement. Elle liste pour chaque sommet ses "pères" assortis
des longueurs de l'arc correspondant*/
void ecritListes(void);
void construire(string nomFicher)
{
//saisie du graphe dans le fichier
int nomSommet;
int i;
string ligne;
string const nomFicher ("graph.txt");
int nombreArc;
PERE * adrPere;
ofstream fichier (nomFicher.c_str());
if(fichier)
{
cout << "entrer le nombre d'arc :";
cin >> nombreArc;
cout <<"entrer l'ordre du graphe : ";
cin >> ordre;
fichier << ordre <<endl;
cout <<"entrer respectivement origine extremite longueur" <<endl;
for( i=0; i<nombreArc; i++)
{
getline(cin,ligne);
fichier << ligne <<endl;
}
}
ifstream fichier ("graph.txt");
if(fichier)
{
graphe= new PERE * [ordre];
string ligne;
for (i = 0; i < ordre; i++)
graphe[i] = NULL;
adrPere = new PERE [sizeof(PERE)];
while (!fichier.eof())
{
if (adrPere == NULL)
{
cout<<"manque de place" <<endl;
exit(1);
}
fichier << (adrPere -> nomPere);
fichier << adrPere -> longueur;
fichier << nomSommet;
if( ( nomSommet == EOF)||(adrPere -> longueur == EOF))
{
cout <<"probleme avec le fichier " <<endl ;
exit(1);
}
adrPere->suivant = graphe[nomSommet];
graphe[nomSommet] = adrPere;
}
ecritListes();
}
/*********** Fin de la fonction construire ********/
/* La fonction suivante permet de vérifier que le graphe a été saisi
correctement. Elle liste pour chaque sommet ses "pères" assortis
des longueurs de l'arc correspondant*/
else
{
cout <<"erreur le fichier n'existe pas" <<endl;
}
fichier.close();
cout <<endl;
void ecritListes ()
{
int i;
PERE * adrPere;
for ( i = 0; i < ordre; i++)
{
adrPere = graphe[i];
while (adrPere != NULL)
{
cout <<"arc (" << adrPere -> nomPere <<"," <<i <<")" <<"de longueur "<<adrPere ->longueur <<endl;
adrPere = adrPere->suivant;
}
}
}
kiriki94
Messages postés6Date d'inscriptionlundi 18 novembre 2013StatutMembreDernière intervention 1 avril 2015 31 mars 2015 à 15:19
en faite pour ma part le code devrait fonctionner normalement mais je rencontre des problèmes a la compilation et je ne sais pas ou se trouve le problème....
kiriki94
Messages postés6Date d'inscriptionlundi 18 novembre 2013StatutMembreDernière intervention 1 avril 2015 31 mars 2015 à 15:43
j'utilise visual studio.. il me demande un point virgule avant la définition de ma fonction
void ecritListes () {
c'est a dire juste avant l'accolade ouvrante or il ne devrait pas y avoir de point virgule... aussi il me demande de redéfinir le paramètre formel 'nomFichier'... je n'y comprend rien.....
Vous n’avez pas trouvé la réponse que vous recherchez ?
En C++, const s'applique toujours à ce qu'il y a "à gauche". Exemple:
char const * const toto => le premier const veut dire que la case ne pourra être modifié, le deuxième const veut dire que le pointeur ne pourra être déplacé.
En C++, "const char titi" et "char const titi" sont synonymes. On écrit par habitude le const devant, mais il est plus logique de l'écrire après (c'est une exception du C++, très usité, et je préfère moi-même écrire le const avant).
@kiriki94:
Évite les using namespace, voir: http://0217021.free.fr/portfolio/axel.berardino/articles/bon-usage-using-namespace.
Ne met pas "void" pour une fonction ne prenant rien en argument (c'est un reliquat du C).
Utilise une matrice d'adjacence (un tableau à double dimension) pour représenter ton graphe, c'est beaucoup plus simple :). (Si tu as le droit, évidemment).
Enfin, il manque beaucoup de chose dans le code que tu nous présentes. Il faut tout nous donner si tu veux qu'on puisse t'aider.
Il faut aussi que tu nous copies le message d'erreur de compilation.