Fonction main() dans ce programme

Résolu/Fermé
pépereF Messages postés 36 Date d'inscription dimanche 11 décembre 2005 Statut Membre Dernière intervention 25 janvier 2008 - 7 juil. 2007 à 11:24
 ray-J - 7 juil. 2007 à 22:04
On me demande (pour un devoir) de créer la fonction main() dans ce programme pour qu'il fonctionne.
mais je n'y arrive pas.
pouvez-vous m'aider?
merci
/*Description:
Ce module permet de gérer l'entrée des 
données et la manipulation simple des itinéraires*/ 

/*Inclusion du logiciel*/
#include<stdio.h>
#include<string.h>
/*Constantes symboliques*/
#define NB_VILLES 20
#define NB_CHEMINS 5
#define LONG_NOM 20
#define OPTI_MAX 36500
/*Définition d'une structure couple*/
typedef struct couple
{
	short int ville_suiv;
	short int distance;
}
couple;
/*Définition d'une structure itinéraire*/
typedef struct itineraire
{
	int num_ville;
	int num_chemin;
}
itineraire;
/*Définition des fonctions*/
/*Fonction de création d'un menu pour cette application
l'entier renvoyé correspond au choix de l'utilisateur*/
int menu(void)
{
	int choix;
	printf("\t+-------------------------------+\n");
	printf("\t|    GESTION DES ITINERAIRES    |\n");
	printf("\t+-------------------------------+\n");
	printf(" 1)Ajout d'une ville dans la liste\n");
	printf(" 2)Entree d'une distance entre deux villes\n");
	printf(" 3)Parcours d'un itineraire\n");
	printf(" 4)Optimisation d'un itineraire\n");
	printf(" 5)Fin du programme\n");

	printf("\nVotre choix: ");
	scanf("%d",&choix);
	while ((choix!=1)&&(choix!=2)&&(choix!=3)&&(choix!=4)&&
		(choix!=5))
	{
		printf("Vous devez choisir 1,2,3,4 ou 5 SVP: ");
		scanf("%d",&choix);
	}
	return choix;
}
void ville(villes,chemins,nb_villes)
char villes[NB_VILLES][LONG_NOM];
couple chemins[NB_VILLES][NB_CHEMINS];
int *nb_villes;
{
	/*variable locales*/
	char nom_ville[LONG_NOM];/*ville à ajouter*/
	int deja_la;/*booleen indiquant si la ville est deja dans la liste*/
	int i;/*indice de boucle*/
	char reponse;/*reponse de l'utilisateur (o/n)*/
	couple vide;/*structure vide pour mettre a jour le tableau chemins*/
	/*affichage des villes presentes*/
	if(*nb_villes!=0)
	{
		printf("voici la liste des villes deja présentes:\n");
		for(i=0;i<*nb_villes;i++)
		{
			printf("%2d:%s\n",i,villes[i]);
		}
	}
	else 
	{
		printf("Pour l'instant aucune ville dans la liste.\n");
	}
	/*saisi du nom de la ville*/
	printf("Donnez le nom de la ville a ajouter au tableau: ");
	scanf("%s",&nom_ville);
	/*Parcours du tableau pour voir si la ville est deja presente*/
	deja_la=0;
	for(i=0;i<*nb_villes;i++)
	{
		/*on utilise la fonction strcasecmp qui ne tient pas compte de la casse*/
		if(strcasecmp(nom_ville,villes[i])==0)
		{
			deja_la=1;
			break;
		}
	}
	/*Insertion dans le tableau*/
	if(deja_la)
	{
		printf("Desole la ville %s est deja dans le tableau!\n",nom_ville);
	}
	else
	{
		/*Insertion dans villes*/
		strcpy(villes[*nb_villes],nom_ville);
		/*insertion dans chemins*/
		/*création d'une structure couple vide*/
		vide.ville_suiv=-1;
		vide.distance=0;
		/*Insertion de cette structure dans chemins*/
		for(i=0;i<NB_CHEMINS;i++)
		{
			chemins[*nb_villes][i]=vide;
		}
		/*incrementer le nombre de villes*/
		*nb_villes=*nb_villes+1;
		printf("Insertion de %s dans le tableau.\n",nom_ville);
	}
	/*on demande s'il y a d'autres villes à rentrer:*/
	printf("Voulez-vous ajouter une autre ville? (o/n): ");
	reponse=getch();
	printf("%c\n",reponse);
	while((reponse!='o')&&(reponse!='n'))
	{
		printf("Il faut repondre o ou n : ");
		reponse=getch();
		printf("%c\n",reponse);
	}
	/*Traitement de la reponse:*/
	if(reponse=='o')
	{
		/*appel de la fonction ville()*/
		ville(villes,chemins,&(*nb_villes));
		/*Rq:on passe par adresse la valeur pointée par nb_villes*/
	}
	else
	{
		/*Fin du programme*/
		printf("Retour au menu principal.\n");
		getch();
		return;
	}
}
/*Fonction distance()
permet d'entrer une distance entre deux villes*/
void distance(villes,chemins,nb_villes)
char villes[NB_VILLES][LONG_NOM];
couple chemins[NB_VILLES][NB_CHEMINS];
int nb_villes;
{
/*variables locales*/
char ville1[LONG_NOM];//Nom de la ville de depart
char ville2[LONG_NOM];//Nom de la ville d'arrivée
int distance;//Distance entre les deux villes
int num_ville1=-1;/*indice de la ville d'arrivée 
				  dans le tableau villes*/
int num_ville2=-1;/*indice de la ville d'arrivée 
				  dans le tableau villes*/
couple chemin1;/*structure à entrer dans chemins pour ville1->ville2*/
couple chemin2;/*structure à entrer dans chemins pour ville2->ville1*/
int i;/*indice de boucle*/
int insertion1=0;/*Booleen indiquant s'il y a assez de place dans chemin
				 pour l'insertion*/
int insertion2=0;/*Booleen indiquant s'il y a assez de place dans chemin
				 pour l'insertion*/
char reponse;/*Reponse de l'utilisateur (o/n)*/
//on verifie qu'il y a au moin 2 villes dans villes()
if(nb_villes<2)
{
	printf("Desole mais il n'y a pas assez de ville pour entrer une distance.\n");
	getch();
	return;
}
/* Demande de la distance et des 2 villes*/
printf("Donnez la ville de depart: ");
scanf("%s",&ville1);
printf("Donnez la ville d'arrivee: ");
scanf("%s",&ville2);
printf("donnez la distance entre %s et %s (en km: ",ville1,ville2);
scanf("%d",&distance);
/*Recherche de num_ville1 dans villes[]*/
for(i=0;i<nb_villes;i++)
{
	if(strcasecmp(ville1,villes[i])==0)
	{
		num_ville1=i;
		break;
	}
}
/*Recherche de num_ville2 dans villes[]*/
for(i=0;i<nb_villes;i++)
{
	if(strcasecmp(ville2,villes[i])==0)
	{
		num_ville2=i;
		break;
	}
}
/*On quitte la fonction si num_ville1 ou num_ville2 = -1*/
if((num_ville1==-1)||(num_ville2==-1))
{
	if(num_ville1==-1)
	{
		printf("La ville n'est pas dans la liste!\n",ville1);
	}
	if(num_ville2==-1)
	{
		printf("La ville n'est pas dans la liste!\n",ville2);
	}
	printf("Retour au menu principal");
	getch();
	return;
}
/*insertion dans le tableau chemins[][]*/
/*Pour la ville1 en tant que ville de départ,costruction
de la structure associée et insertion*/
chemin1.ville_suiv=num_ville2;
chemin1.distance=distance;
for(i=0;i<NB_CHEMINS;i++)
{
	if(chemins[num_ville1][i].ville_suiv==-1)
	{
		chemins[num_ville1][i]=chemin1;
		insertion1=1;
		break;
	}
}
/*Pour la ville2 en tant que ville de départ
Construction de la structure associée et insertion*/
chemin2.ville_suiv=num_ville1;
chemin2.distance=distance;
for(i=0;i<NB_CHEMINS;i++)
{
	if(chemins[num_ville2][i].ville_suiv==-1)
	{
		chemins[num_ville2][i]=chemin2;
		insertion2=1;
		break;
	}
}
/*On regarde si les insertions sont effectuées correctement:*/
if(!insertion1)
{
	printf("Desole mais l'insertion 1 dans le tableau chemin a echoue.\n");
	printf("Car cette ligne est pleine (Max 5 chemin par ville.\n");
}
if(!insertion2)
{
	printf("Desole mais l'insertion 2 dans le tableau chemins a echoue.\n");
	printf("Car cette ligne est pleine (Max 5 chemins par ville.\n");
}
/*Retour au menu principal:*/
printf("Retour au menu principal.\n");
getch();
return;
}
/*Fonction parcours()
Demande les villes, à traverser et calcule la distance parcourue*/
void parcours(villes,chemins,nb_villes)
char villes[NB_VILLES][LONG_NOM];
couple chemins[NB_VILLES][NB_CHEMINS];
int nb_villes;
{
	/*Variables locales*/
	int num_ville_courante=0;/*ville courante*/
	int num_ville_suivante;/*ville suivante*/
	int longueur=0;/*Distance total parcourue*/
	int distance;/*Distance intermédiaire*/
	int i;/*indice de boucle*/
	/*On verifie qu'il y a au moin 2 villes dans villes()*/
	if(nb_villes<2)
	{
		printf("Desole mais il n'y a pas assez de villes pours faire un parcoure.\n");
		getch();
		return;
	}
	/*Affichage des villes présentes*/
	if(nb_villes!=0)
	{
		printf("Voici la liste des villes deja presente:\n");
		for(i=0;i<nb_villes;i++)
		{
			printf("%2d:%s\n",i,villes[i]);
		}
	}
	/*Demande de num_ville_courante*/
	printf("Quelle est le numero de la ville de depart:");
	scanf("%d",&num_ville_courante);
	while(num_ville_courante!=99)
	{
		/*Affichage de la distance parcourue*/
		printf("Distance parcourue:%4dkm\n",longueur);
		/*Affichage des villes accessibles à partir de la ville courante*/
		for(i=0;i<NB_CHEMINS;i++)
		{
			if(chemins[num_ville_courante][i].ville_suiv!=-1)
			{
				printf("%2d:%s(%4dkm)\n",chemins[num_ville_courante][i].ville_suiv,
					villes[chemins[num_ville_courante][i].ville_suiv],
					chemins[num_ville_courante][i].distance);
			}
		}
		/*Demande de la ville suivante*/
		printf("Quelle est la ville suivante(99 pour sortir):");
		scanf("%d",&num_ville_suivante);
		/*Recherche de la distance et incrementation de la longueur si
		num_ville_suivante est differente de 99*/
		if(num_ville_suivante!=99)
		{
			for(i=0;i<NB_CHEMINS;i++)
			{
				if(chemins[num_ville_courante][i].ville_suiv==num_ville_suivante)
				{
					distance=chemins[num_ville_courante][i].distance;
					break;
				}
			}
			longueur=longueur+distance;
		}
		/*la ville courante devient la ville suivante:*/
		num_ville_courante=num_ville_suivante;
	}
	/*Affichage de la distance totale et fin du programme*/
	printf("Distance totale parcourue:%4dkm\n",longueur);
	printf("Retour au menu principal.\n");
	getch();
	return;
}
A voir également:

2 réponses

Salut, je n'ai que survoler ton code mais si on te demande de faire une fonction main() c'est surement pour que tu effectues le test unitaire de tes fonctions, non?

bon courage
0
Salut je sais pas comment t'expliquer mais faire une fonction main() c'est appeler toutes fonctions dont tu en as besoin et tu dois pas oublier les prototypes de fonction biensure pour le C et le C++ et les variables nécéssaires.voila tout comme maxou je n'ai fais que survoler ton programme(trop long...).
Bon courage!
0