Bonjour,

Je cherche à écrir une procedure qui me permetrait d'effectuer une action pour chaque combinaison de "k" chiffres pour l'enssembe "min".."max" où "k" va de "min" à "max"-1.
à préciser :
-un chiffre ne doit apparaitre qu'une seule foi par combinaison.
-l'ordre des chiffre dans les combinaisons n'a pas d'importance (12=21)

Exemple :
pour l'ensemble 1..4 je veux obtenir les combinaisons :
1
2
3
4
12
13
14
23
24
34
123
124
134
234

J'ai commencé par écrir (sous Delphi6) une procedure qui me donne toutes les combinaisont à "k" chiffre pour l'enssemble "a"-"b" mais seulement pour k=3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
min,max,a,b,c:integer;
begin
min:=strtoint(edit1.Text);
max:=strtoint(edit2.Text);
listbox1.Items.Clear;
 
for a:=min to max do
  for b:=a+1 to max do
    for c:=b+1 to max do
      listbox1.Items.Add(inttostr(a*100+b*10+c));}
 
end;
C'est un début mais je voudrait que la procedure me sorte les combinaisons pour toutes les valeurs de "k".
Je pense que mon salut se trouve dans la programmation récursive mais je ne metrise pas bien le sujet et j'ai pondu un truc bibon qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
function TForm1.combi(min,max:integer):string;
var i:integer;
begin
for i:=min to max do  begin
  result:=inttostr(i)+combi(i+1,max);
  listbox1.Items.Add(result);
end;
end;
Merci pour votre aide...