Algoritmo di Euclide

diagramma di flusso
L'algoritmo di Euclide individua il massimo comun divisore tra due numeri interi.

I due numeri interi vengono indicati con m ed n.

La prima operazione indicata nel diagramma di flusso (leggi m ed n) rappresenta l'acquisizione, da un dispositivo di input, dei valori da assegnare alle variabili m ed n

Appena sono disponibili i valori di m e di n si calcola il resto della divisione tra m ed n. Il risultato viene memorizzato nella variabile Resto

La domanda Resto ≠ 0? specificata all'interno di un rombo, costituisce un punto di diramazione dell'algoritmo. La risposta a questo test ha due possibili esiti:
  • Se il Resto è uguale a zero il procedimento termina. La freccia sul lato destro del rombo porta all'operazione di stampa del risultato.
  • Se invece il Resto è diverso da zero:
    • (mn) il valore contenuto nella variabile n viene scritto nella variabile m
    • (nResto) il valore contenuto nella variabile Resto viene copiato nella variabile n
    • (Restom MOD n) con i nuovi valori di m e di n si calcola un nuovo resto e lo si memorizza nella variabile Resto
  • Quando si esce dal ciclo si deve comunicare il risultato. Il simbolo usato nel diagramma di flusso rappresenta un'operazione di stampa.
diagramma di flusso

il ciclo While
il flusso delle operazioni prosegue ritornando al test.

Dal diagramma si vede che il test e le tre operazioni in esso contenute vengono eseguite in ciclo. Le prime due operazioni sono di Assegnazione mentre la terza è di calcolo ed assegnazione. Il test specifica la condizione per ripetere il ciclo: si deve trovare un Resto diverso da zero. Appena si trova un resto uguale a zero, il ciclo si interrompe.

In questa struttura informativa è rilevante il fatto che il ciclo potrebbe anche non essere eseguito nemmeno una volta se il resto è uguale a zero già al primo confronto.

Più sinteticamente, il ciclo viene espresso nella seguente forma:

Fintantochè il resto della divisione tra m ed n è diverso da 0, ripeti le seguenti operazioni:
    {
     n
     Resto
    Resto  m MOD n
    }




ciclo While

Funzioni definite dall'utente in Excel.
Per realizzare, con Excel, una funzione definita dall’utente che calcoli il massimo comun divisore:
    (in Excel 2003)
  • nel menu Strumenti scegliere il comando Macro
  • nel sottomenu, scegliere il comando Visual Basic Editor.
  • Nel menu Inserisci dell’editor di Visual Basic scegliere Modulo.
  • Si apre la finestra codice. Nel menu Inserisci scegliere Routine.
  • Assegnare il nome Euclide e spuntare il radio button tipo Function.
    (in Excel 2007)
  • aprire la scheda Visualizza
  • premere il pulsante Macro
  • scegliere il comando Visualizza Macro
  • Si apre un riquadro di dialogo. Nella casella Nome Macro scrivere: Euclide
  • Premere il pulsante Crea
  • Si apre il Visual Basic Editor, con l'intestazione della macro già pronta nella finestra codice di un nuovo Modulo.
  • Sostituire Sub con Function

Codifica dell'algoritmo
Modificare l'intestazione della funzione come segue:
1Public Function Euclide(m as Integer, n as Integer) As Integer
Questa linea è la dichiarazione di funzione. Essa si legge in questo modo:
Euclide è una funzione che riceve due parametri di tipo intero e restituisce un risultato di tipo intero.

La sintassi della dichiarazione di funzione richiede che, tra parentesi tonde, vengano specificati gli identificatori dei parametri, ciascuno seguito da As e dal termine che specifica il tipo. Esempio: m As Integer. Dopo la parentesi di chiusura si deve specificare il tipo del risultato, anch'esso preceduto da As

Osservando il diagramma di flusso, l'acquisizione dei parametri da parte della funzione corrisponde all'operazione di lettura dei valori da assegnare ad m e ad n.

Dichiarazione delle variabili
Oltre ai due parametri, la funzione Euclide usa un'altra variabile Resto. Questa deve essere dichiarata, per consentire all'interprete Basic di riservare lo spazio di memoria.
2Dim Resto As Integer
Una variabile di tipo Intero occupa 2 byte, quindi consente di rappresentare 65.536 numeri con segno, quindi compresi tra -32768 e +32767.

Il secondo blocco del diagramma di flusso è un'operazione di calcolo ed assegnazione:
3Resto = m MOD n
MOD in Visual Basic è l'operatore che calcola il resto della divisione tra i due interi posti ai suoi lati.

L'operazione di assegnazione, nel diagramma di flusso, viene indicata da una freccia per fornire il significato di trasferimento del risultato in una locazione di memoria. Nei linguaggi di programmazione, invece, la stessa operazione di assegnazione è espressa con il simbolo =, che comunque non deve far pensare ad un'equazione. Piuttosto si deve pensare che a secondo membro ci siano i valori posseduti dalle variabili prima del calcolo e, a primo membro, ci sia il valore della variabile dopo il calcolo.

While ... Wend
Le operazioni da eseguire in ciclo sono delimitate dalla coppia:
While ... Wend
Sulla stessa riga dell'istruzione While bisogna specificare la condizione per ripetere il ciclo.
4While Resto <> 0
l'operatore ≠ (diverso da), in Basic, viene indicato con i due simboli <>.

In Basic ogni istruzione deve essere scritta su una linea. Quindi le istruzioni da ripetere in ciclo e l'istruzione di chiusura Wend devono occupare una riga ciascuna.
5  m = n
6  n = Resto
7  Resto = m MOD n
8Wend
Quando il ciclo termina resta una sola operazione da fare: si deve stampare il Massimo Comun Divisore.

Trattandosi di una funzione, il risultato viene fornito al programma che ha richiamato la funzione Euclide semplicemente assegnando il risultato al nome della funzione:
9Euclide = n