Funzioni in C. Violetta Lonati



Documenti analoghi
Allocazione dinamica della memoria - riepilogo

void funzioneprova() { int x=2; cout<<"dentro la funzione x="<<x<<endl; }

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Introduzione al linguaggio C Funzioni

Corso di Informatica

Inizializzazione, Assegnamento e Distruzione di Classi

Concetto di Funzione e Procedura METODI in Java

Introduzione alla programmazione in C

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Le variabili. Olga Scotti

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Corso di Fondamenti di Informatica

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

costruttori e distruttori

I puntatori e l allocazione dinamica di memoria

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

Programmazione I - Laboratorio

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Matematica - SMID : Programmazione Febbraio 2009 FOGLIO RISPOSTE

RISOLUTORE AUTOMATICO PER SUDOKU

Prova di Laboratorio di Programmazione

VARIABILI LOCALI E GLOBALI (ESTERNE)

Esercitazione di Basi di Dati

Liberare la memoria allocata dinamicamente.

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

4 3 4 = 4 x x x 10 0 aaa

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO XI.2015

10 - Programmare con gli Array

FUNZIONI. La libreria standard del C fornisce una ricca collezione di funzioni, come le funzioni:

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Calcolare il massimo di una lista

Linguaggio C - Stringhe

Visibilità dei Membri di una Classe

Corso di Informatica

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

Il tipo di dato astratto Pila

Alcune regole di base per scrivere un programma in linguaggio C

Introduzione al linguaggio C Gli array

Esempi di algoritmi. Lezione III

Uso di base delle funzioni in Microsoft Excel

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

LABORATORIO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO V Indice

ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del

Algoritmi di Ricerca. Esempi di programmi Java

La selezione binaria

Guida Compilazione Piani di Studio on-line

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Programmazione I / Informatica generale Prova scritta 11 Giugno 2008

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Arduino: Programmazione

Dall Algoritmo al Programma. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

La struttura dati ad albero binario

Laboratorio di programmazione

DI D AGRA R MM M I M A BLOCC C H C I TEORI R A E D D E SERC R I C ZI 1 1

Appunti sulla Macchina di Turing. Macchina di Turing

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Breve riepilogo della puntata precedente:

Sistema operativo: Gestione della memoria

Leggere un messaggio. Copyright 2009 Apogeo

Introduzione al MATLAB c Parte 2

Esercizio: gestione di un conto corrente

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

GESTIONE INFORMATICA DEI DATI AZIENDALI

Algoritmi e strutture dati. Codici di Huffman

Sottoprogrammi: astrazione procedurale

Definizione di nuovi tipi in C

Programmazione C Massimo Callisto De Donato massimo.callisto@unicam.it

Java: Compilatore e Interprete

INFORMATICA 1 L. Mezzalira

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

( x) ( x) 0. Equazioni irrazionali

Lezione 10: Librerie e compilazione separata

Lezione 8. La macchina universale

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Prova Scritta del 19/07/10

Strutturazione logica dei dati: i file

Primi passi in Moodle

Matematica e giochi di gruppo

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

INFORMATICA - I puntatori Roberta Gerboni

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

3) Il seguente numerale A1F0 in base 16 a quale numero in base 10 corrisponde?

Gestione Risorse Umane Web

GUIDA AL PORTALE PARTE 1

Transcript:

Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica

Funzioni - in breve: Funzioni Definizione di funzioni Chiamata di funzioni Dichiarazione di funzioni Parametri, argomenti e variabili locali Organizzazione dei programmi Esercizi

Funzioni Le funzioni sono costituite da una sequenze di istruzioni raccolte sotto un solo nome. Le funzioni possono avere argomenti e possono calcolare e restituire dei valori, ma anche no! (a differenza delle funzioni matematiche) I programmi visti sin qui erano costituiti da una sola funzione, il main. A cosa servono le funzioni? permettono di evitare la duplicazioni di codice; sono riutilizzabili.

Esempio: calcolare la media #i n c l u d e <s t d i o. h> f l o a t media ( f l o a t x, f l o a t y ) { return ( x + y ) / 2 ; } i n t main ( void ) { f l o a t a, b, c, m; s c a n f ( %f%f%f, &a, &b, &c ) ; m = media ( a, b ) ; p r i n t f ( La media t r a %f e %f e %f \n, a, b, m ) ; } p r i n t f ( La media t r a %f e %f e %f \n, a, c, media ( a, c ) ) ; return 0 ;

Esempio: conto alla rovescia #i n c l u d e <s t d i o. h> void s t a m p a c o n t e g g i o ( i n t n ) { p r i n t f ( meno %d... \ n, n ) ; } i n t main ( void ) { i n t i ; } f o r ( i = 1 0 ; i > 0 ; i ) s t a m p a c o n t e g g i o ( i ) ; return 0 ;

Definizione di funzioni La forma generale di una funzione è la seguente: TIPO RESTITUITO NOME FUNZIONE ( PARAMETRI ) { DICHIARAZIONI ISTRUZIONI } TIPO RESTITUITO E il tipo del valore che la funzione restituisce attraverso l uso di return: le funzioni non possono restituire array, ma non ci sono restrizioni sugli altri tipi; se TIPO RESTITUITO è void, la funzione non restituisce alcun valore; se il TIPO RESTITUITO è omesso, per default è int; è comunque meglio indicarlo sempre! NOME FUNZIONE E il nome della funzione, che si usa per chiamare la funzione stessa.

Definizione di funzioni - continua PARAMETRI E una lista di parametri separati da virgole. ciascun parametro deve essere preceduto dal suo tipo (il tipo va ripetuto anche se ci sono più parametri dello stesso tipo) f l o a t media ( f l o a t x, y ) / SBAGLIATO! / Corpo della funzione Il corpo della funzione può contenere dichiarazioni e istruzioni; le variabili dichiarate nel corpo di una funzione si chiamano locali. f l o a t media ( f l o a t x, f l o a t y ) { f l o a t sum ; / d i c h i a r a z i o n e / } sum = x + y ; / i s t r u z i o n e / return sum / 2 ; / i s t r u z i o n e /

Chiamata di funzioni Una chiamata di funzione consiste nel nome della funzione seguito da una lista di argomenti tra parentesi. media ( 3, 6 ) media ( a, b b ) s t a m p a c o n t e g g i o ( 9 ) La chiamata di una funzione coinvolge sempre due funzioni (che possono anche coincidere, nella ricorsione): una funzione chiamante e una funzione chiamata. Nei primi esempi, la funzione chiamante è il main. Quando una funzione viene chiamata, il controllo passa dalla funzione chiamante alla funzione chiamata. Quando questa termina (alla fine delle istruzioni oppure in presenza dell istruzione return), restituisce il controllo alla funzione chiamata.

Chiamata di funzioni - continua Se mancano le parentesi, la funzione non verrà chiamata. Una chiamata di funzione di tipo void è una istruzione, quindi deve concludersi con punto-e-virgola; s t a m p a c o n t e g g i o ( 9 ) ; Una chiamata di funzione di tipo non void è un espressione e produce un valore che può essere assegnato ad una variabile, testato, stampato, ecc m = media ( 3, 6 ) ; i f ( media ( a, b b ) > c ) p r i n t f (... ) ; Il valore restituito da una variabile può essere scartato: p r i n t f ( Ciao mondo!\ n ) ; c h a r s = p r i n t f ( Ciao mondo!\ n ) ;

Dichiarazione di funzioni La definizione di una funzione non deve necessariamente precedere il punto in cui viene chiamata. Ad esempio, le definizioni di funzioni possono seguire il main. Se il compilatore trova una chiamata prima della definizione, non sa quanti e di che tipo siano i parametri, quindi fa delle assunzioni e effettua dei casting. Non è detto che le queste assunzioni siano corrette! Per evitare questo problema, è possibile dichiarare le funzioni prima che vengano chiamate. TIPO RESTITUITO NOME FUNZIONE ( PARAMETRI ) ; Una dichiarazione di questo tipo si chiama prototipo o segnatura. Attenzione: ci deve essere coerenza tra dichiarazione e definizione!!

Esempio: media rivisitata #i n c l u d e <s t d i o. h> / p r o t o t i p o d e l l a f u n z i o n e media / f l o a t media ( f l o a t x, f l o a t y ) ; / main / i n t main ( void ) { f l o a t a, b, c, m; s c a n f ( %f%f%f, &a, &b, &c ) ; } p r i n t f ( La media t r a %f e %f e %f \n, a, b, media ( a, b ) ) ; return 0 ; / d e f i n i z i o n e d e l l a f u n z i o n e media / f l o a t media ( f l o a t x, f l o a t y ) { return ( x + y ) / 2 ; }

Parametri e argomenti I parametri di una funzione compaiono nella sua definizione: sono nomi che rappresentano i valori da fornire alla funzione al momento della chiamata. Gli argomenti sono invece le espressioni che compaiono nella chiamata di funzione tra parentesi. A volte i parametri sono chiamati parametri formali mentre gli argomenti sono chiamati parametri attuali. Se il tipo di un argomento non corrisponde al tipo del parametro, viene eseguita una conversione coerente con il prototipo della funzione oppure una conversione di default. Gli argomenti sono passati per valore: al momento della chiamata, ogni argomento è valutato e il valore è assegnato al corrispondente parametro; eventuali cambiamenti di valore dei parametri durante l esecuzione della funzione non influenzano il valore dell argomento!

Parametri e variabili locali Le variabili locali hanno le seguenti proprietà: sono utilizzabili solo dal punto in cui sono dichiarate fino alla fine della stessa funzione (block scope); non possono essere usate o modificate da altre funzioni; sono atuomaticaticamente allocate al momento della chiamata della funzione e deallocate al return (automatic storage duration); alla fine dell esecuzione della funzione non conservano il loro valore. I parametri hanno le stesse proprietà (block scope e automatico storage duration) delle variabili locali. Di fatto, la sola differenza tra variabili locali e parametri è che i parametri vengono inizializzati al momento della chiamata (con il valore degli argomenti della chiamata).

Array come argomenti Se il vettore è unidimensionale, la dimensione può essere omessa. i n t f ( i n t a [ ] ) {... } Se il vettore è multidimensionale, solo la prima dimensione può essere omessa. i n t f ( i n t a [ ] [ LUN] ) {... } la funzione non ha modo di sapere quanto è lungo il vettore (l operatore sizeof non può essere usato...) quindi può essere utile passare la lunghezza come parametro aggiuntivo: i n t somma array ( i n t a [ ], i n t n ) { i n t i, sum = 0 ; f o r ( i = 0 ; i < n ; i++ ) sum += a [ i ] ; return sum ; }

L istruzione return Ogni funzione non void contiene l istruzione return per specificare quale valore deve essere restituito alla funzione chiamante. return ESPRESSIONE ; L espressione può essere una semplice costante o variabile, oppure un espressione più complicata (del tipo giusto!) return i > j? i : j ; L esecuzione dell istruzione return ha per effetto la restituzione del controllo alla funzione chiamante. La restituzione del controllo alla funzione chiamante avviene comunque al termine dell esecuzione della funzione. Il valore restituito dal main è un codice di stato: il codice 0 indica la terminazione senza errori.

Organizzazione dei programmi Quando un programma è costituito da più di una funzione, è importante organizzarlo bene! Ricordare che variabili locali e parametri hanno block scope e automatic storage duration; Le funzioni comunicano fra loro attraverso i parametri, oppure attraverso variabili esterne o globali, che hanno queste proprietà: sono definite fuori dal corpo di ogni funzione; hanno static storage duration, cioè permangono e mantengono il loro valore indefinitamente; sono visibili dal punto in cui sono definite per tutto il file.

Organizzazione dei programmi - continua In generale, un programma può essere organizzato come segue: direttive #include direttive #define definizione di tipi con typedef dichiarazione di variabili esterne prototipi delle funzioni diverse dal main definizione del main definizione delle altre funzioni

Esercizi Scrivete una funzione avente due parametri interi b ed e che calcoli la potenza b e. Scrivete una funzione con parametro un intero n che stabilisca se n è un numero primo. Scrivete un programma che generi a caso un array di interi e calcoli la somma dei suoi elementi: strutturate il programma usando una funzione per generare l array e una per sommare i suoi elementi. Scrivete una variante dell esercizio precedente per un array bidimensionale.

Esercizi - continua Scrivete un programma che legga un carattere, uno spazio e quindi una sequenza di caratteri minuscoli terminati da. e che stampi quanto ha letto dopo il primo spazio, ma sostituendo tutte le vocali con il primo carattere letto. Per farlo, usate una funzione che, dati due caratteri, restituisca il primo carattere se il secondo è una vocale minuscola, altrimenti restituisca il secondo carattere. Rivedete gli esercizi svolti nelle esercitazioni precedenti e provate a strutturarli usando delle funzioni. Ad esempio, modificate l esercizio sulla rubrica usando una funzione per stampare la rubrica, una per leggere una nuova voce, una per inserire la nuova voce nell ordine corretto.