Calculer les combinaisons possibles d'une séquence

Soyez le premier à donner votre avis sur cette source.

Snippet vu 9 296 fois - Téléchargée 35 fois

Contenu du snippet

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 / Exemple :


#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);
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
9
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
10 juillet 2010

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. ;)
Messages postés
9
Date d'inscription
dimanche 20 mai 2007
Statut
Membre
Dernière intervention
10 juillet 2010

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 !
Messages postés
5
Date d'inscription
mardi 21 novembre 2006
Statut
Membre
Dernière intervention
30 janvier 2009

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
Messages postés
9
Date d'inscription
lundi 24 octobre 2005
Statut
Membre
Dernière intervention
3 décembre 2005

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
Messages postés
40
Date d'inscription
mardi 8 novembre 2005
Statut
Membre
Dernière intervention
9 mai 2007

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.
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.