A voir également:
- [C]Exo concernant les graphes
- Samira a modifié le menu du jour que juliette lui avait envoyé. retrouvez les modifications proposées par samira : acceptez celles concernant les entrées, refusez celles concernant les plats et les desserts. combien de caractères (en incluant les espaces) contient la version finale du menu ? - Forum Audio
- Mon paternel qui n'avait pas les pieds plats - Forum Musique / Radio / Clip
- Nous rencontrons un problème concernant la livraison de votre colissimo - Forum Consommation & Internet
- SamLogic CD-Menu Creator - Télécharger - Utilitaires
- Convertir fichier exo en mp4 ✓ - Forum Windows 7
1 réponse
Voici ce que j'ai codé concernant la fonction ecrireGraphe.
J'aimerai avoir votre avis par rapport à ce qui est dit dans l'énoncé
la suite de l'exo :
On suppose dans cet exercice que vous avez écrit une fonction
lireGraphe(Graphe **g, FILE *fdi) qui lit le graphe contenu dans un flot ouvert dans le bon mode, et renseigne le pointeur pris en parametre pour qu'il désigne le graphe construit (il est entièrement construit de manière dynamique).
Ecrire un programme copy qui prend en paramètre un nom de fichier texte contenant un graphe sur sa ligne de commande, lit le graphe et le sauve dans un fichier texte dont le nom est passé en second paramètre de la ligne de commande. Les erreurs et les ressources devront être correctement gérées. BIen entendu, votre programme devra utiliser les fonctions que vous avez écrit dans les exercices précédents (lecture du graphe, construction en mémoire de la structure correspondantes, sauvegarde, etc .)
J'aimerai avoir votre avis par rapport à ce qui est dit dans l'énoncé
/*0:OK, 1:erreur*/ int ecrireGraphe(const Graph *g, FILE *fdo) { tableHachage th;/*table de hachage*/ int i;/*indice de boucle*/ char *val;/*valeur associee a une cle*/ /*Creation de la table hachage*/ if((creerTableHachage(MAXNOEUDS, (*fonctionHachage)(void *), (*cmpClefs)(void *, void *), &th)) == 0) return 1; val = recherche(g->racine->n,th); /*le noeud n'a pas encore ete visite*/ if(val == NULL) { /*on insere dans la table car non present*/ if(insereDansTableHachage(g->racine->n,val,th) == 0) return 1; /*affichage du noeud dans le flux*/ fprintf(fdo,"(%d",g->racine->n); } /*le noeud a deja ete visite*/ else { /*affichage du numero de passage*/ fprintf(fdo,"[%d]",val); } /*parcours des fils*/ for(i=0; i<MAXNOEUDS; i++) return ecrireGraphe(g->racine->tab[i], fdo); fprintf(fdo,")"); /*liberation de la table*/ libereTableHachage(&th) return 0; }
la suite de l'exo :
On suppose dans cet exercice que vous avez écrit une fonction
lireGraphe(Graphe **g, FILE *fdi) qui lit le graphe contenu dans un flot ouvert dans le bon mode, et renseigne le pointeur pris en parametre pour qu'il désigne le graphe construit (il est entièrement construit de manière dynamique).
Ecrire un programme copy qui prend en paramètre un nom de fichier texte contenant un graphe sur sa ligne de commande, lit le graphe et le sauve dans un fichier texte dont le nom est passé en second paramètre de la ligne de commande. Les erreurs et les ressources devront être correctement gérées. BIen entendu, votre programme devra utiliser les fonctions que vous avez écrit dans les exercices précédents (lecture du graphe, construction en mémoire de la structure correspondantes, sauvegarde, etc .)
int copy(const char *src, const char *dst) { Graphe *g; FILE *fdi, *fdo; /*ouverture du fichier en lecture*/ fdi = fopen(src, "r"); if(fdi == NULL) { fprintf(stderr,"erreur de lecture\n"); return 1; } /*lecture du graphe*/ if((lireGraphe(&g, fdi)) == 1) { fclose(fdi); return 1; } fclose(fdi); /*ouverture du fichier en ecriture*/ fdo = fopen(dst, "w"); if(fdo == NULL) { fprintf(stderr,"erreur d'ecriture\n"); return 1; } /**ecriture du graphe*/ if((ecrireGraphe(g, fdo)) == 1) { fclose(fdo); return 1; } fclose(fdo); /**liberation de la memoire/ if((libereGraphe(&g)) == 1) return 1; return 0; }