DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

Documenti analoghi
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Funzioni e Procedure. Marco D. Santambrogio Ver. aggiornata al 21 Marzo 2014

Linguaggio C: le funzioni. Introduzione e sintassi

Linguaggio C: le funzioni. Introduzione e sintassi

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Lab 3: 3 Aprile Marco D. Santambrogio Gianluca Durelli Ver. aggiornata al 31 Marzo 2014

C funzioni à scope di variabili

C: primi elementi. Lezione 4

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 11 Marzo 2014

Algoritmi e basi del C

Algoritmi e basi del C Struttura di un programma

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 4 Aprile 2013

Algoritmi e basi del C Struttura di un programma

Informatica (A-K) 12. Linguaggio C -3

Funzioni, Stack e Visibilità delle Variabili in C

Variabili e Funzioni. Informatica 1 / 19

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Puntatori. Marco D. Santambrogio Ver. aggiornata al 20 Aprile 2016

Linguaggio C - sezione dichiarativa: costanti e variabili

Funzioni, Stack e Visibilità delle Variabili in C

Algoritmi e basi del C

Un programma deve essere scritto come collezione di tante piccole funzioni perché:

DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOIGNEGNERIA. INFORMATICA B Ingegneria Elettrica. Funzioni in Matlab

Cominciamo ad analizzare la rappresentazione delle informazioni... di Cassino. C. De Stefano Corso di Fondamenti di Informatica Università degli Studi

Istruzioni di selezione in Java 1

