Il criterio per pronosticare il risultato di un incontro di calcio si basa su un numero elevato di variabili.
In questa sezione si adotta un criterio semplificato e poco attendibile, perchè si è maggiormente interessati a progettare l'organizzazione del foglio elettronico.
Per un approfondimento sul metodo di simulazione si può consultare il seguente link, dove si trova una proposta di simulazione basata su un criterio più scientifico.
Si supponga di poter quantificare la forza di una squadra mediante un numero che tiene conto di vari elementi, ad esempio la posizione in classifica, il fattore casa, ecc..
In questo esercizio non si propone alcun criterio per determinare tale numero, lo si assegnerà in modo del tutto irrilevante.
denominare il foglio1: “Ottavi”,
denominare il foglio2: “Finaliste”,
eliminare Foglio3.
aprire il foglio "Finaliste"
scrivere nell’intervallo A2:A17 i nomi delle squadre
nell’intervallo B2:B17 scrivere un numero compreso tra 5,00 e 7,00 indicativo della forza della squadra.
denominare "Squadre" l’intervallo A1:A17.
Nota:
Per assegnare un nome ad un intervallo di celle:
Selezionare l'intervallo
Scrivere il nome nella casella del nome, quella alla sinistra della casella della formula.
denominare "Forza" l’intervallo B1:B17.
denominare "Punti" l’intervallo C1:C17.
Nel foglio Ottavi scrivere le intestazioni nelle celle indicate nella figura 2:
Ottavi di finale (cella A1) – Ottavi (cella A3) – Quarti (Cella C3) – Semifinali (cella E3) – Finali (cella G3).
La subroutine seguente genera gli incontri tra le squadre mediante un semplice algoritmo.
I nomi delle 16 squadre vengono acquisiti in un array. Si genera quindi un numero casuale compreso tra 1 e 16.
Il numero estratto rappresenta l'indice della squadra nell'array.
Nell'array si scambia la squadra estratta con la squadra che occupa la posizione numero 16.
Si ripete il procedimento. Ma questa volta si genera un numero a caso compreso tra 1 e 15
La squadra estratta viene scambiata con la squadra che occupa la posizione 15. Le due squadre estratte formano il primo incontro.
Nel Visual Basic Editor scrivere una routine denominata Incontri:
Dichiarare una variabile I di tipo Intero e un array Nomi di 16 elementi di tipo Stringa di caratteri.
Tramite un ciclo leggere i nomi delle squadre dalle celle del foglio Finaliste e copiarli negli elementi dell'array Nomi
Si noti che l'indice dell'array Nomi varia da 1 a 16, mentre l'indice dell'intervallo da leggere nel foglio Finaliste varia da 2 a 17.
Prima di procedere con l'estrazione degli indici casuali, si prepara una variabile (denominata Riga) che indica di volta in volta il numero di riga in cui scrivere le squadre di ciascun incontro.
Per meglio comprendere il procedimento di generazione degli incontri si osservi la figura 3.
I nomi delle squadre sono scritti in celle separate di due righe adiacenti.
Tra un incontro e l'altro c'è una riga di separazione.
Per ottenere le squadre del primo incontro:
si genera un numero casuale compreso tra 1 e 16
si scrive il nome della squadra estratta nella cella del foglio Ottavi il cui numero di riga è contenuto nella variabile Riga
La squadra estratta viene sostituita dall'ultima (equivale a cancellare la squadra estratta)
si genera un altro numero casuale compreso tra 1 e 15,
si scrive il nome della squadra estratta nella cella il cui numero di riga è contenuto nella variabile Riga+1
La squadra estratta viene sostituita dalla penultima
Si lascia una riga di separazione
Per ottenere le squadre del secondo incontro si genera una coppia di numeri casuali, il primo compreso tra 1 e 14 il secondo compreso tra 1 e 13,
Per generare queste coppie di numeri, si prepara un ciclo For la cui variabile di controllo varia da 16 a 1 con decremento di 2, cioè ad ogni ciclo fissa
l'estremo superiore dell'intervallo di generazione dei numeri casuali: 16, 14, 12, 10, ecc..
Il procedimento descritto è riepilogato nella subroutine seguente:
Nella cella B4 scrivere la formula: =CASUALE()-CASUALE()
Questa formula fornisce come risultato un numero reale compreso tra -1 e 1.
Nella cella B5 scrivere la formula (qui mostrata su tre righe):
=INDICE(Forza;CONFRONTA(A5;Squadre;0))
>
INDICE(Forza;CONFRONTA(A4;Squadre;0)) + B4
Si è scritto un confronto. L'espressione a sinistra del segno di maggiore cerca (mediante la funzione Confronta) la squadra il cui nome è specificato nella cella A5
e restituisce la sua posizione all'interno dell'array Squadre. La funzione Indice usa questo risultato per restituire il valore contenuto nell'array Forza.
L'espressione a destra del segno di maggiore agisce allo stesso modo ma cerca la squadra il cui nome è scritto in A4 e aggiunge il valore generato casualmente alla forza di questa squadra.
Il risultato di questo confronto è un valore logico: VERO o FALSO, a indicare se la seconda squadra ha una forza maggiore della prima.
Selezionare l'intervallo di 3 celle: B4:B6.
Premere il pulsante Copia,
selezionare l'intervallo B7:B27,
Premere invio per incollare le celle.
Nella cella C6 scrivere la formula:
=SE(B5; A5; A4)
Nella cella C7 scrivere la formula:
=SE(B8; A8; A7)
Copiare le formule dell'intervallo B4:B5 nelle celle D6:D7.
Selezionare l'intervallo C6:D7 - premere il pulsante Copia - tenendo premuto il tasto Ctrl fare clic nelle celle: C12, C18 e C24.
Premere invio per incollare le celle copiate.
Nella cella E9 scrivere la formula
=SE(D7; C7; C6)
Nella cella E10 scrivere la formula
=SE(D13; C13; C12)
Selezionare l'intervallo D6:D7, premere il pulsante Copia - Clic su F9 e premere invio per incollare.
Il procedimento si ripete e, seguendo la figura seguente, dovrebbe essere molto semplice completare i passaggi di turno.
Denominare vincente la cella I15.
Registrare la Macro Classifica contenente la sola pressione del tasto F9 nel Foglio Ottavi.
Completare la macro con le istruzioni seguenti:
Lanciando la macro "Classifica" si può osservare, nel foglio Finaliste, il numero di volte che ciascuna squadra, su 100 simulazioni, risulta vincitrice.
Nel Foglio Finaliste scrivere nella cella D2 la formula
=SE(C2;RANGO(C2;Punti);"")
e copiarla nell’intervallo C3:C17.
Questa formula scrive in ogni cella la posizione in classifica della squadra, se la squadra ha cumulato punti.