Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Combinazioni di classe 2 - Formule

28 views
Skip to first unread message

r

unread,
Nov 8, 2010, 11:30:10 AM11/8/10
to
Visto che miope ha bisogno di *vivere* ... mi ci metto anch'io :-)
Problema:
Consideriamo in A1:A4 le stringhe senza doppioni "a","b","c","d". In
colonna B a partire da B1 si vuole ottenere le possibli combinazioni
di classe 2 ovvero:
a - b
a - c
a - d
b - c
b - d
c - d

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

r

unread,
Nov 8, 2010, 11:48:08 AM11/8/10
to
p.s.
trovate i 2 file di esempio in fondo a questa pagina:
https://sites.google.com/site/e90e50/user/calcolo-combinatorio

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

r

unread,
Dec 6, 2010, 10:27:13 AM12/6/10
to
On 8 Nov, 17:30, r <robb....@gmail.com> wrote:

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

eliano

unread,
Dec 6, 2010, 7:56:16 PM12/6/10
to
On 6 Dic, 16:27, r <robb....@gmail.com> wrote:
> On 8 Nov, 17:30, r <robb....@gmail.com> wrote:
>
> 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-...

>
> 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

paoloard

unread,
Dec 7, 2010, 10:42:40 AM12/7/10
to
"r" ha scritto nel messaggio
news:8757b2f8-88c4-4611...@u9g2000pra.googlegroups.com...

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

eliano

unread,
Dec 7, 2010, 5:04:15 PM12/7/10
to
On 7 Dic, 16:42, "paoloard" <xp...@katamail.com> wrote:
> "r"  ha scritto nel messaggionews:8757b2f8-88c4-4611...@u9g2000pra.googlegroups.com...

>
> On 8 Nov, 17:30, r <robb....@gmail.com> wrote:
>
> 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-...

>
> le formule sono state semplificate di molto, nella pagina trovate
> anche 3 file di esempio con tutte le formule.
>
> saluti
> r
> -----------------------------------------------------
>
> Come si fa a dare risposte quando si resta a bocca aperta :-) non si riesce
> ad articolare verbo!
>
> ciao paoloardhttp://www.riolab.org

Fai attenzione alla dentiera, vedi mai.

r

unread,
Dec 7, 2010, 5:42:08 PM12/7/10
to
> Fai attenzione alla dentiera, vedi mai.- Nascondi testo citato
>
> - Mostra testo citato -

eh eh ... da che pulpito vien la predica :-)
ciao ragazzacci! e grazie!
puf puf puf

eliano

unread,
Dec 7, 2010, 8:18:02 PM12/7/10
to
> puf puf puf- Nascondi testo citato

>
> - Mostra testo citato -

LOL
In questo caso ha parlato l'esperienza.:-))
Fumate corpose
Eliano

0 new messages