int main(){ int numero; /* numero di cui voglio calcolare il fattoriale */ int fatt; /* memorizzo il fattoriale di numero */ int somma=0;

PROGRAMMAZIONE: I sottoprogrammi

Fondamenti di Informatica II 3. Funzioni in C++ (parte 1)

FUNZIONI FUNZIONI COME COMPONENTI SW

Le Funzioni in C. Fondamenti di Informatica Anno Accademico 2010/2011. Corso di Laurea in Ingegneria Civile Politecnico di Bari Sede di Foggia

FUNZIONI FUNZIONI COME COMPONENTI SW

1 PANORAMICA SUL LINGUAGGIO C

Do...While() Break Continue Concetto di Funzione e Procedura METODI in Java

Elementi DI INFORMATICA. Linguaggio C

Concetto di Funzione e Procedura METODI in Java

Esercizi. FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo. Funzioni

METODI in Java. Prof.Angela Bonifati. Metodi e Sottoprogrammi

Laboratorio di informatica Ingegneria meccanica

Istruzioni di Controllo

Qualsiasi programma in C++ segue lo schema:

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Il linguaggio C. Istruzioni, funzioni, dati strutturati

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Fondamenti di Informatica

Una funzione riceve dati di ingresso in corrispondenza ai parametri

Corso sul linguaggio Java

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Sottoprogrammi: motivazioni. Funzioni e procedure. Un esempio motivante. Un esempio motivante

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

Definizione di metodi in Java

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Qualsiasi programma in C++ segue lo schema: Variabili

FUNZIONI. Esempi (pseudo-c): dare un nome a una espressione rendere tale espressione parametrica. float f(){ * sin(0.75); } float f1(int x) {

Procedure e funzioni A. Ferrari

Le classi in java. Un semplice programma java, formato da una sola classe, assume la seguente struttura:

FUNZIONI. attribuire un nome ad un insieme di istruzioni parametrizzare l esecuzione del codice

Nel seguito, istruzione1 e istruzione2 possono essere un blocco di codice { }, cioè più istruzioni

Il linguaggio C Funzioni e procedure

C espressioni condizionali

Istruzioni di selezione in Java 1

Ottenere una modifica del parametro attuale

Introduzione al linguaggio C Funzioni

Passaggio dei parametri Per valore Il valore viene copiato dall environment esterno all environment della funzione o procedura Cambiamenti dei paramet

void p(int x) { float y = x * sin(0.75); printf( %f, y); }

Manualistica 3 Le strutture di controllo

Prof. Pagani Corrado INTRODUZIONE AL LINGUAGGIO C

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE. Marco D. Santambrogio Ver. aggiornata al 9 O/obre 2010

Struttura di un. Struttura dei programmi C

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

INFORMATICA. Strutture condizionali

Linguaggio C: introduzione

Passaggio dei parametri. Passaggio dei parametri

FILE DI TESTO e SOTTOPROGRAMMI

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

TIPI DI DATO. e quasi sempre anche collezioni di oggetti, mediante la definizione di tipi strutturati

Laboratorio di Informatica I

Laboratorio di informatica Ingegneria meccanica

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

LEZIONE 1 LE BASI DEL LINGUAGGIO C

Strategie di programmazione

Introduzione alla programmazione in C

Corso di Informatica Modulo T3 2 Ambiente locale e globale

Esempi (pseudo-c):! float f(){ * sin(0.75); } float f1(int x) { 2 + x * sin(0.75); } Esempio

Dichiarazioni e tipi predefiniti nel linguaggio C

Il corpo di tutte le funzioni deve essere contenuto tra parentesi graffe

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Laboratorio di Informatica I

del Linguaggio C Istruzioni di iterazione

Programmazione Procedurale in Linguaggio C++

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Funzioni in Linguaggio C

Transcript:

Funzioni e Procedure Marco D. Santambrogio marco.santambrogio@polimi.it Ver. aggiornata al 11 Marzo 2014

Obiettivi Funzioni Scope delle variabili 2

La calcolatrice! Problema Si scriva un programma in C che, dati due numeri, permette all utente di calcolarne la somma, sottrazione, moltiplicazione, e la divisione tra essi L utente, per ogni coppia di numeri inseriti, potrà eseguire una e una sola operazione La calcolatrice potrà essere utilizzata più volte e ammettere l operazione di sommatoria per un numero variabile, deciso dall utente, di valori 3

Prima osservazione: i dati! Definizione dei dati su cui devo lavorare Quanti dati mi servono? Di che tipo devono essere? Come gestisco l operazione? 4

Ragioniamo sul fiusso Inserire i dati (numeri e operazione) Verificare che l inserimento dei dati si corretto Sulla base dell operazione selezionata, eseguire la funzione richiesta Mostrare il risultato Questo NON e un algoritmo!!!! - Non e non ambiguo - I passi non sono atomici 5

Primo compito per casa Scrivere l algoritmo che risolve il problema in esame! 6

Una prima soluzione Problema con i char 7

Una 1ma sol corretta ;) E qui cosa succede? 8

IF annidati 9

Osservazioni Quando abbiamo ragionato sul flusso, abbiamo detto: Sulla base dell operazione selezionata, eseguire la funzione richiesta Quali sono le funzioni che potremmo definire? somma, sottrazione, divisione e moltiplicazione In C, queste vengo chiamate anche sottoprogrammi 10

11 Sottoprogrammi Un sottoprogramma è: un insieme di istruzioni dotato di nome descritto (definito) una sola volta attivabile (richiamabile o invocabile) all interno del programma o di un altro sottoprogramma Alcuni sottoprogrammi sono già definiti si pensi alla scanf e alla printf dietro a questi nomi vi sono una serie di istruzioni in grado di, rispettivamente, intercettare la pressione dei tasti e di visualizzare un carattere sullo schermo chi richiama queste funzioni non si preoccupa di come sono fatte, basta sapere solo cosa fanno (visione black box)

12 Sottoprogrammi: motivazioni Astrazione e leggibilità: enucleano parti di codice, nascondendo dettagli algoritmici e di codifica il nome di programma si presenta come un operazione elementare Strutturazione e scomposizione funzionale del programma: consentono una stesura del programma che riflette un analisi funzionale del problema Collaudo: verifica di correttezza della soluzione facilitata dal poter verificare la correttezza prima dei singoli sottoprogrammi e poi dell intero programma visto come insieme di chiamate che si scambiano informazioni Compattezza ed efficienza del codice: si evita di ripetere sequenze di istruzioni in più parti del programma Modificabilità: una sola modifica vale per tutte le attivazioni del sottoprogramma Riuso: sottoprogrammi non troppo specifici possono essere raccolti in librerie utilizzabili da programmi diversi

13 Funzioni e procedure I sottoprogrammi si differenziano per la logica di definizione per l uso e per la modalità di chiamata e possono essere di tipo funzionale di tipo procedurale Sottoprogrammi di tipo funzionale (funzioni) possono essere considerati una astrazione di valore l invocazione della funzione associa al nome della funzione il valore del risultato calcolato dal sottoprogramma Sottoprogrammi di tipo procedurale (procedure) possono essere considerati una astrazione di operazioni l invocazione della procedura è associata all esecuzione delle istruzioni del sottoprogramma che realizzano l operazione specificata dal sottoprogramma Ad esempio: leggi(a,b); /* procedura*/ risultato = somma(a,b); /* funzione*/

14 Funzioni e procedure in C In C esistono solo le funzioni Le procedure sono particolari funzioni che non restituiscono nulla (VOID) Quindi parleremo solo di funzioni intendendo sia le funzioni che le procedure Definire una funzione secondo il linguaggio C implica: dichiarazione del prototipo della funzione (nella sezione dichiarativa) definizione della funzione invocazione o chiamata della funzione (nel codice che necessita della funzioni)

15 Dichiarazione del prototipo Il prototipo definisce: il nome della funzione il tipo (funzione, procedura) il tipo dei parametri in ingresso e in uscita Chi utilizzerà la funzione dovrà rispettare la sintassi definita nel prototipo Prototipo funzione <tipo_ris> <nome_funz> (<lista tipi dei parametri>); Prototipo procedura (void è una parola chiave del C che indica assenza di tipo) void <nome_funz> (<lista tipi dei parametri>);

Definizione del sottoprogramma 16 La definizione del sottoprogramma va messa dopo il main. Ha la stessa struttura del main (anche il main, come sappiamo è una funzione): Una parte dichiarativa Una parte esecutiva <tipo> <nome> (tipo par_for1, tipo par_for2...) { parte dichiarativa locale parte esecutiva } <tipo> <nome> (tipo par_for1, tipo par_for2...) è la testata della funzione par_for1, par_for2 sono i nomi dei parametri formali della funzione, il cui tipo deve corrispondere in modo ordinato ai tipi elencati nella dichiarazione del prototipo

17 Definizione della funzione fattoriale e i parametri formali Le funzioni in C sono funzioni in senso matematico, il tipo del valore di ritorno definisce il Codominio mentre i valori possibili dei parametri in ingresso corrispondono al Dominio Parametri Formali: Rappresentano un riferimento simbolico (identificatori) a oggetti utilizzati all interno della funzione Sono utilizzati dalla funzione come se fossero variabili dichiarate localmente Il valore iniziale di parametri formali viene definito all atto della chiamata della funzione tramite i parametri attuali (passaggio di parametri)

18 Istruzione return Parola chiave C utilizzata solo nelle funzioni Sintassi return <espressione> È l ultima istruzione di una funzione e indica: il punto in cui il controllo torna al chiamante il valore restituito In una funzione deve esserci almeno un istruzione di return possono esserci più istruzioni di return ma in alternativa la funzione può restituire un solo valore

19 Chimante/Chiamato All atto della chiamata, il controllo dell esecuzione passa dal chiamante al chiamato Il codice del chiamato viene eseguito Al termine dell esecuzione il controllo ritorna al chiamante, all istruzione successiva a quella della chiamata Inizio programma Passaggio del controllo codice chiamante Istruzione 1 Istruzione 2 Chiama funzione Istruzione 3 funzione chiamata Istruzione 1 Istruzione 2 Istruzione 3 Istruzione 4 return Ritorno del controllo

20 Invocazione o chiamata Nel corpo del main o di un altra funzione indica il punto in cui va eseguita la parte del codice presente nella definizione di funzione Invocazione di funzione come operando in una espressione <espressione> = < nomefunzione(par_att1 ) >; Invocazione di procedura come un istruzione nomeprocedura(par_att1, ); In entrambi i casi: par_att1, sono i parametri attuali che devono corrispondere per ordine e per tipo ai parametri formali I parametri attuali possono essere variabili, costanti o espressioni definite nell ambiente chiamante, i cui valori all atto della chiamata vengono copiati nei parametri formali

21 Passaggio dei parametri Il passaggio dei parametri consiste nell associare, all atto delle chiamata di un sottoprogramma, ai parametri formali i parametri attuali Se il prototipo di una funzione è float circonferenza (float raggio); Invocare questa funzione significa eseguire l istruzione c = circonferenza(5.0); In questo modo la variabile raggio (il parametro formale) assumerà per quella particolare invocazione il valore 5 (il parametro attuale). Lo scambio di informazioni con passaggio dei parametri tra chiamante e chiamato può avvenire in due modi: Passaggio per valore Passaggio per indirizzo

22 Passaggio per VALORE All atto della chiamata il valore del parametro attuale viene copiato nelle celle di memoria del corrispondente parametro formale. Il parametro formale e il parametro attuale si riferiscono a due diverse celle di memoria Il sottoprogramma in esecuzione lavora nel suo ambiente e quindi sui parametri formali I parametri attuali non vengono modificati

La calcolatrice con le funzioni - prototipi I prototipi Le chiamate 23

La calcolatrice con le funzioni le funzioni 24

Esempio: passaggio per valore Ambiente della funzione somma d1, d2 risultato } Quando invoco la funzione in d1 e d2 vengono copiati i valori di valore1 e valore 2 Quando la funzione termina il valore di risultato in smma viene copiato in risultato nel main /* nel main */ float valore1, valore2; float risultato; valore1, valore2 risultato risultato=somma(valore1,valore2); Ambiente della funzione main 25

Scope delle variabili 26

27 Visibilità Visibilità di un identificatore: indicazione della parte del programma in cui tale identificatore può essere usato Ambiente globale del programma insieme di identificatori (tipi, costanti, variabili) definiti nella parte dichiarativa globale regole di visibilità: visibili a tutte le funzioni del programma Ambiente locale di una funzione insieme di identificatori definiti nella parte dichiarativa locale e degli identificatori definiti nella testata (parametri formali) Regole di visibilità: visibili alla funzione e ai blocchi in essa contenuti Ambiente di blocco insieme di identificatori definiti nella parte dichiarativa locale del blocco regole di visibilità: visibili al blocco e ai blocchi in esso contenuti

28 Esempi int x; f() { } int y; y=1; int x; g(int y, char z) { } int k; int l; f(int x) { int x; } La visibilità di y si estende dal punto di dichiarazione fino alla fine del blocco di appartenenza y e z locali alla funzione g,con visibilità nel blocco racchiuso da parentesi graffe k e l hanno la stessa visibilità Errata! Si tenta di definire due volte la variabile locale x nello stesso blocco

29 Mascheramento (shadowing) Un nome ridefinito all interno di un blocco nasconde il significato precedente di quel nome Tale significato è ripristinato all uscita del blocco più interno In caso di omonimia di identificatori in ambienti diversi è visibile quello dell ambiente più vicino

