Frank_klein
Messages postés34Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention 8 février 2022
-
31 juil. 2008 à 12:15
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
2 août 2008 à 23:35
Bonjour,
J'ai cherché sur le forum des exemples sur le calcul des combianaisons, mias sans succès, sur Google aussi, je n'ai trouvé que des exemples en visual basic, est il possible de faire des calculs de combinasion avec delphi, je conais la formule mathematique mais je n'arrive pas à l'appliquer dans le code. Si quelqu'un a une idée, je le remerci d'avance.
var nombre : integer;
tb,compt: array[0..10] of integer;
Function Choix(n,nb : integer): string;
var i,j,sortir,chiffre0 : integer;
texte : string;
begin
texte:='';
chiffre0:=ord('0');
for i:=0 to n-1 do tb[i]:=0; // On efface la réservation de la case
if nb=0 then
begin // Si nb=0, on veut commencer au début
for i:=0 to n-2 do compt[i]:=0; // On choisit la première solution
end else
begin // nb<>0, on continu depuis la dernière valeur
//On ajoute 1 au compteur
j:=n-2;
sortir:=0;
repeat // Gestion de l'addition du compteur
compt[j]:=compt[j]+1;
if compt[j]>(n-1-j) then
begin
compt[j]:=0;
j:=j-1;
end else sortir:=1;
until (j<0) or (sortir=1);
end;
// Sélection des nombres pour la sortie
for i:=0 to n-2 do
begin
j:=0;
sortir:=0;
repeat
if Tb[j]=0 then sortir:=sortir+1;
j:=j+1;
until (sortir-1)=compt[i]; // j-1 est le nombre choisit
texte:=texte+chr(chiffre0+j);
tb[j-1]:=1; // le chiffre à été choisit donc il ne sera plus repris
end; // On vient de choisir les n-1 termes
// On doit maintenant rechercher le seul qui n'a pas été utilisé
i:=0;
sortir:=0;
repeat
if tb[i]=0 then
begin
texte:=texte+chr(chiffre0+i+1);
sortir:=1;
end else i:=i+1;
until sortir=1;
Choix:=texte;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var txt,txt1 : string;
begin
nombre:=strToint(Form1.Edit1.Text);
txt:=Choix(nombre,0);
Form1.Memo1.Lines.Add(txt);
repeat
txt1:=choix(nombre,1);
if txt1<>'' then Form1.Memo1.Lines.Add(txt1);
until (txt=txt1) or (txt1='');
// Form1.Memo1.Lines.Add('Terminé');
end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 31 juil. 2008 à 19:39
voilà un petit code que j'ai écrit et qui me sers dans mes jeux :
procedure TFMain.Button1Click(Sender: TObject);
var
i, j, k, l, m, n, nnpg, nnds, sto: integer;
COMBI: array[1..28] of string;
begin
nnds := 8;
sto := 0;
ListBox1.Clear;
for i := 1 to nnds do
for j := i to nnds do
for k := j to nnds do
for l := k to nnds do
for m := l to nnds do
for n := m to nnds do
if ((i <> j) and (i <> k) and (i <> l) and (i <> m) and (i <> n))
and ((j <> i) and (j <> k) and (j <> l) and (j <> m) and (j <> n))
and ((k <> i) and (k <> j) and (k <> l) and (k <> m) and (k <> n))
and ((l <> i) and (l <> j) and (l <> k) and (l <> m) and (l <> n))
and ((m <> i) and (m <> j) and (m <> k) and (m <> l) and (m <> n)) then
begin
sto := sto + 1;
COMBI6[sto] := IntToStr(i) + ';' + IntToStr(j)
+ ';' + IntToStr(k) + ';' + IntToStr(l)
+ ';' + IntToStr(m) + ';' + IntToStr(n);
ListBox1.Items.Add(COMBI6[sto]);
end
else
continue;
end;
Oniria
Messages postés292Date d'inscriptiondimanche 14 mars 2004StatutMembreDernière intervention18 décembre 20143 31 juil. 2008 à 21:35
Bonjour,
je crois que je vais devoir retourner à l'école :) Moi et les stats, j'ai vraiment du mal à comprendre. Mais bon quand j'ai fait ce code, j'avais besoin d'un système qui me donne toutes les solutions uniques avec X éléments possibles sans savoir que c'était des combinaisons ou arrangement ou autres...
Désolé, si j'ai confondu les deux. Mais bon si ça peut servir.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 31 juil. 2008 à 21:50
en fait, c'est simple, il y les combinaisons et les arrangements.
ex :
dans les combinaisons 4 parmi 4 cela donne 1 seule
ex: 1234
dans les arrangements,
il y en a : 4*3*2*1 = 24 arrangements possibles
tout dépend des besoins...
Je viens de voir qu'il y a même un un p'tit bug dans ton code car tu en trouves 25...(doublon 1234)
Frank_klein
Messages postés34Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention 8 février 2022 1 août 2008 à 14:49
Bonjour cantador, le code que tu m'a proposé est très intéressant, je vais voir si j'arrive à l'adapter, je m'explique, par exemple j'ai besoin de combiner 8 numéros PREDEFINIS, avec un résultat de sortie sur 4. Le code que tu m’as proposé donne un résultat de sortie sur 6 avec huit numéros au hasard. déduction faite, il me semble qu'il faut faire autant des procédures que de choix de base à savoir que si je veux avoir une sortie sur 4 ou sur cinq je doit répéter le code et changer les variable et le nombre des lignes.
Question, y'a t-il un moyen pour éviter de répéter le code dans plusierus procedures et faire le tout dans une seule ? Merci encore une fois @+
PS. ne répondez pas à ce post si vous n'avez pas des idées concrètes se rapportant au sujet, cela poule plus le forum qu'autre chose. Merci<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 1 août 2008 à 15:58
Le code que tu m'as proposé donne un résultat de sortie sur 6 avec huit numéros au hasard.
C'est vrai, il ne fait que des combinaisons de 6, mais en revanche le nombre de numéros dans lesquelles elle sont crées est lui totalement libre (il suffit de changer les valeurs)
Question, y'a t-il un moyen pour éviter de répéter le code dans plusierus procedures et faire le tout dans une seule ?
Bonne question, eh bien figure toi que je comptais sur toi pour l'écrire !
déjà, t'as vu le bazar pour écrire à 6,
Imagine à 9..
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 1 août 2008 à 19:42
Oui y'a moyen !
Mon unité "super boucles" qui permet de générer des boucles imbriquées dynamiquement et sans connaître à l'avance le nombre de boucles ainsi que les bornes.
Je cherchais justement une utilité (autre que bruteforce) pour la poster: ce sera fait dès que possible !
Frank_klein
Messages postés34Date d'inscriptionsamedi 26 mars 2005StatutMembreDernière intervention 8 février 2022 2 août 2008 à 00:57
Bonjour cantador,
Finalement ça m'arrange de garder une procédure pour chaque série de nombres
Tirés, j'ai réfléchit, je vais les mettre sur un événement de combobox,
là où je n'arrive pas c'est de permettre que les numéros soit pris parmi une série donnée, par exemple à partir d'un tableau remplit au prealable et au
choix, exemple TAB_Comb : array[1..50] of integer, TAB_Comb[1]:= 8; TAB_Comb[2]:=5 etc.
donc des numéros qui ne sont pas prises au hasard, ensuite il faut que la procédure fasse les arrangements à partir de ces numéros que je vais renseigner à ma guise...
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 2 août 2008 à 18:41
Ouais, t'a parfaitement raison.
Le code de combi n'est pas le plus fameux, c'est pour cela qu'il y a aussi listes et arrangements. (et puis au moins ça permet à ceux qui n'ont toujours pas compris la différence de voir par eux mêmes)
Si ta version est plus ergonomique (y'a largement de quoi) ne te gènes surtout pas pour nous en faire part.
Mais c'est vrai que pour les joueurs (dont je ne fais pas parti), il vaut mieux jouer toutes les combinaisons que tous les arrangements ou listes ! C'est que ça en fait un paquet en moins !