Calcolo Combinatorio II - Il caso di K=2 |
![]() |
![]() |
![]() |
Scritto da Roberto Mensa |
Mercoledì 08 Dicembre 2010 18:45 |
a cura di Roberto Mensa e Paolo Ardizzoni
In altro articolo, Calcolo combinatorio - Sviluppo, ho già affrontato il problema del calcolo combinatorio con n oggetti e k classi; in tale contesto venivano utilizzati al massimo 9 oggetti (in particolare i numeri da 1 a 9). Sommario
1 - Disposizioni con ripetizioni di classe 2
N.B. Disposizioni con ripetizioni di classe 2
Dati i 3 oggetti A, B e C le disposizioni con ripetizioni di classe 2 sono:
=INDICE(rng;INT((RIF.RIGA(A1)-1)/RIGHE(rng))+1)&";"&INDICE(rng;RESTO(RIF.RIGA(A1)-1;RIGHE(rng))+1) La formula non richiede molte spiegazioni ed ovviamente potrebbe essere utilizzata all'occorrenza distintamente su due colonne utilizzando le due formule:
=INDICE(rng;INT((RIF.RIGA(A1)-1)/RIGHE(rng))+1) Curiosa nella sua semplicità è la soluzione matriciale:
=rng&";"&MATR.TRASPOSTA(rng) E' una formula che restituisce una matrice di risultati e richiede una conferma con Ctrl+Maiusc+Invio dopo aver selezionato un'area quadrata sufficientemente ampia da poter contenere tutti i risultati. Disposizioni semplici di classe 2
Dati i 3 oggetti A, B e C le disposizioni semplici di classe 2 sono:
=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)<INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))))
versione inglese: =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)<INT((ROW(A1)-1)/(ROWS(rng)-1))))
E' una formula meccanica che deve essere trascinata in basso e non consuma righe in eccesso.
=SE(rng<>MATR.TRASPOSTA(rng);rng&MATR.TRASPOSTA(rng);NON.DISP()) Come la precedente è una formula che restituisce una matrice di risultati e richiede una conferma con Ctrl+Maiusc+Invio dopo aver selezionato un'area quadrata sufficientemente ampia da poter contenere tutti i risultati. Combinazioni di classe 2
Dati i 3 oggetti A, B e C le combinazioni di classe 2 sono:
=SE(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)<INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1));"";10^4*(INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))+1)+(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2))
in colonna D le combinazioni utilizzando questa:
=INDICE(rng;INT(PICCOLO($C:$C;RIF.RIGA(A1)))/10^4)&";"&INDICE(rng;--DESTRA(PICCOLO($C:$C;RIF.RIGA(A1));4)) E questa variante più *particolare* valida fino a 60 oggetti (in colonna E):
=SE(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)<INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1));"";ORARIO(0;INT((RIF.RIGA(A1)-1)/(RIGHE(rng)-1))+1;(RESTO(RIF.RIGA(A1)-1;RIGHE(rng)-1)+2))) in colonna F le combinazioni utilizzando questa:
=INDICE(rng;MINUTO(PICCOLO($E:$E;RIF.RIGA(A1))))&";"&INDICE(rng;SECONDO(PICCOLO($E:$E;RIF.RIGA(A1))))
In entrambi i casi la colonna di appoggio serve solo perchè i risultati non sarebbero ordinati.
=SE(rng>MATR.TRASPOSTA(rng);MATR.TRASPOSTA(rng)&";"&rng;NON.DISP()) E' ancora una formula che restituisce una matrice di risultati e richiede una conferma con Ctrl+Maiusc+Invio dopo aver selezionato un'area quadrata sufficientemente ampia da poter contenere tutti i risultati. Infine una soluzione senza appoggio:
=INDICE(rng&";"&MATR.TRASPOSTA(rng);PICCOLO(SE(RIF.RIGA(rng)<MATR.TRASPOSTA(RIF.RIGA(rng));RIF.RIGA(rng)-1);RIF.RIGA(A1));--DESTRA(PICCOLO(SE(RIF.RIGA(rng)<MATR.TRASPOSTA(RIF.RIGA(rng));--((RIF.RIGA(rng)-1)&TESTO(MATR.TRASPOSTA(RIF.RIGA(rng)-1);"0000")));RIF.RIGA(A1));4)) da confermare con Ctrl+Maiusc+Invio e trascinare in basso.
Nota: questo articolo è una copia autorizzata dall'autore Roberto Mensa. L'originale (eventualmente più aggiornato) si trova all'indirizzo: https://sites.google.com/site/e90e50/user/calcolo-combinatorio-excel-classe-2
Sistema operativo: Windows
|
Ultimo aggiornamento Mercoledì 22 Dicembre 2010 17:26 |