Ripetizioni di segmenti di codice Le macro Le procedure Procedure

Ripetizioni di segmenti di codice
• Spesso è necessario ripetere più volte
uno stesso segmento dell'algoritmo
(e.g. I/O, elaborazioni dati)
• Esistono due possibilità:
• Una macro è definita come un insieme di
istruzioni (o blocco)
• Queste vengono sostituite all'interno del
codice
• Servono per rendere più leggibile il codice
e per facilitarne la modifica coerente
• #define MAX(a,b) (a>b ? a : b)
– Macro
– Procedure
Elementi di Informatica
1
Le procedure
2
• La ripetizione di un segmento di codice
può avere due obiettivi:
– ripetere la stessa sequenza di operazioni
– calcolare diversi valori, partendo da
parametri diversi
• La differenza principale è:
– la procedura non ritorna nessun valore
– la funzione ritorna un valore (ad es void)
3
Passaggio dei parametri
Elementi di Informatica
4
Passaggio dei parametri
• Ogni procedura/funzione generalmente
richiede un insieme di dati
• I dati devono essere accessibili:
• I parametri possono essere passati in
modi diversi:
– in variabili globali
– oppure sotto forma di parametri
• I parametri sono dati che vengono utilizzati
dalla procedura; ad ogni chiamata possono
assumere valori diversi
Elementi di Informatica
Elementi di Informatica
Procedure e funzioni
• Una procedura è definita come un
insieme di istruzioni (o blocco)
• Il controllo del flusso passa alla
procedura ogni volta che viene invocata
• E' necessario un meccanismo per
ritornare al punto chiamante
• Utilizzo dello stack (Stack Pointer)
Elementi di Informatica
Le macro
5
– per valore
vengono effettuate delle copie dei valori;
le copie sono usate dalla procedura che
può anche modificarne il valore
– per riferimento
si passa il puntatore alle variabili; i valori
possono essere modificati dalla procedura
Elementi di Informatica
6
1
Side effects
Le procedure
• Se il passaggio dei parametri avviene
per valore, l'effetto della procedura è
limitato al valore che ritorna
• Se i parametri sono passati per
riferimento, la procedura può avere
effetti collaterali (side effects)
• Annidamento:
in una procedura può essere contenuta
un'altra chiamata a procedura
• Limite sulla dimensione dello stack
– è un modo per far in modo che la
procedura ritorni più di un valore
Elementi di Informatica
7
Elementi di Informatica
Le procedure
La ricorsione
• Ricorsione:
all'interno di una procedura avviene una
chiamata alla procedura stessa
• Limite sulla dimensione dello stack
• Molti algoritmi sono basati sulla ricorsione
Elementi di Informatica
8
9
• Esempi:
– somma di N dati
– calcolo del fattoriale
– calcolo dei primi N numeri primi
– visita di un albero
Elementi di Informatica
10
2