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 :

fonction structure c


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut fonction structure c
    salut

    je veut ecrire une fonction permettant de remplir un tableau qui contient toutes les capitale du continent africain (par exemple) a partir d'un autre tableau structure deja rempli .
    (la capitale est la ville qui a le plus grand nombre d'habitant)
    structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct geo
    {    char ville[20];
         char pays[20];
         char continent[20];
         int nhab;
    };
    struct geo t[200] ;
    fonction:
    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
    int trouver_capitales()
    {int i,j,k,l,m;
     struct geo p[200];
     i=j=k=l=m=0;
       for(i=0;i<nb_v;i++)
       { k=i;
          if(strcmp(t[i].continent,"afrique")==0)
            { k=i;
              for(j=i;j<nb_v;j++)
               { if((strcmp(t[i].pays,t[j].pays)==0)&&(t[j].nhab>t[i].nhab))
                  { k=j;
                  }
               }
            }
         for(l=0;l<=m;l++)
           { if(strcmp(t[k].pays,p[l].pays)!=0)
              { strcpy(p[m].pays,t[k].pays);
                strcpy(p[m].ville,t[k].ville);
                m++;
              }
           }
        }
    for(l=0;l<=m;l++)
      { printf(" %s |",p[l].ville);
      }
    return m;
    }
    je sais cette fonction est nulle mais j parvient pas a trouver la bonne toujours y en a une faute quelque part .

    muchas gracias
    merci d'avance

  2. #2
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    1) Généralement, les gens poste des questions sans code.

    Là il y a du code sans question...

    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int trouver_capitales()
    Il faut mettre des paramètres à une fonction. Au pire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int trouver_capitales(void)
    s'il n'y a pas de paramètre.

    3)
    y en a une faute quelque part.
    -> Heu, oui, la vie est compliquée... tout ça...tout ça...
    Sinon techniquement, c'est quoi l'erreur: est-ce que cela compile ?
    Est-ce un problème d'exécution ?

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Bayard
    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int trouver_capitales()
    Il faut mettre des paramètres à une fonction. Au pire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int trouver_capitales(void)
    s'il n'y a pas de paramètre.
    Je suis d'accord avec toi, toutefois définir une fonction sans paramètres comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int trouver_capitales()
    {
        /* instructions */
    }
    est tout à fait légal.

    <parenthèse HS>

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    void ma_fonction(void);
     
    int main(void)
    {
        ma_fonction(void);
        return 0;
    }
     
    void ma_fonction()
    {
        puts("Bienvenue sur Developpez!\n");
    }
    Ce programme compile sans erreur avec gcc et l'option -Wstrict-prototypes. En revanche, lorsqu'on définit une fonction de cette manière, la définition ne peut faire office de déclaration sous forme de prototype et le programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
     
    void ma_fonction()
    {
        puts("Bienvenue sur Developpez!\n");
    }
     
    int main(void)
    {
        ma_fonction(void);
        return 0;
    }
    compilé avec gcc et l'option -Wstrict-prototypes donne l'avertissement suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :: === forums, Debug ===
    /home/thierry/devel/forums/main.c:6: attention : function declaration isn»t a prototype
    :: === Build finished: 1 errors, 0 warnings ===
    </parenthèse HS>


    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    En dehors des questions posées par mes prédecesseurs, il y a un gros point noir de départ dans tes hypothèses :

    Citation Envoyé par k.cheker
    salut
    ...
    (la capitale est la ville qui a le plus grand nombre d'habitant)
    Si tu démarres là-dessus, c'est totalement faux, dans la quasi-totalité des pays, à quelques exceptions près :

    Pays-Bas : capitale La Haye, plus grosse ville Amsterdam
    Etat-Unis : plus grosse ville LA ? ou NY ? capitale Washington
    Brésil : capitale Brasilia plus grosse ville Sao Paulo

    etc. etc...

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par souviron34
    En dehors des questions posées par mes prédecesseurs, il y a un gros point noir de départ dans tes hypothèses :



    Si tu démarres là-dessus, c'est totalement faux, dans la quasi-totalité des pays, à quelques exceptions près :

    Pays-Bas : capitale La Haye, plus grosse ville Amsterdam
    Etat-Unis : plus grosse ville LA ? ou NY ? capitale Washington
    Brésil : capitale Brasilia plus grosse ville Sao Paulo

    etc. etc...
    Allez, j'agite mon petit drapeau en ajoutant:

    La Suisse: capitale Berne, plus grande ville Zürich, suivie de Genève

    Le P.O veut représenter les capitales du continent africain de cette manière. Peut-être n'y a-t'il pas autant de contre-exemples mettant à mal la validité de son algorithme sur ce continent?

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mujigka
    Peut-être n'y a-t'il pas autant de contre-exemples mettant à mal la validité de son algorithme sur ce continent?

    euhhhhhh !!! Maroc : capitale Rabat plus grande ville Casablanca .... (pas pour toi, mais pour le PO ;-) )

  7. #7
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    Tout le monde prend comme sens à capitale la capitale politique, ça peut aussi être la capitale industrielle, financière ...
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  8. #8
    Membre éclairé Avatar de femtosa
    Inscrit en
    Juin 2002
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 253
    Par défaut
    Citation Envoyé par souviron34
    Pays-Bas : capitale La Haye, plus grosse ville Amsterdam
    Effectivement tu parles de quel capitale là... ?!

    Parce qu'officiellement, la capitale des pays-bas c'est bien Amsterdam ... Et la Haye plutôt capitale adimistrative ...

    Citation Envoyé par mujigka
    Allez, j'agite mon petit drapeau en ajoutant:

    La Suisse: capitale Berne, plus grande ville Zürich, suivie de Genève
    +1 pour la Suisse !

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par femtosa
    Effectivement tu parles de quel capitale là... ?!

    Parce qu'officiellement, la capitale des pays-bas c'est bien Amsterdam ... Et la Haye plutôt capitale adimistrative ...
    OK pour les Pays-Bas, mais mes autres sont bons :-)

    Et en général, quand on parle de la capitale d'un pays, c'est le siège du gouvernement. (voir http://fr.wikipedia.org/wiki/Liste_d...tales_du_monde)

  10. #10
    Membre averti
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    48
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 48
    Par défaut
    salut tout le monde

    cette discution ne mene a rien, mon probleme est "comment resoudre ce type de probleme".

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    ben forcément avec la structure que tu as choisi il n'y aura pas de jolis algorithmes, vu qu'il faut que tu passes à travers tout ton tableau.

    Compte-tenu de ta définition de capitale, avec laquelle je ne suis pas d'accord (tu vas trouver la ville qui a le plus grand nombre d'habitants par pays, pas la capitale), tu peux faire comme ceci (je garde tes structures, bien qe ce ne soit pas adapté (ça complexifie énormément les algos, ça utilise de la mémoire pour rien)):


    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
     
    /*
    *  *t              Pointeur sur le tableau de villes
    *   nstruct      nb villes
    *   *Capitales  Pointeur sur tableau de capitales (alloué à l'extérieur)
    *   
    *   Retourne le nombre de capitales trouvées, ou -1 si erreur
    *
    */
    int Trouve_Plus_Grandes_Villes ( struct geo *t, int nstruct, struct geo *Capitales )
    {
        int    i, j ;
        int    ind ;
        int    numCap = 0 ;
        int  *Done = NULL ;  /* indicateur que c'est fait pour ce pays */
     
        Done = malloc(nstruct);
        if ( Done == NULL )
          {
             fprintf ( stderr, "Erreur mémoire\n");
             return -1 ;   /* Code d'erreur */ 
          }
     
       /* Initialisation */
       for ( i = 0 ; i < nstruct ; i++ )
          Done[i] = 0 ;
     
        /* Boucle */ 
        for ( i = 0 ; i < nstruct ; i++ )
          {
               if ( Done[i] )    /* On a déjà fait ce pays */
                  continue ;
     
               ind = i ;
               Done[i] = 1 ;
     
               for ( j = 0 ; j < nstruct ; j++ )
                   {
                        if ( (j != i) && (Done[j] == 0) )
                          {
                              if ( strcmp ( t[j].pays, t[i].pays ) == 0 )
                                {
                                     Done[j] = 1 ;
     
                                     if ( t[j].nhab > t[ind].nhab )
                                       {
                                          ind = j ;
                                       }
                                }
                          }
                   }
     
              strcpy ( Capitales[numCap].continent, t[ind].continent );
              strcpy ( Capitales[numCap].pays, t[ind].pays );
              strcpy ( Capitales[numCap].ville, t[ind].ville );
              Capitales[numCap].nhab = t[ind].nhab ;
              numCap = numCap + 1 ;
         }
     
       free(Done);
     
       return numCap ;
    }
    Mais ce n'est vraiment pas la structure adaptée..

    Tu ferais mieux de faire un tableau de continents, un tableau de structures pays avec un pointeur (ou indice) sur le continent, et un tableau de structures villes avec un pointeur (ou indice) sur le pays.

    Exemple :

    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
     
    typedef struct Mon_Continent_p {
          char nom[20]
    } Mon_Continent ;
     
    typedef struct Mon_Pays_p {
          char                 nom[20] ;
          Mon_Continent *cont ;
          void                *Capitale ;
    } Mon_Pays ;
     
    typedef struct Ma_Ville_p {
          char           nom[20] ;
          Mon_Pays  *pays ;
    }  Ma_Ville ;

Discussions similaires

  1. Création de fonction - Structure d'une trame - vb 2008
    Par hunteshiva dans le forum VB.NET
    Réponses: 7
    Dernier message: 13/04/2010, 14h28
  2. désallocation mémoire - fonction - structure - tableau dynamique
    Par Flaherty Mc Coillean dans le forum Débuter
    Réponses: 2
    Dernier message: 25/11/2009, 17h42
  3. paramètres fonction structures pointeurs
    Par tom31 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/01/2008, 18h22
  4. fonction, structure
    Par k.cheker dans le forum C
    Réponses: 12
    Dernier message: 25/03/2007, 06h35
  5. Fonction, structure, pointeurs et scanf
    Par exhortae dans le forum C
    Réponses: 13
    Dernier message: 27/02/2007, 17h31

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