Lego le Mibo (11) – Stat rosa pristina …

rubrica: 

L’interpretazione delle frasi, dei modi di dire e dei linguaggi ... già, perché questi sono i tempi dei grandi enigmi, dei rebus e delle complicazioni.
Tanto per chiarire il perché di questa rosa stupenda in copertina, debbo dire che la prima volta che chiesi a un amico del DAMS  che cosa ci azzeccasse il titolo ‘Il nome della rosa’ con il romanzo di Umberto Eco, lui che fece?  Ma certo, mi rispose ribaltandomi l’enigma con un altro enigma, questa volta in latino.  Bell’amico, pensai!   Ecco qua: Stat rosa pristina nomine, nomina nuda tenemus.

<p.s. Per puro gusto di sfida, mi piacerebbe rivolgere la domanda a John Turturro in persona, secondo me nemmeno lui lo sa  … ma questo è un problema mio wink>. 

Andiamo avanti: posto che “Pristina” (in questo contesto) NON è la capitale del Kosovo, la traduzione sarebbe: "la rosa primigenia esiste solo nel nome, possediamo soltanto nudi nomi" che ancora coi frati del monastero cluniacense e con Guglielmo da Baskerville ha ben poco a che fare.
Ma adesso vado su Internet e leggo: “…Tradotto letteralmente, il verso di Eco intende sottolineare che al termine dell'esistenza, della rosa particolare non resta che il nome dell'universale …”.                             Mi fermo qua anche perché vedo che lo stesso monaco Bernardo Cluniacense  nel De contemptu mundi da cui si estrae il verso, al posto della ROSA (badate bene, rosa con la 'S') c’era la città di ROMA. Infatti il monaco scrive:  “…Stat Roma pristina nomine, nomina nuda tenemus …” cioè allude alla fine delle glorie dell’Impero Romano.  Mahhhh !

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Ok, oggi avevo un po' voglia di distrarmi ma tornando a noi il senso è questo: CHI PENSA CHE IL VISUAL BASIC SIA UNA COSA COMPLICATA, VADA PURE A LEGGERSI  ‘IL NOME DELLA ROSA’ DI UMBERTO ECO così sì che smette di lamentarsi!
Giusto?
Prima di ricominciare con le cose che ci interessano più da vicino vorrei che teneste sempre ben presente ciò che ho detto l’altra volta.
Mi riferisco alla differenza tra l’Excel, diciamo così, ‘tradizionale’ e l’Excel inteso come risultato di codice VBA.
Rammentate la differenza:  NON BOTTONE / BOTTONE

Inoltre, giusto per sgombrare il campo da possibili incomprensioni, debbo ricordarvi che i termini:
•    Codice VBA
•    Macro
•    Script di Visual Basic      coincidono.  L’uno vale l’altro.

Dunque è fondamentale ricordare che prima di fare un qualsiasi progetto Excel di un certo calibro occorre impiegare tutto il tempo che serve per decidere quali le celle e/o i Fogli connessi tra loro in modalità on-line, cioè sempre aggiornati tramite gli opportuni collegamenti e quali invece le celle che si ottengono come risultato di una macro.

Vi ricordo ancora che ogni volta che abbiamo a che fare con dei bottoni, in quella occasione avremo sempre a che fare con una macro.

In VBA le macro iniziano con lo script Sub <esempio:  Sub Pippo () > dove Pippo è il nome della macro e terminano inesorabilmente con lo script End Sub .

Il termine ‘Sub’ è la contrazione del termine Subroutine, cioè ‘sotto routine’ (stessa cosa di: routine) ovvero la ‘traduzione di un flow-chart in linguaggio di programmazione’. Se vi ricordate, la volta scorsa abbiamo visto il flow-chart (o anche: schema a blocchi, diagramma a blocchi, schema di flusso) che metteva a routine la soluzione dell’equazione di secondo grado. Bene: quel flow-chart era in realtà una Subroutine che avremmo potuto perfettamente tradurre in linguaggio Visual Basic trasformando quei blocchi fatti di parallelogrammi, rombi e rettangoli in una serie di istruzioni interpretabili al cento per cento dal nostro personal computer.

Qualsiasi avvenimento (evento) che risponda a un discorso logico è dunque traducibile in uno schema a blocchi e a sua volta in uno script comprensibile.

Dunque vi lascio subito un ‘assaggio’, cioè traduco l’ormai famoso flow-chart dell’equazione di secondo grado in linguaggio Visual Basic.

Questo:

E ora la ‘traduzione’ ma, prima, ancora una breve nota.
Nota:
Le righe di istruzione precedute dal carattere apostrofo ( ‘ ) sono sempre considerate righe di commento per il programmatore. La macchina le ignora. Esempio: Dichiarazione delle variabili a,b,c oppure Accept delle variabili (nel nostro esempio: 1, -5, 6)
 
Codice Visual Basic per la soluzione dell’equazione di secondo grado:   ax2 + bx + c = 0
Sono previsti i 3 casi espressi dal flow-chart:
• 1° caso: Discriminante (delta) < 0 es: a=2, b=-5, c=6  -->   2x2-5x+6 = 0  Equazione impossibile
• 2° caso: Discriminante (delta) = 0 es: a=1, b=-4, c=4  -->   1x2-4x+4 = 0  Risultati:  +2 e +2
• 3° caso: Discriminante (delta) > 0 es: a=1, b=-5, c=6  -->   1x2-5x+6 = 0  Risultati: +2 e +3
 
