begin process at 2012 02 07 08:51:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > CALCULER LES COMBINAISONS POSSIBLES D'UNE SÉQUENCE

CALCULER LES COMBINAISONS POSSIBLES D'UNE SÉQUENCE


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Maths & Algorithmes Niveau :Initié Date de création :18/08/2004 Vu :5 545

Auteur : zinou76

Ecrire un message privé
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);
}



 Sources de la même categorie

Source avec Zip UN EXAMPLE D'APPLICATION EN CUDA DE L'ALGORITHME DE SCAN POU... par oguzaras
Source avec Zip Source avec une capture CHIFFREMENT DE VIGENERE par lajouad
Source avec Zip Source avec une capture ANALYSE SYNTAXIQUE par lajouad
Source avec Zip Source avec une capture STRUCTURE D'UNE MATRICE PAR LES LISTE LINÉAIRE (NON CONTUGUS... par benzarabel
Source avec Zip Source avec une capture DESSINER UNE ARBRE BINAIRE( MODE CONSOLE): par benzarabel

Commentaires et avis

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.

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.

Commentaire de zinou76 le 19/08/2004 15:45:53

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

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.

Commentaire de pinderlot le 19/08/2004 16:53:37

lol.

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

Commentaire de BlackGoddess le 20/08/2004 10:53:38

main()
{
...
}

=>

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

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.

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

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

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 !

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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,780 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales