Corso di Informatica Medica
Transcript of Corso di Informatica Medica
![Page 1: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/1.jpg)
Corso di Informatica Medica Esercitazione VIII
!19 giugno 2014
!Alessandro A. Nacci
[email protected] - alessandronacci.com
1
![Page 2: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/2.jpg)
2
![Page 3: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/3.jpg)
L’albero genealogico
• Scrivere un programma C che sia in grado di rappresentare e gestire un albero genealogico
3
• In particolare, vogliamo poter fare:
- Creare una persona
- Rappresentare di una popolazione
- Aggiungere figli ad una persona
- Elencare i figli e i nipoti dato un antenato
LEZIONE PRECEDENTE
![Page 4: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/4.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
LEZIONE PRECEDENTE
![Page 5: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/5.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
LEZIONE PRECEDENTE
![Page 6: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/6.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 7: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/7.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
LEZIONE PRECEDENTE
![Page 8: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/8.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 9: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/9.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 10: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/10.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
PADRE
FIGLIO
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 11: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/11.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
RADICE
FOGLIAFOGLIA
FOGLIA FOGLIA
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
PADRE
FIGLIO
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 12: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/12.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
Può essere utile per rappresentare un albero genealogico?
RADICE
FOGLIAFOGLIA
FOGLIA FOGLIA
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
PADRE
FIGLIO
PADRE
FIGLIO
LEZIONE PRECEDENTE
![Page 13: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/13.jpg)
Una famosa struttura dati: l’albero
4
P0
P1 P2 P3
P4 P5
Può essere utile per rappresentare un albero genealogico?
RADICE
FOGLIAFOGLIA
FOGLIA FOGLIA
ogni cerchio si chiama “nodo”
PADRE
FIGLIO
PADRE
FIGLI
PADRE
FIGLIO
PADRE
FIGLIO
PADRE
FIGLIO
OVVIAMENTE SI
LEZIONE PRECEDENTE
![Page 14: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/14.jpg)
• OGNI NODO DELL’ALBERO SARA’ PER NOI UNA PERSONA
5
P==
LEZIONE PRECEDENTE
![Page 15: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/15.jpg)
Una Persona
• SESSO
• NOME
• ETA?
• CHI SONO I GENITORI?
• CHI SONO I FIGLI?
• QUANTI FIGLI?
6
LEZIONE PRECEDENTE
![Page 16: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/16.jpg)
Una Popolazione
• Una popolazione è rappresentata da un insieme di persone
• Ogni persona ha un suo indice (numero univoco di identificazione)
• Esiste un numero di persone della
7cardinalità
1 2 73 4 5 6
LEZIONE PRECEDENTE
![Page 17: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/17.jpg)
Una Persona nella popolazione
• SESSO
• NOME
• ETA?
• CHI SONO I GENITORI?
• CHI SONO I FIGLI?
• QUANTI FIGLI?
8cardinalità
1 2 73 4 5 6
Li rappresentiamo con l’indice della persona nella popolazione
LEZIONE PRECEDENTE
![Page 18: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/18.jpg)
Persona e Popolazione (codice C)
9
LEZIONE PRECEDENTE
![Page 19: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/19.jpg)
Persona e Popolazione (codice C)
9
LEZIONE PRECEDENTE
![Page 20: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/20.jpg)
Persona e Popolazione (codice C)
9
LEZIONE PRECEDENTE
![Page 21: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/21.jpg)
Creazione di una persona
10
LEZIONE PRECEDENTE
![Page 22: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/22.jpg)
Creazione di una persona
10
LEZIONE PRECEDENTE
![Page 23: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/23.jpg)
Aggiunta persona alla popolazione
11
LEZIONE PRECEDENTE
![Page 24: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/24.jpg)
Aggiunta persona alla popolazione
11
LEZIONE PRECEDENTE
![Page 25: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/25.jpg)
Aggiunta di un figlio
12
LEZIONE PRECEDENTE
![Page 26: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/26.jpg)
Aggiunta di un figlio
12
LEZIONE PRECEDENTE
![Page 27: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/27.jpg)
Funzioni di stampa a schermo
13
LEZIONE PRECEDENTE
![Page 28: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/28.jpg)
Funzioni di stampa a schermo
13
LEZIONE PRECEDENTE
![Page 29: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/29.jpg)
Funzioni di stampa a schermo
13
LEZIONE PRECEDENTE
![Page 30: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/30.jpg)
Elenco dei figli e dei nipoti
14
![Page 31: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/31.jpg)
Elenco dei figli e dei nipoti
14
![Page 32: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/32.jpg)
La nostra popolazione
15
MARCO PIPPOLUCASTEFANIA ARIANNALUCIA STEFANORINALDO
P0 P1 P2 P3 P4 P5 P6 P7
![Page 33: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/33.jpg)
La nostra popolazione
15
MARCO PIPPOLUCASTEFANIA ARIANNALUCIA STEFANORINALDO
P0 P1 P2 P3 P4 P5 P6 P7
Marco e' padre di LUCA e di PIPPO Stefania e' madre di LUCA e di PIPPO Arianna e' figlia di Marco e Lucia Stefano e' figlio di Arianna e Rinaldo
![Page 34: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/34.jpg)
La nostra popolazione
15
MARCO PIPPOLUCASTEFANIA ARIANNALUCIA STEFANORINALDO
P0 P1 P2 P3 P4 P5 P6 P7
P4 P0 P1
P5 P2 P3
P7P6
Marco e' padre di LUCA e di PIPPO Stefania e' madre di LUCA e di PIPPO Arianna e' figlia di Marco e Lucia Stefano e' figlio di Arianna e Rinaldo
![Page 35: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/35.jpg)
La nostra popolazione (codice C)
16
![Page 36: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/36.jpg)
Aggiungiamo le parentele
17
P4 P0 P1
P5 P2 P3
P7P6
![Page 37: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/37.jpg)
Aggiungiamo le parentele
17
P4 P0 P1
P5 P2 P3
P7P6
![Page 38: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/38.jpg)
Il main()
18
![Page 39: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/39.jpg)
RICORSIONE
19
![Page 40: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/40.jpg)
Divide et impera
• Metodo di approccio ai problemi che consiste nel dividere il problema dato in problemi più semplici
• I risultati ottenuti risolvendo i problemi più semplici vengono combinati insieme per costituire la soluzione del problema originale
• Generalmente, quando la semplificazione del problema consiste essenzialmente nella semplificazione dei DATI da elaborare (ad es. la riduzione della dimensione del vettore
20
![Page 41: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/41.jpg)
La ricorsione (1)
• Una funzione è detta ricorsiva se chiama se stessa
• Se due funzioni si chiamano l’un l’altra, sono dette mutuamente ricorsive
• La funzione ricorsiva sa risolvere direttamente solo casi particolari di un problema detti casi di base: se viene invocata passandole dei dati che costituiscono uno dei casi di base, allora restituisce un risultato
• Se invece viene chiamata passandole dei dati che NON costituiscono uno dei casi di base, allora chiama se stessa (passo ricorsivo) passando dei DATI semplificati/ridotti
21
![Page 42: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/42.jpg)
La ricorsione (II)
• Ad ogni chiamata si semplificano/riducono i dati, così ad un certo punto si arriva ad uno dei casi di base
• Quando la funzione chiama se stessa, sospende la sua esecuzione per eseguire la nuova chiamata
• L’esecuzione riprende quando la chiamata interna a se stessa termina
• La sequenza di chiamate ricorsive termina quando quella più interna (annidata) incontra uno dei casi di base
• Ogni chiamata alloca sullo stack (in stack frame diversi) nuove istanze dei parametri e delle variabili locali (non static)
22
![Page 43: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/43.jpg)
Esempio: il fattoriale
23
![Page 44: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/44.jpg)
Esempio: il fattoriale - passo per passo
24
![Page 45: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/45.jpg)
Ricorsione - Esercizio 1
• Scrivere una funziona ricorsiva che calcoli ricorsivamente la somma di tutti i numeri compresi tra 0 ed x
• Il prototipo della funzione è: int ric(int x)
25
![Page 46: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/46.jpg)
Ricorsione - Esercizio 1
• Scrivere una funziona ricorsiva che calcoli ricorsivamente la somma di tutti i numeri compresi tra 0 ed x
• Il prototipo della funzione è: int ric(int x)
25
![Page 47: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/47.jpg)
Ricorsione - Esercizio 1I
• Scrivere le versioni ricorsiva ed iterativa di una funziona che calcoli il seguente valore
26
![Page 48: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/48.jpg)
Ricorsione - Esercizio 1I
• Scrivere le versioni ricorsiva ed iterativa di una funziona che calcoli il seguente valore
26
![Page 49: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/49.jpg)
Ricorsione - Esercizio 1I
• Scrivere le versioni ricorsiva ed iterativa di una funziona che calcoli il seguente valore
26
![Page 50: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/50.jpg)
Ricorsione - Esercizio 1I
• Scrivere le versioni ricorsiva ed iterativa di una funziona che calcoli il seguente valore
26
![Page 51: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/51.jpg)
Qualche considerazione
• L’apertura delle chiamate ricorsive semplifica il problema, ma non calcola ancora nulla
• Il valore restituito dalle funzioni viene utilizzato per calcolare il valore finale man mano che si chiudono le chiamate ricorsive: ogni chiamata genera valori intermedi a partire dalla fine
• Nella ricorsione vera e propria non c’è un mero passaggio di un risultato calcolato nella chiamata più interna a quelle più esterne, ossia le return non si limitano a passare indietro invariato un valore, ma c’è un’elaborazione intermedia
27
![Page 52: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/52.jpg)
Quando utilizzare la ricorsione
28
![Page 53: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/53.jpg)
Quando utilizzare la ricorsione
29
![Page 54: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/54.jpg)
Ricorsione - Esercizio III
• Analizzare il comportamento della seguente funzione ricorsiva mostrando l’andamento delle variabili, considerando i seguenti input:
• funzione(231,0) • Dire quale funzione espleta
30
#include <stdio.h>#define DIMENSIONE 10
int mia_funzione(int num, int part) {if (num == 0)
return part;else {
return mia_funzione(num/10, part*10 + num%10);}
}
int main(){
int a = reverse2(21,0);printf("%d\n",a);
}
![Page 55: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/55.jpg)
31
![Page 56: Corso di Informatica Medica](https://reader030.fdocuments.net/reader030/viewer/2022021421/586cc8131a28ab123a8c3428/html5/thumbnails/56.jpg)
Tutte il materiale sarà disponibile sul mio sito internet:
alessandronacci.com
32
Potete lasciare il vostro giudizio qui:
http://tinyurl.com/IEIMExe2014
CREDITS ————————————— Parte del materiale di questa lezione è stato preso da http://staff.polito.it/claudio.fornaro/CorsoC/24-Ricorsione.pdf http://lia.deis.unibo.it/Courses/InfoChim1112/lucidi/es03-FunzRic.pdf