Fondamenti di Informatica Riassunto Utilizzo di PUNTATORI Utilizzo

  • Slides: 14
Download presentation
Fondamenti di Informatica ØRiassunto ØUtilizzo di PUNTATORI ØUtilizzo di MALLOC ØArray multidimensionali 2/21/2021 1

Fondamenti di Informatica ØRiassunto ØUtilizzo di PUNTATORI ØUtilizzo di MALLOC ØArray multidimensionali 2/21/2021 1

Esercitazione 4 Ø Cosa vedremo oggi? Ø Ø 2/21/2021 Funzioni Passaggio di parametri Funzioni

Esercitazione 4 Ø Cosa vedremo oggi? Ø Ø 2/21/2021 Funzioni Passaggio di parametri Funzioni ricorsive Puntatori come valore di ritorno da funzione 2

Funzioni Ø Ø 2/21/2021 Cos’è una funzione? Le funzioni permettono di scomporre problemi complessi

Funzioni Ø Ø 2/21/2021 Cos’è una funzione? Le funzioni permettono di scomporre problemi complessi in moduli più semplici, sfruttabili anche singolarmente per la risoluzione di problemi diversi 3

Funzioni Ø Come si definisce una funzione? tipo_ritornato nome_funzione(tipo_param nome_param, tipo_param 1 nome_param 1)

Funzioni Ø Come si definisce una funzione? tipo_ritornato nome_funzione(tipo_param nome_param, tipo_param 1 nome_param 1) 2/21/2021 4

Funzioni Ø Ø 2/21/2021 Come si usa una funzione? Esempio: costruiamo un programma C

Funzioni Ø Ø 2/21/2021 Come si usa una funzione? Esempio: costruiamo un programma C che gestisca le 4 operazioni aritmetiche utilizzando le funzioni 5

Funzioni Ø Ø Vediamo il codice all’interno dell’ambiente Dev C In particolare notiamo Ø

Funzioni Ø Ø Vediamo il codice all’interno dell’ambiente Dev C In particolare notiamo Ø Come viene scritta la funzione float somma(int a_somma, int b_somma){ float c_somma; c_somma=a_somma+b_somma; return c_somma; } Parametri della funzione Valore di ritorno 2/21/2021 6

Funzioni Ø Come viene chiamata la funzione risultato=somma(primo_operando, secondo_operando); Ø Attenzione alla funzione “errore_divisione”

Funzioni Ø Come viene chiamata la funzione risultato=somma(primo_operando, secondo_operando); Ø Attenzione alla funzione “errore_divisione” int errore_divisione(void){ printf("Non si puo' dividere per 0!!!n"); return 1; } 2/21/2021 7

Funzioni Ricorsive: Fibonacci Ø E se una funzioen richiama se stessa? Ø Ø Attuo

Funzioni Ricorsive: Fibonacci Ø E se una funzioen richiama se stessa? Ø Ø Attuo un processo di ricorsione Vediamo un esempio matematico… La successione di Fibonacci 2/21/2021 8

Funzioni Ricorsive: Fibonacci Definizione: F(m) = 0 con m<=0 F(1) = 1 F(2) =

Funzioni Ricorsive: Fibonacci Definizione: F(m) = 0 con m<=0 F(1) = 1 F(2) = 1 F(n) = F(n-1) + F(n-2) con n>0 Per chiarezza i primi 8 numeri della serie di Fibonacci sono: 1 1 2 3 5 8 13 21 Come si realizza una funzione in grado di svolgere tale conteggio? ? ? 2/21/2021 9

Funzioni Ricorsive: Fibonacci #include <stdio. h> void main(void) { int risultato; int numero; printf("Inserisci

Funzioni Ricorsive: Fibonacci #include <stdio. h> void main(void) { int risultato; int numero; printf("Inserisci un numero interon"); scanf("%d", &numero); risultato=fibonacci(numero); /*chiamo la funzione passando un valore e prendo il valore restituito*/ printf("nella posizione %d della sequenza di fibonacci c'e' %dn", numero, risultato); system("pause"); } int fibonacci(int n) { int ris; /*dichiaro un intero che rappresenta il risultato*/ if (n<=0){ return 0; } if ((n==1)||(n==2)){ return 1; } ris=fibonacci(n-1) + fibonacci(n-2); /*metto in ris la somma dei valori ritornati dalla funzione stessa per n-1 e n-2*/ return ris; /*ritorno ris alla funzione chiamante*/ } 2/21/2021 10

Funzioni Adesso sappiamo definire una funzione con dei parametri in ingresso ed un valore

Funzioni Adesso sappiamo definire una funzione con dei parametri in ingresso ed un valore in uscita, inoltre sappiamo invocarla anche in modo ricorsivo… ¡ …e se la mia funzione utilizzasse dei puntatori? ? ? ¡ 2/21/2021 11

Funzioni ricerca in un vettore Prendiamo l’esempio già visto della ricerca di un elemento

Funzioni ricerca in un vettore Prendiamo l’esempio già visto della ricerca di un elemento in un vettore ¡ Scriviamo una funzione che prende in ingresso un puntatore a char e un intero e restituisce il puntatore alla posizione dell’array desiderata ¡ 2/21/2021 12

Funzioni ricerca in un vettore char* cerca_in_vettore(char *puntatore, int ingresso){ puntatore=puntatore+ingresso; /*sposto il puntatore

Funzioni ricerca in un vettore char* cerca_in_vettore(char *puntatore, int ingresso){ puntatore=puntatore+ingresso; /*sposto il puntatore */ return puntatore; /*ritorno il puntatore*/ } Il tipo di ritorno è un puntatore a char 2/21/2021 Il primo parametro della funzione è un puntatore a char 13

Funzioni ricerca in un vettore #include<stdio. h> void main(void){ char vettore[]=" abcdefghilmnopqrstuvz"; /*dichiaro e

Funzioni ricerca in un vettore #include<stdio. h> void main(void){ char vettore[]=" abcdefghilmnopqrstuvz"; /*dichiaro e inizializzo un vettore !!!ATTENZIONE ALLO SPAZIO INIZIALE!!!*/ char *ptr; /*dichiaro un puntatore a intero*/ int input; /*dichiaro la mia variabile di input*/ int risposta; /*dichiaro una variabile condizione di uscita dal do while*/ *ptr=vettore[0]; /*faccio puntare ptr all'indirizzo di inizio del vettore*/ /*oppure*/ /* ptr=&vettore[0]; */ do{ printf("Inserisci un valore compreso tra 1 e 21n"); scanf("%d", &input); /*catturo da tastiera la posizione da cercare*/ ptr=cerca_in_vettore(&vettore[0], input); /*passo alla funzione l'indirizzo di inizio vettore e l'inetro catturato e ritono il valore del puntatore*/ printf("%c", *ptr); /*visualizzo il risultato*/ printf("n. Vuoi cercare un'altra lettera? 0=SI - 1=NOn"); scanf("%d", &risposta); /*risposta per iterazione*/ }while(risposta==0); system("pause"); } 2/21/2021 14