Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CALCULER LES COMBINAISONS POSSIBLES D'UNE SÉQUENCE


Information sur la source

Catégorie :Maths & Algorithmes Niveau : Initié Date de création : 18/08/2004 Vu : 2 874

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

Description

Ce code permet à partir d'une séquence de chiffres ou de lettres de donner tt les combinaisons possibles qu'on peut faire avec
Ex: séquence -> 1,2,3
les combin. possibles: 123 / 132 / 213 / 231/ 312/ 321

on met la séquence à combiner dans un tableau, puis en appel un fonction récursive.

Cette fonction part du principe qu'on fixe le premier élément puis on le combine avec le reste, ensuite on fixe le 2eme ...

Ex: soit la séquence {1,2,3,4}
dabord on fixe le 1 ->on fixe le 2 ->on combine le 3 et le4
ensuite ->on fixe le 3 ->on combine le 2 et le 4
->on fixe le 4 ->on combine le 2 et le 3
ensuite on fixe le 2 -> ..
..
etc

Place au code maintenant:
 

Source

  • #include <stdio.h>
  • void print_tab(unsigned char tab[],int size_tab)
  • {
  • int i;
  • for(i=0;i<size_tab;i++)
  • printf("%d",tab[i]);
  • printf("\n"); //retour à la ligne
  • }
  • void permute(unsigned char tab[],unsigned char i,unsigned char j)
  • {
  • unsigned char c;
  • c=tab[i];
  • tab[i]=tab[j];
  • tab[j]=c;
  • }
  • void combin(unsigned char tab[],int i, int size_tab)
  • {
  • unsigned char j;
  • if (i==size_tab)
  • {
  • print_tab(tab,size_tab);
  • }
  • else
  • for(j=i;j<size_tab;j++)
  • {
  • permute(tab,i,j);
  • combin(tab,i+1,size_tab);
  • permute(tab,i,j);
  • }
  • }
  • main()
  • {
  • unsigned char tab[]={1,2,3,4};
  • combin(tab,0,4);
  • }
#include <stdio.h>

void print_tab(unsigned char tab[],int size_tab)
{
int i;

for(i=0;i<size_tab;i++)
printf("%d",tab[i]);
printf("\n"); //retour à la ligne
}

void permute(unsigned char tab[],unsigned char i,unsigned char j)
{
unsigned char c;

c=tab[i];
tab[i]=tab[j];
tab[j]=c;

}

void combin(unsigned char tab[],int i, int size_tab)
{
unsigned char j;

if (i==size_tab)
{
print_tab(tab,size_tab);
}
else
for(j=i;j<size_tab;j++)
{
permute(tab,i,j);
combin(tab,i+1,size_tab);
permute(tab,i,j);
}
}

main()
{
unsigned char tab[]={1,2,3,4}; 

combin(tab,0,4);
}

Commentaires et avis

signaler à un administrateur
Commentaire de Xs le 18/08/2004 17:16:22

Si je ne m'abuse pas, c'est tout simplement le nombre de parties de ton ensemble :

Si ton ensemble contient 5 "scalaires" (une chaine de caracteres peut etre considérée comme un scalaire, ici seulement hein), tu auras alors 2^5

Plus généralement, dans un ensemble U de n élements, tu as 2^(card U) = 2^n

Rectifiez moi si je me trompe.

signaler à un administrateur
Commentaire de pinderlot le 19/08/2004 13:19:25

Euh... bin non ce n'est pas 2^5. c plutôt 5! (factorielle 5). donc pour n=5 ca fait 24.

Dans un ensemble de n éléments, il y a n! combinaisons.

signaler à un administrateur
Commentaire de zinou76 le 19/08/2004 15:45:53

Oui c exactement ça. Pour un ensemble de n, on a n! combinaisons possible

signaler à un administrateur
Commentaire de Xs le 19/08/2004 15:58:00

Rholalal c'est bien ce qui me semblait : stats, probas, dénombrement, etc... j'ai vraiment rien capté :D (bon j'ai ptête pas tout écouté non plus c'est vrai :D)

merci.

signaler à un administrateur
Commentaire de pinderlot le 19/08/2004 16:53:37

lol.

"rien ne sert d'écouter, il faut capter..." pour parodier une certaine fable.

signaler à un administrateur
Commentaire de BlackGoddess le 20/08/2004 10:53:38

main()
{
...
}

=>

int main()
{
...
return 0;
}

signaler à un administrateur
Commentaire de Strick9 le 09/11/2005 19:34:45

pouvez vous transformer ce code source ainsi il sera possible d'effectuer des combinaison de n éléments

main()
{
unsigned char tab[]={1,2,3,4};
  
combin(tab,0,4);
}
au lieu de 4 éléments seulements. Merci d'avance.

signaler à un administrateur
Commentaire de kritical le 01/12/2005 21:56:20

void combin(unsigned char tab[],int i, int size_tab)
{
unsigned char j;
  
if (i==size_tab)
{
print_tab(tab,size_tab);
}
else
for(j=i;j<size_tab;j++)
{
permute(tab,i,j);
combin(tab,i+1,size_tab);
permute(tab,i,j);
}
g pas comris la recusrsivité de cette foction
qq peut m'expliquer car g un petit probleme avec les fonctions
recursifs

signaler à un administrateur
Commentaire de asma11 le 24/12/2008 17:58:21

bonjour,
j'ai pas compris cette partie du programme  :  
combin(tab,i+1,size_tab); permute(tab,i,j);
je veux dire apres avoir terminer la partie combin on reviens à permute surtout que quand on enleve cette partie il y a repetion

merci de votre aide

signaler à un administrateur
Commentaire de Virlorigie le 25/03/2009 02:22:52 8/10

Bonjour,
Votre code me semble intéressant me concernant ça pourrait m'être utile. J'ai réussi à le compiler avec Borland  C++ Compiler 5.5 sans problème après modification selon les recommandations de Blackgoddess.
Cependant, quand je veux lancer mon .exe il ne se lance pas...

Auriez-vous une suggestion à me proposer ?

Merci beaucoup par avance. Et bravo pour votre code !

signaler à un administrateur
Commentaire de Virlorigie le 25/03/2009 16:28:34

Bonjour,

Désolée du dérangement, j'ai trouvé mon erreur, je ne lançais pas le programme correctement, ça marche très bien.

Mes petites remarques en tant qu'utilisatrice et débutante en programmation :
- C'est dommage que les chiffres sont imposés de 1 à 4 et qu'on ne puisse pas saisir les chiffres puis demander toutes les combinaisons de ce qu'on a choisi. Bien entendu, j'ai testé en changeant dans le code même les chiffres 1, 2, 3 et 4 par d'autres pour voir et ça marche très bien.
- Dans ta description tu nous mets ceci :
"Ce code permet à partir d'une séquence de chiffres ou de lettres de donner tt les combinaisons possibles qu'on peut faire avec"
Cependant, cela ne semble concerner que les chiffres et de façon imposée puisqu'à aucun moment le programme me demande de saisir quoi que ce soit, il me donne directement la combinaison de ce qui est contenu dans le programme.
A moins d'une erreur de mon côté ?

Bravo en tout cas pour ce bout de code.

PS : je t'ai mis 8/10 tout de même. Bien que y'aurai des petites choses à améliorer me semble-t-il. ;)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.