Si desidera ottenere il risultato utilizzando solo formule Excel.
Si desidera poter aggiungere senza limiti stringhe in colonna A.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Io ho trovato alcune soluzioni, la prima non usa alcun appoggio è una
formula matriciale da confermare con Ctrl+Maiusc+Invio e trascinare in
basso:
=INDICE(rng_1&" -
"&MATR.TRASPOSTA(rng_1);PICCOLO(SE(RIF.RIGA(rng_1)<MATR.TRASPOSTA(RIF.RIGA(rng_1));RIF.RIGA(rng_1));RIF.RIGA(A1));--
DESTRA(PICCOLO(SE(RIF.RIGA(rng_1)<MATR.TRASPOSTA(RIF.RIGA(rng_1));--
((RIF.RIGA(rng_1))&TESTO(MATR.TRASPOSTA(RIF.RIGA(rng_1));"0000")));RIF.RIGA(A1));
4))
il rng_1 è un nome che definisce un intervallo variabile (gli oggetti
in colonna A)
Questa soluzione fa il suo ... però l'aggiornamento delle formule è
lento.
Si basa principalmente su due cose:
1) la formula
=rng_1&" - "&MATR.TRASPOSTA(rng_1)
restituisce le disposizioni con ripetizioni in una matrice *quadrata*
(per vedere il risultato basta scriverla in una cella poi selezionare
un intervallo molto grande e confermarla con Ctrl+maiusc+invio)
2) per trovare le combinazioni basta prendere le sole disposizioni in
cui è vera la disuguaglianza primo lemento<secondo elemento (che poi è
la convenzione ... "Di solito tra le diverse disposizioni semplici di
una classe si sceglie come combinazione rappresentativa la sequenza
nella quale i componenti compaiono in ordine crescente)
Ero convinto che ci fosse una soluzione diciamo *meccanica* che non
richiedesse formule matriciali (nel caso specifico di classe 2)
Così ho provato a seguire questa strada trovando altre soluzioni non
matriciali.
Per le disposizioni con ripetizioni:
=INDICE(rng;INT((RIF.RIGA(A1)-1)/RIGHE(rng))
+1)&INDICE(rng;RESTO(RIF.RIGA(A1)-1;RIGHE(rng))+1)
Per le disposizioni semplici (senza ripetizioni):
=INDICE(rng;INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))
+1)&INDICE(rng;RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2-
(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2<=INT((RIF.RIGA(A1)-1)/
(RIGHE(rng)-1))+1))
Per le combinazioni semplici:
=SE(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2-
(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2<=INT((RIF.RIGA(A1)-1)/
(RIGHE(rng)-1))+1)<INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))
+1;;INDICE(rng;INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))+1)&" -
"&INDICE(rng;RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2-
(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2<=INT((RIF.RIGA(A1)-1)/
(RIGHE(rng)-1))+1)))
quest'ultima non ordina i risultati quindi servirà come colonna di
appoggio per qualcosa tipo:
=INDICE(SCARTO($D$1;;;PERMUTAZIONE(RIGHE(rng);2));PICCOLO(SE(SCARTO($D
$1;;;PERMUTAZIONE(RIGHE(rng);2))<>0;RIF.RIGA(SCARTO($D
$1;;;PERMUTAZIONE(RIGHE(rng);2))));RIF.RIGA(A1)))
da confermare con ctrl+maiusc+invio che si riferisce alla colonna D
dove è stata inserita la formula precedente.
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Secondo me però si può fare meglio ... vediamo se a qualcuno viene
un'idea ...
saluti
r
i file sono:
combinazioni_per_k_2_meccanica.xls
combinazioni_per_k_2_senza appoggio.xls
p.s.2
(in particolare per bruno)
le formule in inglese sono (nello stesso ordine con cui le ho esposte
in italiano):
=INDEX(rng_1&" -
"&TRANSPOSE(rng_1),SMALL(IF(ROW(rng_1)<TRANSPOSE(ROW(rng_1)),ROW(rng_1)),ROW(A1)),--
RIGHT(SMALL(IF(ROW(rng_1)<TRANSPOSE(ROW(rng_1)),--
((ROW(rng_1))&TEXT(TRANSPOSE(ROW(rng_1)),"0000"))),ROW(A1)),4))
da confermare con ctrl+maiusc+invio
disp. con ripetizioni
=INDEX(rng,INT((ROW(A1)-1)/ROWS(rng))
+1)&INDEX(rng,MOD(ROW(A1)-1,ROWS(rng))+1)
disp. semplici
=INDEX(rng,INT((ROW(A1)-1)/(ROWS(rng)-1))
+1)&INDEX(rng,MOD(ROW(A1)-1,ROWS(rng)-1)+2-
(MOD(ROW(A1)-1,ROWS(rng)-1)+2<=INT((ROW(A1)-1)/(ROWS(rng)-1))+1))
comb. appoggio (da inserire in D1)
=IF(MOD(ROW(A1)-1,ROWS(rng)-1)+2-
(MOD(ROW(A1)-1,ROWS(rng)-1)+2<=INT((ROW(A1)-1)/(ROWS(rng)-1))
+1)<INT((ROW(A1)-1)/(ROWS(rng)-1))+1,,INDEX(rng,INT((ROW(A1)-1)/
(ROWS(rng)-1))+1)&" - "&INDEX(rng,MOD(ROW(A1)-1,ROWS(rng)-1)+2-
(MOD(ROW(A1)-1,ROWS(rng)-1)+2<=INT((ROW(A1)-1)/(ROWS(rng)-1))+1)))
in E1 per ordinare:
=INDEX(OFFSET($D$1,,,PERMUT(ROWS(rng),2)),SMALL(IF(OFFSET($D
$1,,,PERMUT(ROWS(rng),2))<>0,ROW(OFFSET($D$1,,,PERMUT(ROWS(rng),
2)))),ROW(A1)))
saluti
r
visto che nessuno aveva risposto ... ci ho pensato da solo :-)
a chi interessa ho scritto un articolo:
https://sites.google.com/site/e90e50/user/calcolo-combinatorio-excel-classe-2
le formule sono state semplificate di molto, nella pagina trovate
anche 3 file di esempio con tutte le formule.
saluti
r
Notevole, Roby, ripeto complimenti con fumate o senza.:-))
Saluti a tutti
Eliano
saluti
r
-----------------------------------------------------
Come si fa a dare risposte quando si resta a bocca aperta :-) non si riesce
ad articolare verbo!
ciao paoloard
http://www.riolab.org
Fai attenzione alla dentiera, vedi mai.
eh eh ... da che pulpito vien la predica :-)
ciao ragazzacci! e grazie!
puf puf puf
LOL
In questo caso ha parlato l'esperienza.:-))
Fumate corpose
Eliano