Fonction construire graphe c++ [Résolu]

Messages postés
6
Date d'inscription
lundi 18 novembre 2013
Dernière intervention
1 avril 2015
-
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;
  }
  }
 }
Afficher la suite 

Votre réponse

9 réponses

Messages postés
14288
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
Hello,

D'une, c'est mieux de mettre ton code entre balises. Plus d'infos ici.
De deux, tu ne nous dis pas quel est le problème...
Commenter la réponse de BunoCS
Messages postés
6
Date d'inscription
lundi 18 novembre 2013
Dernière intervention
1 avril 2015
0
Merci
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....
Commenter la réponse de kiriki94
Messages postés
14288
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
C'est la réponse typique d'un développeur, ça! ^^
Tu utilises quoi pour compiler? Les erreurs ne sont pas listées?
Commenter la réponse de BunoCS
Messages postés
6
Date d'inscription
lundi 18 novembre 2013
Dernière intervention
1 avril 2015
0
Merci
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.....
Commenter la réponse de kiriki94
Messages postés
14288
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
string  const nomFicher ("graph.txt"); 

A mon avis, le
const
n'a rien à faire ici. Avant
string
éventuellement...
Commenter la réponse de BunoCS
Messages postés
3830
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
19 novembre 2018
0
Merci
@Bruno: aie, pourtant, c'est tout à fait juste :(

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.

__________________________________________________________________________________________________

Améliorez votre expérience CodeS-SourceS avec ce plugin:
http://codes-sources.commentcamarche.net/forum/affich-10000111-plugin-better-cs-2#cptpingu-signature
Commenter la réponse de cptpingu
Messages postés
14288
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
14 décembre 2018
0
Merci
@cptPingu: ha ok...trop longtemps que je n'ai pas fait de C++...

@kiriki94:
Le problème est sûrement ici:
 }
fichier.close();
  cout <<endl;
  void ecritListes ()
{
 

Il manque effectivement une accolade fermante avant ta méthode.
Commenter la réponse de BunoCS
Messages postés
6
Date d'inscription
lundi 18 novembre 2013
Dernière intervention
1 avril 2015
0
Merci
@Bruno: ha oui merci l'accolade!! je corrige.... et pourtant j'avais vérifier!!
merci...

@cptPingu: oui j'ai le droit d'utiliser une matrice d'adjacence...
je l'essai et si ça coince je saurai compter sur vous...... :).. thanks
Commenter la réponse de kiriki94
Messages postés
143
Date d'inscription
samedi 1 août 2009
Dernière intervention
28 avril 2018
0
Merci
As tu resolu ton probleme par curiosité si oui , peux tu monter ton source , si non ou en es tu, moi ca m interresse, A plus
PaX.
Commenter la réponse de ccgousset

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.