Sub Equazione()
'-----------------------------------------------------------------------------
' Dichiarazione delle variabili 'a,b,c'
'-----------------------------------------------------------------------------
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
'-----------------------------------------------------------------------------
' Accept delle variabili (nel nostro esempio: 1, -5, 6)
' L'accept viene spezzata in 3 parti, una per ciascuna variabile, con 3 Input Box
'-----------------------------------------------------------------------------
'
'  C I C L O    D I     V A L I D A Z I O N E    D E L L E    A C C E P T
'
'-----------------------------------------------------------------------------
'  1^ accept
'
enter_a:
    a = InputBox("Dammi 'a': ")
    If a = 0 Then
    MsgBox "'a' non può essere zero !"
    GoTo enter_a
    End If
'-----------------------------------------------------------------------------
'  2^ accept
'
enter_b:
    b = InputBox("Dammi 'b': ")
    If b = 0 Then
    MsgBox "'b' non può essere zero !"
    GoTo enter_b
    End If
'-----------------------------------------------------------------------------
'  3^ accept
'
enter_c:
    c = InputBox("Dammi 'c': ")
    If c = 0 Then
    MsgBox "'c' = zero è un caso particolare che qui non trattiamo - Riprova !"
    GoTo enter_c
    End If
'-----------------------------------------------------------------------------
'  Visualizzo le 3 variabili inserite tramite una MSGBOX combinata
    MsgBox " a=" & a & " b=" & b & " c=" & c
'-----------------------------------------------------------------------------
'  Calcolo del discriminante Delta
    Delta = b * b - 4 * a * c
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
'   E S A M E    D E I    C A S I     P O S S I B I L I
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
'-----------------------------------------------------------------------------
' 1° caso
' per Delta < zero l'equazione è impossibile (esempio: a = 2, b = -5, c = 6)
    If Delta < 0 Then
    MsgBox "L'equazione è impossibile !"
    GoTo fine
    End If
' 2° caso
' per Delta = zero l'equazione ha due radici coincidenti (esempio: a = 1, b = -4 , c = 4 --> risultato +2 e +2)
    If Delta = 0 Then
    x = -b / 2 * a
    MsgBox "L'equazione ha due radici coincidenti uguali a: +" & x
    GoTo fine
    End If
' 3° caso
' per Delta > zero l'equazione ha due radici distinte (esempio: a = 1, b = -5, c = 6 --> risultato +2 e +3)
    x1 = (-b - Sqr(Delta)) / 2 * a
    x2 = (-b + Sqr(Delta)) / 2 * a
    MsgBox "L'equazione ha due radici distinte: " & x1 & " e " & x2
fine:
End Sub

 
Bene! Anche questa è fatta!
Ciò che stupisce (almeno me) è l’enormità di istruzioni che occorre dare per fare una cosa che poi non è complicatissima … dai!
Ma se ci penso bene la macchina è una grande stupida e quindi va informata di tutto, ma proprio ‘tutto’, dalla a alla zeta.
 
Nota:
Mentre per semplicità nel flow-chart l’Accept delle 3 variabili è un blocco unico, nello script del Visual Basic,  l’Accept è stata spezzata in 3 singole parti, la 1^ per ‘a’, la 2^ per ‘b’ e la 3^ per ‘c’.
Ecco il risultato della 1^ Accept in cui digitiamo il valore “1” per ‘a’:

Nota:
Il nostro codice VBA ha alcuni ‘punti di congiunzione’ che si possono anche chiamare: label o anche nodi oppure tag.
Ecco allora che il nostro codice ha le seguenti tag (traduzione di ‘etichetta’ recentemente entrato nel mondo dei Social Network a indicare la rilevanza di un partecipante):
• Enter_a:
• Enter_b:
• Enter_c:
• Fine:
 
Nota:
Ciascun tag è sempre identificato dal simbolo ‘:‘ (due punti).
Quindi il tag in VBA, per esempio, non è Enter_a  bensì  Enter_a:
 
Come avrete capito dall’immagine che segue, vi lascio il programma già approntato “Equazione_di_secondo_grado.xlsm”.
Potete scaricarlo in calce a questo articolo e, nel caso in cui vi dicesse che 'il file non è attendibile' potete proseguire tranquillamente. 
Doppio click sul file allegato e vi comparirà il bottone azzurro da schiacciare.
 
Nota:
L’estensione del nome del file Excel del tipo “XLSM” (cioè: con la M finale) sta ad indicare sia a noi cristiani che al computer che quell’Excel contiene delle Macro. Poiché le Macro di loro natura sono un po' pericolose (quelle che provengono da fonti non attendibili), il computer vi chiederà di ‘attivare le macro’. Potete confermare perché qui è tutto ‘virus free’.
 
Fate click sul bottone e il programma vi chiederà in sequenza le tre accept di  ‘a’, ‘b’, ‘c’.

Potete cominciare coi valori: 1, -5, 6.

All’invio otterrete questa Message Box riepilogativa:

Nota:
La differenza tra Input Box e Message Box è la seguente: la prima CHIEDE dati, la seconda RESTITUISCE dati.
 
Finalmente ecco la Message Box della soluzione:

Ok! Avete ragione: forse oggi abbiamo corso fin troppo ma questa botta pratica era da fare perché in mancanza avremmo solo continuato a chiacchierare e, forse, la scelta di un problema generale di matematica anziché un pezzo di ‘Lego le Mibo’ può anche averci dato una maggior comprensione generale.

Bene!

Vi lascio a smacchinare con l’equazione di secondo grado e vi auguro buon week end.

Ci rivediamo la prossima volta con il ‘Registratore di Macro’.

Francesco Caranti