IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

probleme d'execution d'un programme d'un voyageur dans des villes


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2
    Par défaut probleme d'execution d'un programme d'un voyageur dans des villes
    bonjour, j'ai un problème avec ce code et je n'arrive pas a l'exécuter,je travaille sur micrsoft visaul studio langage C.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    #include <stdio.h>
    #include <conio.h>
     
    #define NMAX 25/*nombre de villes*/
    #define NMMAX 20/*nombre maximal de caractere dans le nom d'une ville*/
     
    /*type pour representer les solutions */
    typedef struct 
    {
    	int table[NMAX];
    }sol;
     
    /*type pour representer  une vile*/
     typedef struct
     {
    	 char NOM[NMMAX];/*nom d ela ville*/
    	 int CODE;/*code postale de la ville*/
     }VILLE;
     
     /*fonction qui saisit le nombre de villes*/
     int saisirnombrevilles()
     {
    	 int N;
    	 do
    	 {
    		 printf("Entrez le nombre de villes:\n");
    		 scanf("%d",&N);
    	 }
    	 while ((N<1)||(N>NMAX));
    	 return N;
     }
     
     /*procedure permettant de saisir n villes*/
     /*la ville de depart est stockee au debut du tableau*/
     
     void saisirvilles(VILLE *v, int n)
     {
    	 int i;
    	 printf("Entrer le nom de la ville de depart:\n");
    	 scanf("%s",v[0].NOM);
    	 printf("Entrer le code postale de la ville de depart\n");
    	 scanf("%d",&v[0].CODE);
    	 printf("%s  %d: \n",v[0].NOM,v[0].CODE);
     
    	 for (i=1;i<n;i++)
    	 {
    		 printf("Entrer le nom de la ville a visiter:\n");
    		 scanf("%s",v[i].NOM);
    		 printf("Enter le code de la ville a visiter:\n");
    		 scanf("%d",&v[i].CODE);
    	     printf("%s  %d\n",v[i].NOM,v[i].CODE);
    	 }
     }
     
     /*procedure permettant de saisir les distances */
     
     void saisirdistance (int *distance, VILLE*VILLES, int n)
     {
    	 int i,j;
    	 for (i=0;i<n;i++)
    	 {
    		 distance[i*NMAX+1]=0;/*pas de distance d'une ville a elle meme distance [i][j]=0*/
    		 for (i=0;i<n;i++)
    		 {
    			 printf("distance entre %s et %s :\n",VILLES[i].NOM,VILLES[j].NOM);
    			 scanf("%d",&distance[i*NMAX+j]);
    			 /*la matrice est symetrique:diatance [j][i]=diatance[i][j]*/
    			 distance[j*NMAX+i]=distance[i*NMAX+j];
    			 printf("diastance entre %d et %d=%d\n",i,j,distance[i+NMAX+j]);
    		 }
    	 }
     }
     
     /*fonction permettant de verifier si unr sequence est une solution coherente*/
     /*retourne 1 si valide,0 sinon*/
     
     int valider (sol sequence,int n)
     {
    	 int test=1;
    	 int s=0;
    	 int i,j;
     
    	 /*la ville de depart doit etre la ville numero 0*/
    	 if (sequence.table[0]!=0)
    	 return 0;
    	 for (i=0;i<n;i++)
    	 {
    		 /*les numeros de villes doivent varier de 1 a n-1*/
    		 if ((sequence.table[i]>n-1) ||(sequence.table[i]<1)) 
    		 return 0;
    		 /*les numeros de villes doivent etre differents*/
    		 for (i=0;i<n;i++)
    		 {
    			 if (sequence.table[i]==sequence.table[j])
    			 return 0;
    		 }
    	 }
    	 return test;
     }
     
     void main ()/*algorithme principal*/
     {
    	 int n;
    	 int distance[NMAX][NMAX];
    	 VILLE VILLES [NMAX];
    	 sol s;
    	 int i;
     
    	 n=saisirnombrevilles();
    	 saisirvilles(VILLES,n);
    	 saisirdistance (distance,VILLES,n);
    }

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 810
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 810
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par pathus Voir le message
    bonjour, j'ai un problème avec ce code et je n'arrive pas a l'exécuter
    Un peu vague comme explication. Qu'est-ce qui se passe avec ton code ? Il ne se compile pas ? Il te donne un message d'erreur ?

    PS: la fonction main() est de type "int"
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Citation Envoyé par Sve@r Voir le message
    PS: la fonction main() est de type "int"
    Et elle doit donc retourner un int (0 ou EXIT_SUCCES) pour indiquer la fin du programme. De plus il est plus rigoureux de mettre void entre parenthèses lorsqu'une fonction ne prend pas de paramètres (c'est le cas de main et de la fonction saisirnombrevilles).

    On retrouve aussi des variables inutilisées et d'autres qui ne sont pas initialisés alors qu'il le faudrait et qui ne changent jamais de valeur => voir les commentaires du code.

    Ce code passe correctement au compilo mais je ne vois pas exactement ce qu'il est censé faire (la saisie des villes et leur CP ok mais la suite ...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    #include <stdio.h>
    /* #include <conio.h> ATT : quel est l'utilité ici ? */
     
    #define NMAX 25 /* nombre de villes */
    #define NMMAX 20 /* nombre maximal de caractères dans le nom d'une ville */
     
    /* type pour représenter les solutions */
    typedef struct
    {
        int table[NMAX];
    }sol;
     
    /* type pour représenter  une vile*/
     typedef struct
     {
         char NOM[NMMAX];/*nom de la ville*/
         int CODE; /* code postale de la ville */
     }VILLE;
     
    /* prototypes */
    int saisirnombrevilles(void);
    void saisirvilles(VILLE*, int);
    void saisirdistance (int*, VILLE*, int);
    int valider (sol,int);
     
    /* ATT : Syntaxe correcte du main ici */
    int main (void) /* algorithme principal */
     {
         int n;
         int distance [NMAX][NMAX];
         VILLE VILLES [NMAX];
         /* sol s; ATT : variable inutilisée */
         /* int i; ATT : variable inutilisée */
     
         n=saisirnombrevilles();
         saisirvilles(VILLES,n);
         saisirdistance (*distance,VILLES,n);
         return 0; /* ATT : ne pas oublier */
    }
     /* fonction qui saisit le nombre de villes */
     int saisirnombrevilles(void)
     {
         int N;
         do
         {
             printf("Entrez le nombre de villes:\n");
             scanf("%d",&N);
         } while ((N<1)||(N>NMAX));
         return N;
     }
     
     /* procédure permettant de saisir n villes */
     /* la ville de départ est stockée au début du tableau */
     
     void saisirvilles(VILLE *v, int n)
     {
         int i;
         printf("Entrer le nom de la ville de depart:\n");
         scanf("%s",v[0].NOM);
         printf("Entrer le code postale de la ville de depart\n");
         scanf("%d",&v[0].CODE);
         printf("%s  %d: \n",v[0].NOM,v[0].CODE);
     
         for (i=1;i<n;i++)
         {
             printf("Entrer le nom de la ville a visiter:\n");
             scanf("%s",v[i].NOM);
             printf("Enter le code de la ville a visiter:\n");
             scanf("%d",&v[i].CODE);
             printf("%s  %d\n",v[i].NOM,v[i].CODE);
         }
     }
     
     /* procédure permettant de saisir les distances */
     
     void saisirdistance (int *distance, VILLE* VILLES, int n)
     {
         int i,j=0; /* ATT : j doit être initialisé et ne changera jamais de valeurs durant cette fonction */
         for (i=0;i<n;i++)
         {
             distance[i*NMAX+1]=0; /* pas de distance d'une ville a elle meme distance [i][j]=0 */
             for (i=0;i<n;i++)
             {
                 printf("distance entre %s et %s :\n",VILLES[i].NOM,VILLES[j].NOM);
                 scanf("%d",&distance[i*NMAX+j]); /* ATT : j n'évolue jamais (j = 0) */
                 /* la matrice est symétrique:distance [j][i]=distance[i][j] */
                 distance[j*NMAX+i]=distance[i*NMAX+j]; /* ATT : j n'évolue jamais (j = 0) */
                 printf("distance entre %d et %d=%d\n",i,j,distance[i+NMAX+j]); /* ATT : j n'évolue jamais (j = 0) */
             }
         }
     }
     
     /* fonction permettant de vérifier si unr séquence est une solution cohérente */
     /* retourne 1 si valide,0 sinon */
     
     int valider (sol sequence,int n)
     {
         int test=1;
         /* int s=0; ATT : variable inutilisée */
         int i, j=0; /* ATT : j doit être initialisé et ne changera jamais de valeurs durant cette fonction */
     
         /* la ville de depart doit etre la ville numero 0 */
         if (sequence.table[0]!=0)
            return 0;
         for (i=0;i<n;i++)
         {
             /* les numéros de villes doivent varier de 1 a n-1 */
             if ((sequence.table[i]>n-1) ||(sequence.table[i]<1))
                return 0;
     
             /* les numeros de villes doivent être différents */
             for (i=0;i<n;i++)
             {
                 if (sequence.table[i]==sequence.table[j]) /* ATT : j n'évolue jamais (j = 0) */
                    return 0;
             }
         }
         return test;
     }
    Cordialement,
    Idriss

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/06/2011, 14h59
  2. probleme d'execution d'un programme
    Par SYRENE dans le forum C++Builder
    Réponses: 1
    Dernier message: 25/06/2008, 07h37
  3. probleme d'execution d'un programme
    Par back63 dans le forum Visual C++
    Réponses: 11
    Dernier message: 21/11/2006, 22h45
  4. Réponses: 20
    Dernier message: 23/06/2006, 20h49
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo