• Non ci sono risultati.

1 Fondamenti di Informatica

N/A
N/A
Protected

Academic year: 2021

Condividi "1 Fondamenti di Informatica"

Copied!
4
0
0

Testo completo

(1)

1 Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni

(si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 1

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Ing. DAVIDE PIERATTONI

Facoltà di Ingegneria Università degli Studi di Udine

Linguaggio C Le funzioni

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 2 Questo insieme d i trasparenze ( detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi , ma non limitatamente, ogni immagine, fotografia, animazione , video, audio, musica e testo) sono d i proprietà degli autori prof . Pier Luca Montessoro e Ing. Davide Pierattoni, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca , scolastici ed universitari afferenti a l Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica , per scopi istituzionali, non a fine di lucro . In tal caso non è richiesta alcuna autorizzazione .

Ogni altro utilizzo o riproduzione (ivi incluse , ma non limitatamente, le riproduzioni su supporti magnetici , su reti d i calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte degli autori.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione . Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti d i impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. Gli autori non assumono alcuna responsabilità per il contenuto d i queste slide (ivi incluse, ma non limitatamente , la correttezza, completezza, applicabilità, aggiornamento dell’informazione ).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 3

Le funzioni dal punto di vista della programmazione top-down

-Permettono di rendere trasparente al resto del programma i dettagli implementativi che non è necessario condividere ê MODULARITA’

-Se ben strutturate, permettono di riutilizzare del codice già scritto per altri programmi ê RIUTILIZZABILITA’ e COLLAUDABILITA’

-Lo standard ANSI ha introdotto importanti modifiche nella sintassi per la dichiarazione delle funzioni, aspetto che consente un maggior controllo degli errori ê CHIAREZZA e LEGGIBILITA’ del codice

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 4

Esempio

• Coefficiente binomiale:

• Il fattoriale va calcolato tre volte: con le funzioni è possibile scrivere il codice un’unica volta

)!

(

!

! k n k

n k

n

= −

 

 

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 5

main

int main() {

int n, k;

printf ("n = "); scanf ("%d", &n);

printf ("k = "); scanf ("%d", &k);

if ((n < k) || (k < 0))

printf ("dati non validi\n");

else

printf ("n su k = % lf\n",

coefficiente_binomiale (n, k));

return EXIT_SUCCESS;

}

chiamata della funzione coefficiente_binomiale

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 6

coefficiente_binomiale

double coefficiente_binomiale (int n, int k) {

return fattoriale (n) /

(double) (fattoriale (k) * fattoriale (n-k));

}

lista di argomenti tipo di

ritorno

istruzione

di ritorno

(2)

2 Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni

(si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 7

fattoriale

int fattoriale (int n) {

int fatt = 1;

while (n > 1) fatt *= n--;

return fatt;

}

lista di argomenti tipo di

ritorno

istruzione di ritorno

variabili locali

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 8

Il programma completo

#include <stdio.h>

#include <stdlib.h>

double coefficiente_binomiale (int n, int k);

int fattoriale (int n);

main() { ...

}

double coefficiente_binomiale (int n, int k) {

...

}

int fattoriale (int n) {

...

}

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 9

Definizione delle funzioni

• Ogni definizione di funzione ha la forma:

tipo_ritornato nome_funzione(dichiarazione_argomenti) {

dichiarazioni ed istruzioni }

• Alcune parti possono essere omesse

• Forma minima:

dummy() {}

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 10

Ritorno di valori

• Se il tipo ritornato è omesso, viene assunto int

• L'istruzione per ritornare il valore in uscita al chiamante è return:

return espressione;

• Se necessario, l'espressione viene convertita nel tipo di ritorno della funzione

• L'espressione può essere omessa, e in tal caso il tipo della funzione (che non ritorna alcun valore) dovrebbe essere void

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 11

Chiamata a una funzione

• Se la funzione ritorna un valore:

variabile = funz_1(argomenti);

In tale caso è anche possibile invocarla come argomento all’interno di un’altra funzione:

... funz_2(..., funz_1(argomenti), ...);

• Altrimenti:

nome (argomenti);

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 12

Chiamata a una funzione

• Ogni funzione definita dall’utente deve essere nota al compilatore

• Per poter utilizzare una funzione, sono necessari:

– la dichiarazione del prototipo – il codice sorgente della funzione

#include < stdio.h>

int somma (int, int );

int main() {

}

int somma (int a, int b) {

return (a + b);

}

La dichiarazione del prototipo va scritta all’inizio del file sorgente, prima della funzione main

E’ buona consuetudine scrivere il

codice sorgente di tutte le funzioni

dopo la funzione main

(3)

3 Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni

(si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 13

Prototipo di una funzione

• Il prototipo di una funzione corrisponde alla prima riga del suo codice sorgente, con l’aggiunta del ;

• Serve come riferimento per il compilatore durante l’analisi del file sorgente

• Deve contenere il nome della funzione, il tipo ritornato, il numero e il tipo dei parametri

• Se la funzione è ad esempio:

int fattoriale (int n) {

<codice sorgente della funzione>

}

il suo prototipo sarà...

int fattoriale ( int );

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 14

float my_f(float data) {

float tmp;

...

return tmp;

}

Variabili locali

Una funzione può contenere dichiarazioni di variabili locali, come qualsiasi blocco del C. Per tali variabili viene allocata memoria al momento della chiamata della funzione, e deallocata al suo termine.

alloca la memoria

copia il valore nel registro di ritorno e rilascia la memoria

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 15

Le dichiarazioni di funzioni possono essere annidate?

NO! In C, a differenza del Pascal, tutte le funzioni sono allo stesso livello, e sono accessibili a tutto il codice presente nello stesso file sorgente o in altri file (a patto che non siano state dichiarate static).

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 16

Esempio

Pascal

function sort ...

...

function compare ...

...

begin {* sort *}

...

if compare ...

...

C

void sort ...

{ ...

if (compare ... ) ...

}

int compare ...

{ ...

}

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 17

Funzioni e variabili static

• Come le variabili esterne, anche le funzioni dichiarate static sono visibili alle sole funzioni presenti nei rispettivi file sorgente

• Simili funzioni si ottengono anteponendo a una normale dichiarazione la parola chiave static :

static tipo_ritornato nome_funz(argomenti)

• Una variabile interna dichiarata static conserva il proprio valore anche fra due chiamate successive alla stessa funzione cui appartiene í non viene deallocata!

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 18

Ricorsione

• Una funzione può richiamare se stessa, oppure un’altra che a sua volta la chiama.

int f (int k) {

...

n = f (m);

...

}

(4)

4 Fondamenti di Informatica

© 2001 Pier Luca Montessoro, Davide Pierattoni

(si veda la nota di copyright alla slide n. 2)

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 19

Ricorsione

• Esempio: fattoriale

 

= =

altrimenti n

n

n n se

)!

1 (

0

! 1

Fondamenti di Informatica - Linguaggio C - Le funzioni

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere la nota di copyright a pag.2) 20

Ricorsione

• Esempio: fattoriale

int fattoriale (int n) {

if (n <= 0) {

return 1;

} else {

return n * fattoriale (n-1);

}

}

Riferimenti

Documenti correlati

© 2003 Pier Luca Montessoro (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright

© 2001 Pier Luca Montessoro - Davide Pierattoni (vedere nota di copyright a pag. 2) 2 Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright