Ripetizioni di segmenti di codice Spesso è necessario ripetere più volte uno stesso segmento dell'algoritmo (e.g. I/O, elaborazioni dati) Esistono due possibilità: Macro Procedure Fondamenti di Informatica 1 Le macro 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) Fondamenti di Informatica 2 Le procedure 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) Fondamenti di Informatica 3 Procedure e funzioni 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) Fondamenti di Informatica 4 Passaggio dei parametri Ogni procedura/funzione generalmente richiede un insieme di dati I dati devono essere accessibili: in variabili globali oppure sotto forma di parametri I parametri sono dati che vengono utilizzati dalla procedura; ad ogni chiamata possono assumere valori diversi Fondamenti di Informatica 5 Passaggio dei parametri I parametri possono essere passati in modi diversi: 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 Fondamenti di Informatica 6 Side effects 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) è un modo per far in modo che la procedura ritorni più di un valore Fondamenti di Informatica 7 Le procedure Annidamento: in una procedura può essere contenuta un'altra chiamata a procedura Limite sulla dimensione dello stack Fondamenti di Informatica 8 Le procedure Ricorsione: all'interno di una procedura avviene una chiamata alla procedura stessa Limite sulla dimensione dello stack Molti algoritmi sono basati sulla ricorsione Fondamenti di Informatica 9 La ricorsione Esempi: somma di N dati calcolo del fattoriale calcolo dei primi N numeri primi visita di un albero Fondamenti di Informatica 10