[C]Programme qui ne m'affiche rien
Fermé
Moscato
-
16 mai 2006 à 13:13
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 - 17 mai 2006 à 21:40
crabs Messages postés 908 Date d'inscription lundi 18 avril 2005 Statut Membre Dernière intervention 3 août 2008 - 17 mai 2006 à 21:40
A voir également:
- [C]Programme qui ne m'affiche rien
- Le clavier de mon telephone ne s'affiche plus - Guide
- Programme demarrage windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Désinstaller programme windows 10 - Guide
7 réponses
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
16 mai 2006 à 17:43
16 mai 2006 à 17:43
Salut,
Chez moi, ce n'est pas que ton programme n'affiche rien, c'est qu'il boucle
à l'infini.
Le problème semble venir de Liste consListe(int val, Liste liste) :
- tu devrais retourner toujours l'ancre de la liste
- ne pas rentrer dans le parcours de la liste, si la liste était vide
Ce qui peut donner :
Pour l'affichage, ne modifier pas l'ancre dans ton graph, tu perds des infos
Le main() pourrait devenir :
A+, crabs
Chez moi, ce n'est pas que ton programme n'affiche rien, c'est qu'il boucle
à l'infini.
Le problème semble venir de Liste consListe(int val, Liste liste) :
- tu devrais retourner toujours l'ancre de la liste
- ne pas rentrer dans le parcours de la liste, si la liste était vide
Ce qui peut donner :
/* ajoute un cellule en fin de liste et retourne l'ancre de la liste */ Liste consListe(int val, Liste liste) { Liste parcours ; Cellule* c = CreerCellule(val); if ( ! c ) return NULL ; /* gestion erreur minimale */ if ( liste == NULL ) { c->next = NULL ; /* plus clair que liste */ return c ; /* la suite n'est pas necessaire */ } /* recherche de la dernière cellule de la liste : attention au ; final */ for( parcours=liste; parcours->next; parcours=parcours->next ) ; /* -- la modification de l'ancre n'est pas souhaitable -- while ( liste->next != NULL ) liste = liste->next; */ parcours->next = c ; /* c->next=NULL grace à creerCellule() */ return liste; }
Pour l'affichage, ne modifier pas l'ancre dans ton graph, tu perds des infos
Le main() pourrait devenir :
int main(void) { int i ; Liste parcours ; Graphe *g = NULL; g = consGraph(3); addEdge(g,0,1); addEdge(g,0,2); addEdge(g,1,2); /* -- TON AFFICHAGE MODIFIE LES ANCRES DES LISTES : A PROSCRIRE -- while(g->adj[0] != NULL) { printf("%d ",g->adj[0]->val); g->adj[0] = g->adj[0]->next; } */ for( i=0; i<g->size; i++ ) /* pour tous les sommets */ { printf( "Sommet %d :", i ) ; /* on parcours la liste */ for( parcours=g->adj[i]; parcours; parcours=parcours->next ) printf( " %d", parcours->val ) ; printf ("\n" ) ; } return 0; }
A+, crabs
Bonjour,
merci beaucoup de m'avoir corrigé.
Est-ce que tu pourrais m'indiquer ce qu'il faut modifier pour avoir des adresses IP à la place des sommets ?
Merci d'avance
merci beaucoup de m'avoir corrigé.
Est-ce que tu pourrais m'indiquer ce qu'il faut modifier pour avoir des adresses IP à la place des sommets ?
Merci d'avance
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
16 mai 2006 à 21:33
16 mai 2006 à 21:33
Salut,
Si tu es sur une idée de parcours type recherche de réseau ou plus court
chemin, ta structure graphe n'est pas adapté : cas d'un graphe orienté
Pour la structure SOMMET :
- attribut du sommet (dans ton cas adresse IP)
- liste des chemins vers d'autre sommet (structure ARC), tu peux utiliser une
liste chaînée LARC.
La structure LARC contient
- un pointeur vers l'arc (structure ARC)
- un pointeur vers la structure LARC suivante
La structure ARC, contient quant à elle
- le pointeur vers le sommet destination
- les attributs du sommet (temps de parcours de la trame par exemple)
Ton graphe sera l'ancre d'une liste de sommet structure LSOMMET.
- pointeur vers la structure SOMMET (info du sommet)
- pointeur vers la structure LSOMMET suivante
Il peut sembler y avoir pas mal de structures, mais il est correct de séparer
les conteneurs (LISTE de CELLULE) des informations (CELLULE). Cela
permet par la suite d'utiliser les CELLULE dans d'autre conteneur : tableau,
matrice, arbre binaire, etc...
Par la suite tu pourra sans trop de problème appliquer un algo de recherche
du plus court chemin de type DIJKSTRA.
Un lien sur ce problème classique, mais l'implémentation est faite en C++ :
https://www.nimbustier.net/publications/djikstra/index.html
A+, crabs
Si tu es sur une idée de parcours type recherche de réseau ou plus court
chemin, ta structure graphe n'est pas adapté : cas d'un graphe orienté
Pour la structure SOMMET :
- attribut du sommet (dans ton cas adresse IP)
- liste des chemins vers d'autre sommet (structure ARC), tu peux utiliser une
liste chaînée LARC.
La structure LARC contient
- un pointeur vers l'arc (structure ARC)
- un pointeur vers la structure LARC suivante
La structure ARC, contient quant à elle
- le pointeur vers le sommet destination
- les attributs du sommet (temps de parcours de la trame par exemple)
Ton graphe sera l'ancre d'une liste de sommet structure LSOMMET.
- pointeur vers la structure SOMMET (info du sommet)
- pointeur vers la structure LSOMMET suivante
Il peut sembler y avoir pas mal de structures, mais il est correct de séparer
les conteneurs (LISTE de CELLULE) des informations (CELLULE). Cela
permet par la suite d'utiliser les CELLULE dans d'autre conteneur : tableau,
matrice, arbre binaire, etc...
Par la suite tu pourra sans trop de problème appliquer un algo de recherche
du plus court chemin de type DIJKSTRA.
Un lien sur ce problème classique, mais l'implémentation est faite en C++ :
https://www.nimbustier.net/publications/djikstra/index.html
A+, crabs
Salut,
en suivant ce que tu as écrit, j'en ai déduit, les structures suivantes :
La structue LSommet correspond à quoi ?
Concernant les fonctions que j'ai écrit, il faudra tout modifier ?
en suivant ce que tu as écrit, j'en ai déduit, les structures suivantes :
typedef struct { int ip; LARC * liste; }Sommet; typedef struct { ARC * arc; LARC * suivant; }LARC; typedef struct{ Sommet * destination; }ARC; typedef struct { Sommet *info_sommet; LSommet * next; }Graphe;
La structue LSommet correspond à quoi ?
Concernant les fonctions que j'ai écrit, il faudra tout modifier ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
17 mai 2006 à 05:27
17 mai 2006 à 05:27
Salut,
La structure Graphe n'existe pas, c'est LSommet.
La déclaration de ton graphe deviendra :
Tu n'a aucune info à mettre sur les ARC ?
Sinon, à priori, il faut reécrire toute tes fonctions, car les structure ne
sont plus les memes...
A+, crabs
La structure Graphe n'existe pas, c'est LSommet.
La déclaration de ton graphe deviendra :
LSommet* graphe
Tu n'a aucune info à mettre sur les ARC ?
Sinon, à priori, il faut reécrire toute tes fonctions, car les structure ne
sont plus les memes...
A+, crabs
Bonjour,
est-ce que tu pourrais me donner des précisions (algo ou pseudo-code) sur les nouvelles fonctions à écrire ?
Merci par avance
est-ce que tu pourrais me donner des précisions (algo ou pseudo-code) sur les nouvelles fonctions à écrire ?
Merci par avance
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
507
17 mai 2006 à 21:40
17 mai 2006 à 21:40
Va voir le lien donné plus haut.
Même si c'est en C++ c'est suffisament expliquer pour être écrit en C
A+, crabs
Même si c'est en C++ c'est suffisament expliquer pour être écrit en C
A+, crabs