Visibilità char g1, g2, g3; main() { int a, b; {/*blcco1*/ double a,c; } } void f1(){ {/*blocco2*/ char a,d; } {/*blocco3*/ float d } } g1,g2,g3 a,b a,c a,d d blocco1 blocco2 blocco3 Livello globale main f1 30

Torniamo alla calcolatrice Verifichiamo gli ingressi? 31

Non possiamo fare di meglio? Pausa per 10 32

Selezione multipla Operazione e uguale in tutti i casi Non posso evitare di ripetere operazione == 33

Lo switch Lo switch ci permette una alternativa al come selezionare la prossima istruzione da eseguire Lo switch valuta una espressione, quindi cerca di confrontare un valore con diversi possibili cases switch ( expression ){ case value1 : statement-list1 case value2 : statement-list2 case value3 : statement-list3 case... } 34

Lo switch Ciascun case contiene un valore (value) e una lista di istruzioni (statement) Il flusso di controllo si traferisce attraverso tutte le istruzioni, partendo dal primo case che corrisponde switch ( expression ){ case value1 : statement-list1 case value2 : statement-list2 case value3 : statement-list3 case... } 35

La calcolatrice con lo switch 36

Piccolo problema 37

Perche??? Flusso 38

Lo switch ed il break 39

Zoom Flusso 40

Lo switch: default 41

Fonti per lo studio + Credits Fonti per lo studio Credits Gianluca Palermo