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