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 :

Tableau de structure


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Points : 49
    Points
    49
    Par défaut Tableau de structure
    Salut,

    Je voudrais écrire une fonction qui permet d'énumérer les différents combinaisons des variables de types structures.
    Par exemple, j'ai la structure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct
     {  
        char    sexe ;
        float   taille, poids ;
      }
        Personne ;
     
     Personne pers[3] ;

    Dans ce cas, la fonction doit retourner (pers1, pers2, pers3); (pers2, pers3, pers1); (pers3,pers1,pers2);...
    Je ne vois pas comment y procéder
    Pourriez vous m'aider en me fournissant quelques indices de réponse?

    Merci d'avance pour ceux qui m'aident.

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Plutôt que travailler sur des structures directement, tu peux travailler sur leur indices (cf wikipedia).
    Du coup, ton problème revient à compter le nombre de permutation qui existent de 0 à N-1.

    Pour déterminer le nombre de permutations sur N éléments, on peut procéder récursivement : on prend un élément de la liste, et on cherche les permutations dans le reste de la liste.
    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
    16
    liste : 0,1,2,3.
    on met 0 de côté 
      reste 1,2,3
      on met 1 de côté (0,1)
        reste 2,3
        on met 2 de côté (0,1,2)
           reste 3 --> on a une liste : 0,1,2,3
        on met 3 de côté (0,1,3)
           reste 2 --> on a une liste : 0,1,3,2
      on met 2 de côté (0,2)
        reste 1,3
        on met 1 de côté (0,2,1)
           reste 3 --> on a une liste : 0,2,1,3
        on met 3 de côté (0,2,3)
           reste 1 --> on a une liste : 0,2,3,1
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Ce qu'on peut faire intuitivement lorsqu'on dit : 
    Je cherche les listes qui commencent par 0
     Je cherche les listes qui commencent par 01
      Je cherche les listes qui commencent par 012
      0123
      Je cherche les listes qui commencent par 013
      0132

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par mabu Voir le message
    Bonjour,

    Plutôt que travailler sur des structures directement, tu peux travailler sur leur indices (cf wikipedia).
    Du coup, ton problème revient à compter le nombre de permutation qui existent de 0 à N-1.

    Pour déterminer le nombre de permutations sur N éléments, on peut procéder récursivement : on prend un élément de la liste, et on cherche les permutations dans le reste de la liste.
    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
    16
    liste : 0,1,2,3.
    on met 0 de côté 
      reste 1,2,3
      on met 1 de côté (0,1)
        reste 2,3
        on met 2 de côté (0,1,2)
           reste 3 --> on a une liste : 0,1,2,3
        on met 3 de côté (0,1,3)
           reste 2 --> on a une liste : 0,1,3,2
      on met 2 de côté (0,2)
        reste 1,3
        on met 1 de côté (0,2,1)
           reste 3 --> on a une liste : 0,2,1,3
        on met 3 de côté (0,2,3)
           reste 1 --> on a une liste : 0,2,3,1
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Ce qu'on peut faire intuitivement lorsqu'on dit : 
    Je cherche les listes qui commencent par 0
     Je cherche les listes qui commencent par 01
      Je cherche les listes qui commencent par 012
      0123
      Je cherche les listes qui commencent par 013
      0132
    Merci pour ta réponse.
    Il s'agit d'un algorithme de permutation alors?
    Nous avons vu ce ype d'algorithme pour le cas de tableau. Je ne sais pas comment faire pour le cas de variable de type de structure.
    J'ai réalisé quelques choses. Je ne sais pas si c'est juste. S'il y a des erreurs ou des corrections, n'hésitez pas à me les corriger!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fonction permutation(struct)
    debut
      si indice structure est 0 alors
        afficher la permutation
      sinon
        pour tous les éléments a du tableau structure faire
          tableau1 <- tableau - a
          permuation1 <- permutation + a
          permutation(tableau structure1, permutation1)
        fin pour
      fin si
    fin
    Merci

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Commence par écrire une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void permutation (int n)
    Qui va t'afficher si tu passes 3 :

    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1
    Ensuite, le reste de l'exercise coulera de source.

    Jc

    PS: A mon avis, ton algorithme est faux

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    Salut,

    Salut,

    Voilà, je cherche à permuter les indices des différents types tableaux de structure et les afficher.
    Je suppose que j'ai la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    typedef struct
     {  
        int x ;
        int y ;
      }
        Entrepot ;
     
     Entrepot collecte[3] ;
     Entrepot recyclage[3];
     Entrepot enfouissement[3];
    L'exécution donnera après permutation des indices de différentes types de structure:
    1 2 3
    2 3 1
    3 1 2
    ...
    Je vous supplie de m'aider à démarrer. J'ai penché dessus cet après-midi. Je n'arrive toujours pas à faire une bonne solution.Je suis bloqué

  6. #6
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    C'est quoi cette histoire ?

    D'abord c'est une permutation de personne, maintenant d'entrepot ?

    Je ne comprends plus rien...

    Il faut faire une permutation sur les indices et afficher 1,2,3.

    Que ne comprends-tu pas ?

    Jc

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par fearyourself Voir le message

    Il faut faire une permutation sur les indices et afficher 1,2,3.

    Que ne comprends-tu pas ?

    Jc
    Je ne sais pas comment faire la permutation de trois types de structures (collecte, recyclage,enfouissement) au même temps

    Merci.

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Commence par écrire une fonction qui va afficher :

    1 1 1
    1 1 2
    1 1 3
    1 2 1
    ...
    3 3 3

    Si vraiment t'es perdu :-)

    Jc

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 116
    Points : 49
    Points
    49
    Par défaut
    re-salut,

    J'ai codé cette fonction en c comme suit :

    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
     
    void afficher() 
    { 
        int i; 
        for ( i = 0; i < 3; ++i ) 
            printf( "%d ", struct entrepot[i] ); 
        printf("\n" ); 
    } 
    int num=0;
    void permutation(int indice)
    {
    int i;
    struct entrepot[indice]=num+1;
    if(num==3)
    afficher(); 
     
        for ( i = 0; i < 3; i+1 ) 
           if ( !struct entrepot[i] ) 
                permutation( i-1 ); 
        struct entrepot[indice] = 0; 
        num-1; 
    }
    Mais l'exécution ne donne pas le résultat attendu. Je ne vois pas où est l'erreur.
    Pourriez vous m'orienter SVP?
    Merci encore.

    P.S.Je suis débutant. Je dis souvent des bêtises .

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2006, 11h46
  2. Tableau de structures en parametre d'une fonction
    Par -No Comment- dans le forum C
    Réponses: 19
    Dernier message: 29/03/2006, 15h00
  3. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  4. Réponses: 9
    Dernier message: 13/02/2006, 08h39
  5. Trier un tableau de structures
    Par Yux dans le forum C
    Réponses: 7
    Dernier message: 05/11/2005, 17h28

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