Fonction construire graphe c++

Résolu
kiriki94 Messages postés 6 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 1 avril 2015 - Modifié par BunoCS le 31/03/2015 à 14:15
ccgousset Messages postés 150 Date d'inscription samedi 1 août 2009 Statut Membre Derniè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;
  }
  }
 }

9 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2015 à 14:16
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...
0
kiriki94 Messages postés 6 Date d'inscription lundi 18 novembre 2013 Statut Membre Derniè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....
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2015 à 15:21
C'est la réponse typique d'un développeur, ça! ^^
Tu utilises quoi pour compiler? Les erreurs ne sont pas listées?
0
kiriki94 Messages postés 6 Date d'inscription lundi 18 novembre 2013 Statut Membre Derniè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.....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2015 à 15:58
string  const nomFicher ("graph.txt"); 

A mon avis, le
const
n'a rien à faire ici. Avant
string
éventuellement...
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
Modifié par cptpingu le 31/03/2015 à 16:15
@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
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
31 mars 2015 à 17:02
@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.
0
kiriki94 Messages postés 6 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 1 avril 2015
1 avril 2015 à 17:44
@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
0
ccgousset Messages postés 150 Date d'inscription samedi 1 août 2009 Statut Membre Dernière intervention 4 mars 2023
12 juin 2015 à 19:12
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.
0
Rejoignez-nous