bonjour a vous
voila j'ai besoin d'aide j'ai un pt'it probleme avec mon programme
mon programme consiste a chercher d'abord un chemins entre 2 stations a et b ensuite chercher tous les chemins entre ces deux meme stations.
on a notre reseau d'arc qui est dans un fichiers d'arc qui contient notre reseau d'arc
voici le code
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
/*fonction creer station*/
typedefstructstationstation;
structstation{charnom[20];
intnum;
};
/*le type arc*/
typedefstructarcarc;
structarc
{stationstat_depart;
stationstat_arriv;
intindic;
};
/*fonction de creation de station*/
stationcreer_station(char*nom,intnum)
{stationnouv;
{
nouv.num=num;
strcpy(nouv.nom,nom);
}
}
/*fonctions de comparaison entre 2 stations*/
intmeme_station(stationa,stationb)
{
if(strcmp(a.nom,b.nom)==0&&a.num==b.num)return(1);
elsereturn(0);
}
/*fonctions de creation d'un arc*/
arccreer_ar(stationa,stationb,intindicateur)
{arcnouv;
{nouv.stat_depart=a;
nouv.stat_arriv=b;
nouv.indic=indicateur;
}
return(nouv);
}
/* appartenance*/
intappartient(stationa,arcc)
{
if((strcmp(c.stat_depart.nom,a.nom)==0)&&(c.stat_depart.num==a.num))return(1);
elseif((strcmp(c.stat_arriv.nom,a.nom)==0)&&(c.stat_arriv.num==a.num))return(1);
elsereturn(0);
}
/*comparaisons de 2 arc*/
intmemearc(arcc1,arcc2)
{
if((appartient(c1.stat_depart,c2)==1)&&(appartient(c1.stat_arriv,c2)==1))return(1);
elsereturn(0);
}
/*fonctions se suivent*/
intsesuivent(arcc1,arcc2)
{
if((memearc(c1,c2)==0)&&(strcmp(c1.stat_arriv.nom,c2.stat_depart.nom)!=0))return(1);
elsereturn(0);
}
/* PARTIE 3*/
FILE*creerReseau(intnbr)
{inti=1;arca;FILE*fich;
fich=fopen("tp2.dat","w");
if(fich==NULL){printf("erreur d'ouverture");exit(-1);}
while(i<=nbr)
{
printf("donner le nom de votre station de depart de l'arc Numero %d\n",i);
scanf("%s",&a.stat_depart.nom);
printf("donner le nom de votre station d'arrive de l'arc Numero %d\n",i);
scanf("%s",&a.stat_arriv.nom);
fwrite(&a,sizeof(arc),1,fich);
i++;
}
fclose(fich);
return(fich);
}
/*rechercher un arc*/
intrechercheArc(stationdepart,stationarrive,FILE*p)
{arca;
p=fopen("tp2.dat","r");
if(p==NULL){printf("erreur d'ouverture");exit(-1);}
while(!feof(p))
{fread(&a,sizeof(arc),1,p);
if((appartient(depart,a)==1)&&(appartient(arrive,a)==1))return(1);
}
return(0);
}
/*copier 2 arc*/
arccopier(arca)
{arcb;
strcpy(b.stat_depart.nom,a.stat_depart.nom);
b.stat_depart.num=a.stat_depart.num;
b.stat_arriv.num=a.stat_arriv.num;
strcpy(b.stat_arriv.nom,b.stat_arriv.nom);
}
/*suppression d'un ARC*/
/* rechercher l'existance d'un chemin*/
arc*recherche(stationa,stationb,FILE*p)
{arcc,save,tab[50];inttrouv=0,fin,i=0;
p=fopen("tp2.dat","r");
while((trouv==0)&&(!feof(p)))
{fread(&c,sizeof(arc),1,p);
if((appartient(a,c)==1)&&(strcmp(a.nom,c.stat_depart.nom)==0)){trouv=1;
save=c;
trouv=1;
rewind(p);
}
}
if(trouv==0){return(0);}
while((!feof(p))&&(appartient(b,c)==0))
{fread(&c,sizeof(arc),1,p);
if((memearc(c,save)==0)&&(sesuivent(save,c)==1)){save=c;
rewind(p);
tab[i]=save;
i++;
}
}
fclose(p);
return(tab);
}
main()
{intnbr,i;FILE*fichier;arc*s,d;stationdepart,arrive;
printf("DONNEZ LE NOMBRE D'ARC DU RESEAU \n");
scanf("%d",&nbr);
fichier=creerReseau(nbr);
printf("QUELLE SONT LES STATIONS QUE VOUS VOULEZ CHERCHER LE CHEMINS ENTRE ELLES\n");
printf("STATION DE DEPART:");
scanf("%s",&depart.nom);
printf("STATION D'ARRIVE:");
scanf("%s",&arrive.nom);
fclose(fichier);
s=recherche(depart,arrive,fichier);
i=0;
while(i<nbr)
{printf("%s %s \n",s[i].stat_depart.nom,s[i].stat_arriv.nom);
i++;
}
getch();
}