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 :

Faire ressortir un tableau de 40 combinaisons prédéfinies avec 10 nombres


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut Faire ressortir un tableau de 40 combinaisons prédéfinies avec 10 nombres
    Bonjour,

    Je débute dans la programmation en Cet j'aurais besoin de quelques astuces.
    Je vais essayer d'être le plus explicite possible.

    J'ai recensé 40 combinaisons récurrentes pour un jeu :

    a,b,c/d,e,a/c,b,f...

    Avec une sélection de 10 nombres, j'aimerais que mon programme m'établisse une liste de mes 40 combinaisons à jouer, en sachant que :

    — j'ai une sélection de 10 nombres : 1,2,3,4,5,6,7,8,9,10
    — j'ai 40 combinaisons pré-établies à définir dans le programme :

    a,b,c/d,e,a/c,b,f.....

    et que chaque lettre a son rang:
    le a est le chiffre 1
    le b est le chiffre 2
    .........................
    le j est le chiffre 10

    et enfin le tableau devra me donner les combi : 1-2-3
    4-5-1
    3-2-6 ... à jouer.

    Merci à tous et bonne continuation au forum.

    Cordialement
    guigui30

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour,
    Écris tes structures de données et méthodes d'accès, ca ira tout seul.

    Il te faut donc:
    • un type pour les indices (tes a, b, c...): indice_t
    • une fonction pour traduire un indice en nombre (int valeur_indice(indice_t))
    • un type pour représenter une combinaison (liste chainée? tableau? tableau avec valeur de fin?)
    • une fonction pour creer une combinaison
    • selon le cas, une fonction pour detruire une combinaison (si une allocation dynamique est faite à la création)
    • une fonction pour afficher une combinaison
    • un type pour représenter un ensemble de combinaison (liste chainée? tableau? tableau avec valeur de fin?)
    • une fonction pour creer un ensemble une combinaison
    • selon le cas, une fonction pour detruire un ensemble de combinaison
    • une fonction pour afficher un ensemble de combinaison


    ton main sera tres proche de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int main() {
        ensemble_combinaison combinaisons = creer_ensemble();
        ajouter(combinaisons, creer_combinaison(...));
        ajouter(combinaisons, creer_combinaison(...));
    //ou mieux encore
        ajouter_combinaison(combinaisons, ...);
        ajouter_combinaison(combinaisons, ...);
     
        afficher_ensemble(combinaisons);
        detruire_ensemble(combinaisons);
    }
    Ce qui te permettra normalement de modifier le programme tres simplement pour lire un fichier de données décrivant ces combinaisons

  3. #3
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut tableau de combi
    Merci yEd

    Je vais potasser cela ,j apprendrai mes erreurs au fur et a mesure

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Au plaisir, n'hésite pas à repasser.

    Au passage, yEd est un outil que je recommande, mais n'est pas mon nom, et ce n'est pas non plus mon œuvre.

  5. #5
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Par défaut tres bon lien
    http://jm.davalan.org/mots/comb/comb/combalgo.html

    au fait combinaison de 3 dans 10 sans ordre c est 120 ( factoriel(10) divisé par factoriel(10-3) fois factoriel( 3 ) ). Donc il faudra arreter le output quand il te convient, soit a 40 .

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Ce n'est pas n'importe qu'elles combinaisons, qu'il souhaite, mais une liste bien précise.

  7. #7
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Par défaut salut,
    Citation Envoyé par leternel Voir le message
    Ce n'est pas n'importe qu'elles combinaisons, qu'il souhaite, mais une liste bien précise.
    autant pour moi
    alors le factoriel(3) au denominateur est de trop , Le lien donné traite d a peu pres tous les cas .

    meme dans l ordre le resultat depasse largement les 40 , soit 720 .

    Dans tous les cas il faudra , trouver un moyen de demander l arret de la fonction recursive.

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par guigui30 Voir le message
    J ai recensser 40 combinaisons recurentes pour un jeu:
    a,b,c/d,e,a/c,b,f...
    Citation Envoyé par guigui30 Voir le message
    j ai 40 combinaisons preetablies a definir dans le programme
    Il n'y a là aucune combinatoire, il a toute les données.

  9. #9
    Membre actif
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mai 2013
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2013
    Messages : 42
    Par défaut haaa le mythe la seule raison raisonnable !!
    Soit 1. il rempli lui meme , ces tableau . ou une fonction non recursive ( lien ) La il n a pas besoin de cette information C de 3 dans 10 .

    2. Soit il utilise la fonction recursive (lien), la il a forcement besoin de savoir que combinaison de 3 dans 10 , c est pas 40 mais 720 dans l ordre , pour pouvoir specfier une condition d arret (a 40 pour ne pas laisser la fonction tourner jusqu a 720 ), soit dans la fonction , soit hors !

  10. #10
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Guigui30 nous explique qu'il est débutant, et qu'il veut juste faire une traduction de quelques données.

    Je lui conseille d'avoir recours à une représentation intelligente de ces données pour que le code soit simple à écrire.
    Car la maxime de Boileau est la clé du C.
    Citation Envoyé par Boileau
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire viennent facilement.
    Si tu comprends ton problème, et que tu écris les bonnes représentations de donnés, le code sera simple.

    Toi, tu nous dis qu'il doit calculer les 40 premières permutations. C'est sans rapport, vu qu'il les a déjà, et qu'il ne veut pas les 40 premières.
    (Et en plus, il n'a jamais dis que ce sont que des triplets…)

    C'est bien de venir aider, c'est mieux de comprendre le problème.

    Sur ce, guigui30, tu auras sûrement besoin de listes chainées, ou de tableau gardé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct list {
        struct list* suivant;
        int value;
    };
     
    struct guarded_array {
        int *values;
        int max, last;
    };
    N'hésite pas à poser des questions à ce sujet.

  11. #11
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut combinaison
    Salut à tous

    effectivement j'ai déjà mes 40 combinaisons établies et qui sont toutes des triplets.
    J'aimerai simplement remplacer mes combinaisons triplets par les nombres correspondant de ma sélection de 10 nombres du départ.

    ex: selection 1,2,3,4,5,6,7,8,9,10

    combi: a,b,c d,e,a f,d,j ........jusqu'à la 40ème combinaison

    en sachant que a=le 1 b=le 2 j=le 10

    il faut que si je rentre la sélection :

    2,6,7,10,14,4,5,16,1,17

    le programme me ressort mes combinaison préétablies:

    2,6,7 équivalent à la combi a,b,c
    10,14,2 équivalent à la combi d,e,a
    4,10,17 équivalent à la combi f,d,j

    est-ce plus clair pour vous ?

    merci encore à toute la communauté
    ps: désolé leternel pour l'erreur sur ton nom

    cordialement
    guigui30

  12. #12
    Candidat au Club
    Homme Profil pro
    Collégien
    Inscrit en
    Juin 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juin 2013
    Messages : 4
    Par défaut resolu par permutation
    Bonjour a tous

    j ai reussi a faire mon petit prog en C en voici le contenu il reste un peu de travail mais j ai ce qu il me faut:

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
      int a, b, c, d, e, f, g, h, i, j, combi, inter;
     
      //saisie
      printf("Entrez les nombres : ");
       if(scanf("%d%d%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &combi) != 10){
           printf("erreur de saisie\n");
           exit(1);
      }
     
    printf("a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d\n", a, b, c, d, e, f, g, h, i, j);
     
      /*permutation */
      inter = a,b,c;
      a = a;
      b = b;
      c = c;
      combi = inter;
     
      /*affichage du resultat*/
      printf("%d,%d,%d     combi 1=%d\n", a, c, b, combi ); /* combinaison 1/40  */
      printf("%d,%d,%d     combi 2=%d\n", b, e, a, combi ); /* combinaison 2/40  */
      printf("%d,%d,%d     combi 3=%d\n", c, d, a, combi ); /* combinaison 3/40  */
      printf("%d,%d,%d     combi 4=%d\n", a, d, e, combi ); /* combinaison 4/40  */
      printf("%d,%d,%d     combi 5=%d\n", c, d, b, combi ); /* combinaison 5/40  */
      printf("%d,%d,%d     combi 6=%d\n", c, h, b, combi ); /* combinaison 6/40  */
      printf("%d,%d,%d     combi 7=%d\n", b, d, h, combi ); /* combinaison 7/40  */
      printf("%d,%d,%d     combi 8=%d\n", b, g, e, combi ); /* combinaison 8/40  */
      printf("%d,%d,%d     combi 9=%d\n", d, f, c, combi ); /* combinaison 9/40  */
      printf("%d,%d,%d     combi 10=%d\n", c, h, i, combi ); /* combinaison 10/40  */
      printf("%d,%d,%d     combi 11=%d\n", c, g, b, combi ); /* combinaison 11/40  */
      printf("%d,%d,%d     combi 12=%d\n", d, i, g, combi ); /* combinaison 12/40  */
      printf("%d,%d,%d     combi 13=%d\n", b, e, f, combi ); /* combinaison 13/40  */
      printf("%d,%d,%d     combi 14=%d\n", b, h, a, combi ); /* combinaison 14/40  */
      printf("%d,%d,%d     combi 15=%d\n", b, d, j, combi ); /* combinaison 15/40  */
      printf("%d,%d,%d     combi 16=%d\n", c, e, a, combi ); /* combinaison 16/40  */
      printf("%d,%d,%d     combi 17=%d\n", a, g, d, combi ); /* combinaison 17/40  */
      printf("%d,%d,%d     combi 18=%d\n", d, b, f, combi ); /* combinaison 18/40  */
      printf("%d,%d,%d     combi 19=%d\n", b, f, a, combi ); /* combinaison 19/40  */
      printf("%d,%d,%d     combi 20=%d\n", b, j, a, combi ); /* combinaison 20/40  */
      printf("%d,%d,%d     combi 21=%d\n", a, f, e, combi ); /* combinaison 21/40  */
      printf("%d,%d,%d     combi 22=%d\n", a, f, g, combi ); /* combinaison 22/40  */
      printf("%d,%d,%d     combi 23=%d\n", d, h, c, combi ); /* combinaison 23/40  */
      printf("%d,%d,%d     combi 24=%d\n", a, f, d, combi ); /* combinaison 24/40  */
      printf("%d,%d,%d     combi 25=%d\n", c, g, a, combi ); /* combinaison 25/40  */
      printf("%d,%d,%d     combi 26=%d\n", a, i, d, combi ); /* combinaison 26/40  */
      printf("%d,%d,%d     combi 27=%d\n", a, f, c, combi ); /* combinaison 27/40  */
      printf("%d,%d,%d     combi 28=%d\n", e, b, c, combi ); /* combinaison 28/40  */
      printf("%d,%d,%d     combi 29=%d\n", b, g, f, combi ); /* combinaison 29/40  */
      printf("%d,%d,%d     combi 30=%d\n", f, b, c, combi ); /* combinaison 30/40  */
      printf("%d,%d,%d     combi 31=%d\n", c, a, h, combi ); /* combinaison 31/40  */
      printf("%d,%d,%d     combi 32=%d\n", c, h, f, combi ); /* combinaison 32/40  */
      printf("%d,%d,%d     combi 33=%d\n", g, f, j, combi ); /* combinaison 33/40  */
      printf("%d,%d,%d     combi 34=%d\n", a, h, i, combi ); /* combinaison 34/40  */
      printf("%d,%d,%d     combi 35=%d\n", b, e, i, combi ); /* combinaison 35/40  */
      printf("%d,%d,%d     combi 36=%d\n", e, d, h, combi ); /* combinaison 36/40  */
      printf("%d,%d,%d     combi 37=%d\n", a, j, i, combi ); /* combinaison 37/40  */
      printf("%d,%d,%d     combi 38=%d\n", a, f, i, combi ); /* combinaison 38/40  */
      printf("%d,%d,%d     combi 39=%d\n", b, e, j, combi ); /* combinaison 39/40  */
      printf("%d,%d,%d     combi 40=%d\n", g, d, i, combi ); /* combinaison 40/40  */
     
      return 0;
    }
    Merci beaucoup pour l aide

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    La méthode "polyvalente" serait de définir tes combinaisons en tant que données, et par exemple les utiliser ensuite comme indexes de tableau (a à l'index 0, ..., j à l'index 9)
    Code C : 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
    const size_t combisPredefinies[40][3] = {
    {0, 2, 1},
    {1, 4, 0},
    {2, 3, 0},
    {0, 3, 4},
    {2, 3, 1},
    {2, 7, 1},
    {1, 3, 7},
    {1, 6, 4},
    {3, 5, 2},
    {2, 7, 8},
    {2, 6, 1},
    {3, 8, 6},
    {1, 4, 5},
    {1, 7, 0},
    {1, 3, 9},
    {2, 4, 0},
    {0, 6, 3},
    {3, 1, 5},
    {1, 5, 0},
    {1, 9, 0},
    {0, 5, 4},
    {0, 5, 6},
    {3, 7, 2},
    {0, 5, 3},
    {2, 6, 0},
    {0, 8, 3},
    {0, 5, 2},
    {4, 1, 2},
    {1, 6, 5},
    {5, 1, 2},
    {2, 0, 7},
    {2, 7, 5},
    {6, 5, 9},
    {0, 7, 8},
    {1, 4, 8},
    {4, 3, 7},
    {0, 9, 8},
    {0, 5, 8},
    {1, 4, 9},
    {6, 3, 8}
    };
    Ensuite, tu peux utiliser tes 40 combinaisons prédéfinies (sur 120 possibles) pour afficher:
    Code C : 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
    int main(void)
    {
    	int tab[10];
    	int nbLus;
    	size_t ixComb;
     
    	/*saisie*/
    	printf("Entrez les nombres : ");
    	fflush(stdout);
    	nbLus = scanf("%d%d%d%d%d%d%d%d%d%d",
    	 &tab[0], &tab[1], &tab[2], &tab[3], &tab[4],
    	 &tab[5], &tab[6], &tab[7], &tab[8], &tab[9]);
    	if(nbLus != 10){
    		printf("erreur de saisie\n");
    		return EXIT_FAILURE;
    	}
     
    	printf("a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d, j=%d",
    	 tab[0], tab[1], tab[2], tab[3], tab[4],
    	 tab[5], tab[6], tab[7], tab[8], tab[9]);
     
    	for(ixComb=0 ; ixComb<40 ; ixComb++) {
    		size_t index0 = combisPredefinies[ixComb][0];
    		size_t index1 = combisPredefinies[ixComb][1];
    		size_t index2 = combisPredefinies[ixComb][2];
    		char lettre0 = (char)('a' + index0);
    		char lettre1 = (char)('a' + index1);
    		char lettre2 = (char)('a' + index2);
    		int numAffiche = (int)(ixComb+1);
    		printf("Combi %d: %c=%d, %c=%d, %c=%d\n", numAffiche,
    		 lettre0, tab[index0], lettre1, tab[index1], lettre2, tab[index2]);
    	}
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 16
    Dernier message: 05/10/2006, 16h51
  2. Faire scroller un tableau
    Par JCD_31 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 21/06/2006, 09h23
  3. Faire un joli tableau HTML d'un XML via XSL
    Par FreddyP dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/03/2006, 12h43
  4. Réponses: 1
    Dernier message: 03/03/2006, 13h53
  5. faire d'un tableau un lien
    Par jack1234 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/10/2005, 02h01

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