Newsgroup: it.comp.lang.delphi
Titolo: Calcolo combinatorio

Stň impazzendo ..non riesco a capire chi č piů stupido ..
io...il problema ..tutti e due.. o nessuno dei due!
Devo sviluppare le  n  combinazioni  di  k  vettori dinamici
ma non riesco...
ad esempio considerati 3 vettori i quali rispettivamente
hanno 2, 3 e 4 elementi .. le combinazioni possibili sono:
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
0 0 0 0 1 1 1 1 2 2 2 2 0 0 0 0 1 1 1 1 2 2 2 2
0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4 0 1 2 4
..ecco..non riesco a fare una funzione che mi restituisca
le combinazioni... perchč mi risulta
che devo annidare un ciclo for per ogni vettore ma
io ne ho  n  ......   qualcuno mi puň aiutare?

 ha scritto nel messaggio news:o_Yba.71291$zo2.1...@news2.tin.it...


scusa ma veramente io non capisco che combinazioni intendi, dai tuoi
esempi mica si capisce
 forse parli di disposizioni con ripetizione.
In tal caso, banalmente, se metti in fila N numeri ciascuno dei quali
puň assumere un valore da 0 a k, le possibili combinazioni, in cui
conta l'ordine sono: (k+1) elevato N
ciao


.. le combinazioni che intendo ...sono le combinazioni
tra gli elementi dei vettori..nuovo es:
n. vettori                         4
n. elementi vettore1         3
n. elementi vettore2         2
n. elementi vettore3         3
n. elementi vettore4         2
combinazioni:
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2
0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
0 0 1 1 2 2 0 0 1 1 2 2 0 0 1 1 2 2 0 0 1 1 2 2 0 0 1 1 2 2 0 0 1 1 2 2
0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1
"Norberto" <no...@NOSPAMfreemail.it> ha scritto nel messaggio
news:ber07v4unqoelpake...@4ax.com...


RG e Norberto,
non entro nel merito del thread ma vorrei invitare entrambi a quotare
correttamente.
Non si capisce a *cosa* stiate rispondendo ed i vostri messaggi tendono a
diventare sempre più voluminosi perchè ad ogni risposta che fornite vi
"trascinate" il resto dei messaggi precedenti. Se cercaste su google
"quoting" otterreste molti risultati, potreste dare un occhiata.
Saluti
--
- Carlo -

RG ha scritto:

spero di aver capito bene, nella terza riga il 3 l'hai dimenticato 
oppure non ci deve essere.
Faccio finta che l'hai dimenticato altrimenti non l'ho capita.
se non error queste non sono combinazioni ma disposizioni con 
ripetizioni :-) (ma magari erro, sono anni che non leggo queste cose).
ti crei due tmemo "memo_vettori" e "memo_ris"
allora "memo_vettori" contiene la definizione dei tuoi vettori, il 2,3,4 
ogni linea del memo rappresenta una definizione.
"memo_ris" contiene il risultato del calcolo
per il resto sul momento ho poco tempo.
procedure TForm1.Button1Click(Sender: TObject);
var n_vet : integer;
     valori : array[1..100] of integer;
     vettori :  array[1..100] of integer;
procedure azzera;
var c1 : integer;
begin
   for c1 := 1 to 100 do
   begin
    valori[c1] := 0;
   end;
  for c1 := 1 to memo_vettori.lines.count do
  begin
    vettori[c1] := strtoint(memo_vettori.lines[c1-1]);
// il primo elemento del memo ha indice 0, mentre l'array parte da 1
  end;
  n_vet := memo_vettori.lines.count;
end;
function add(x:integer) : boolean;
var c1 : integer;
     fl : boolean;
begin
   fl := true;
   inc(valori[x]);
   if(valori[x]>vettori[x]) then
   begin
     valori[x] := 0;
     if (x>1) then fl := add(x-1)
     else fl := false;
   end;
   add := fl;
end;
var c1 : integer;
     txt : string;
begin
   azzera;
   while add(n_vet) do
   begin
     txt := '';
     for c1 := 1 to n_vet do
     begin
      txt := txt + ' '+ inttostr(valori[c1]);
     end;
     memo_ris.lines.add(txt);
   end;
end;
e poi non dire in classe che non ti aiuto mai :-)
ciao
-- 
---------------------------------------
Per rispondere in privato togliere 1975

>io...il problema ..tutti e due.. o nessuno dei due!
..forse sono stupido io..mi ero fissato con
i cicli annidati... grazie ancora ..ciao.