Funzioni. Lab.Calc. AA 2005/062 Astrazione Consiste nell'ignorare i dettagli e concentrarsi sull'essenziale: in particolare ci consente di utilizzare.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Introduzione al linguaggio C++
Oggetti Java.
Struttura di un programma
Introduzione alla programmazione A. Ferrari. Il linguaggio C Nel 1972 Dennis Ritchie nei Bell Laboratories progettò il linguaggio C Il linguaggio possiede.
LE FUNZIONI IN C Sommario 1 Introduzione 2 Moduli di programma in C
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Analizzatori Lessicali con JLex
Introduzione al linguaggio C
Concetti di base: header file, funzione main(),set caratteri C++, token, operatori, espressioni etc. Flusso di controllo, cicli, costrutti.
Programmazione Procedurale in Linguaggio C++
Gruppo di Lavoro Nazionale Open Group TANDEM EMAS e Ag21 delle PA Dott. Daniele Tartari UO Sistemi Gestione Ambientale Provincia di Bologna I risultati.
FUNZIONI DI BIBLIOTECA
Funzioni definite dall’utente
JAVASCRIPT DIFFERENZA TRA JAVASCRIPT E JAVA TAG LO SCRIPT OGGETTI LE CLASSI FUNZIONE GESTORE DI EVENTI ELEMENTI DEL LINGUAGGI è un vero e proprio linguaggio.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di Programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli Corso.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 15 Marzo 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 18 Aprile 2012.
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
CORSO DI PROGRAMMAZIONE II
Programmazione Mod A - Cap 2 - prof. Burattini
Funzioni matematico – statistiche I comandi matematici di più comune utilizzo, applicabili a scalari e matrici, sono: Sqrt(x), che calcola la radice quadrata.
Oggetti e dati primitivi Programmazione Corso di laurea in Informatica.
9) If e else. Lab.Calc.I AA2002/03 - cap.92 espressione.
Iterazioni (for, do, while). Lab.Calc. AA2005/062 Iterazioni 3 istruzioni che consentono di eseguire un loop (ciclo): 1. while 2. do...while 3. for con.
Creazione di un programma eseguibile. Laboratorio di Calcolo AA2005/062 Livelli di programmazione Si può programmare a diversi livelli utilizzando linguaggi.
Lab. Calc. AA 2005/061 Classi. Lab. Calc. AA 2005/062 C e C++ Fino a questo punto abbiamo introdotto gli elementi base di qualsiasi linguaggio di programmazione,
Lab. Calc. 2005/06 Ereditarietà. Lab. Calc. 2005/06 Scopo di questa lezione: Imparare a creare nuove classi ereditando da classi già esistenti. Capire.
Istruzioni di selezione (If/else/switch)
Vettori e matrici. Lab.Calc. AA2005/062 Vettori Dichiarazione di un vettore di oggetti del tipo Tipo: Tipo identificatore[dimensione]; Uso di un elemento.
Primi Elementi di Programmazione in C++
Lab. Calc. AA 2005/061 puntatori. Lab. Calc. AA 2005/062 Attributi di un oggetto nome o identificatore; tipo o classe; valore o valori; indirizzo;
1 laboratorio di calcolo II AA 2003/04 quarta settimana a cura di Domizia Orestano Dipartimento di Fisica Stanza tel. ( )
Le classi Definizione di classe Attributi e metodi di una classe Costruttori e distruttori Private e public Funzioni friend Il puntatore this.
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Espressioni condizionali
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
ITIS LATTANZIO Unità Didattica Materia Informatica Funzioni in C++
Javascript 6 Funzioni. Una funzione sarà eseguita in risposta ad un evento o ad una chiamata diretta. Le funzioni possono essere inserite comodamente.
1 Programmazione = decomposizione basata su astrazioni (con riferimento a Java)
Isabella Fortunato - Rimini Sostegno allo sviluppo dellistruzione degli adulti EDALAB.
Lo sviluppo top down Le funzioni
2000 Prentice Hall, Inc. All rights reserved. Capitolo 5 (Deitel) Le funzioni Indice degli argomenti Introduzione Moduli nei programmi C 5.3.
Unità Didattica 1 Linguaggio C
1 FONDAMENTI DI INFORMATICA II Ingegneria Gestionale a.a ° Ciclo Approfondimenti sulle Classi.
LdL - LP1 - lez 11 - ver 6 - aa Linguaggi di programmazione I Stringhe (II) Prof. Luigi Di Lascio Lezione 11.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 11 e 12 -
JAVA Per iniziare. Verificare installazione javac –version java –version Cercare i files e sistemare eventualmente il path.
CORSO DI PROGRAMMAZIONE II Lezione 22
Le funzioni in Excel. La funzione conta,numeri La funzione conta.numeri calcola il numero di celle che contengono un valore numerico all’interno di un.
Oggetti in C# Lezione 2 Metodi e Static Oggetti in C# - Lezione 2.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
Ereditarieta’. Contenuti Introduciamo un meccanismo fondamentale di Java: l’ereditarieta’ Permette di estendere classi gia’ definite (ovvero di definire.
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Lez. 9 (13/14)Elementi di Programmazione1 Lezione 9 Valutazione di espressioni File di testo sequenziali.
Informatica 4 Funzioni. FUNZIONE: definizione MATEMATICA Relazione (o applicazione) binaria tra due insiemi A e B che associa a ogni elemento di A un.
Sottoprogrammi e funzioni
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Programmazione in Java. Classi I programmi in Java consistono di classi. Le classi consentono di definire: collezioni di procedure (metodi statici) tipi.
LIP: 8 Marzo 2005 Vettori. Abbiamo visto L’uso di Vector come alternativa all’uso di arrays Rivediamo l’esercizio dell’altra volta.
Cose nuove di Java (prima a chiacchiera, poi formalmente)
Copyright © Istituto Italiano Edizioni Atlas
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Librerie… Marco D. Santambrogio – Ver. aggiornata al 20 Luglio 2015.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

funzioni

Lab.Calc. AA 2005/062 Astrazione Consiste nell'ignorare i dettagli e concentrarsi sull'essenziale: in particolare ci consente di utilizzare oggetti complicati con uno sforzo limitato (lettori di CD, automobili, computer) Nel nostro caso si tratta di utilizzare codice esistente, sapendo cosa faccia, come invocarlo, ma senza alcun bisogno di sapere come lo faccia

Lab.Calc. AA 2005/063 Uso di funzioni Per molti scopi possiamo utilizzare una funzione esistente, abbiamo solo bisogno di conoscere –Il suo prototipo –Le precondizioni –Le postcondizioni Mentre possiamo ignorare completamente –la sua implementazione La forma generale di una chiamata ad una funzione è un'espressione del tipo nome_funzione (lista_di_argomenti)

Lab.Calc. AA 2005/064 Precondizioni e Postcondizioni Precondizione: ciò che la funzione richiede Postcondizione: ciò che la funzione farà se è soddisfatta la precondizione

Lab.Calc. AA 2005/065 Prototipo di funzione dichiarazione completa di una funzione senza la sua implementazione. I file header (nome.h) contengono di solito una lista di prototipi sintassi: tiponome_funzione (lista_parametri); Dove lista_parametri consiste in zero o più parametri separati da virgole

Lab.Calc. AA 2005/066 Un parametro può essere tipo tipo identificatore tipo & identificatore // lo vedremo nel prossimo corso! const altro_parametro

Lab.Calc. AA 2005/067 Esempio: elevazione a potenza Per elevare un numero x alla potenza y ci basta sapere che nelle librerie del C (che carichiamo automaticamente col comando g++) c'è una funzione che fa questo lavoro: pow. Per usarla dobbiamo sapere quali informazioni passarle (precondizioni), che cosa ci restituirà (postcondizioni), e di che tipo siano gli oggetti scambiati (informazione fornita dal prototipo) pow accetta due argomenti di tipo double, x e y, e restituisce un double, x alla y. Il suo prototipo è double pow(double x, double y);

Lab.Calc. AA 2005/068 Esempi Prototipi: –double fabs(double); –double sqrt(double x); –double pow(double x,double y); Uso: –cout << fabs(-1) << endl; –cout << sqrt(2.0) << endl; –cout << pow(2.5,6) << endl;

Lab.Calc. AA 2005/069 Informazioni fornite dal prototipo: il tipo (classe) di oggetto ritornato dalla funzione il nome della funzione il numero di argomenti da usare nella chiamata il tipo (classe) degli argomenti

Lab.Calc. AA 2005/0610 Moduli Un modulo è una raccolta di cose collegate tra di loro, quali funzioni, costanti e classi. Ad esempio il modulo math rappresenta una raccolta di funzioni matematiche e di costanti utili, come M_PI che vale Per usare le funzioni definite in un modulo bisogna –Includere il file header del modulo per avere i prototipi delle funzioni –Caricare la libreria del modulo durante il link (implicitamente se si tratta di librerie note al compilatore, esplicitamente in caso di librerie private)

Lab.Calc. AA 2005/0611 Espressioni con funzioni Le funzioni hanno priorità e vengono valutate prima degli operatori aritmetici e logici. Qualora necessario gli argomenti di una funzione vengono calcolati prima di invocare la funzione. Esempio: quanto vale 50.0 / pow(( ), 2)?

Lab.Calc. AA 2005/0612 Errori Le chiamate a funzioni possono introdurre errori – alcuni dei quali vengono trovati già dal compilatore – altri si manifestano solo durante l'esecuzione. Esempi: 1. numero sbagliato di argomenti: sin( ), sqrt(2,3), pow(2.0) 2. tipo di argomento sbagliato: sqrt("pippo") 3. funzione non definita per l'argomento usato: sqrt(-1.0) 4. risultato non definito (overflow o underflow): pow( , )

Lab.Calc. AA 2005/0613 Funzioni private Scrivere il vostro codice facendo un uso abbondante di funzioni lo rende –Di più facile lettura –Facilmente modificabile Inoltre le vostre funzioni, eventualmente raccolte in un modulo, possono essere riutilizzate in altri programmi Il C++ costringe il programmatore a scrivere codice modulare, altri linguaggi no, ma è comunque sempre buona norma farlo!

Lab.Calc. AA 2005/0614 Scrittura di funzioni L'implementazione delle nuove funzioni può essere scritta all'interno dello stesso file che contiene il programma (main) ma per la modularità del codice è preferibile dedicarle uno o più altri files. Assumiamo di avere il main in progr.cc. Se questo fa uso di funzioni che abbiamo implementato nel file funz.cc è necessario fornire i prototipi delle funzioni in un file funz.h, che dovrà essere incluso all'inizio di prog.cc.

Lab.Calc. AA 2005/0615 Esempio: riordino di una lista Consideriamo il seguente problema: data una lista di numeri 89,93,75,36,56,78,67,23,59,51 vogliamo organizzarli in ordine crescente

Lab.Calc. AA 2005/0616 Senza usare funzioni int main( ) { int A[10]= {89,93,75,36,56,78,67,23,59,51}; for(int j=0; j<9; j++) { for(int k=j+1; k<10; k++) { if(A[j]>A[k]) { int B=A[j]; A[j]=A[k]; A[k]=B; } return 1; }

Lab.Calc. AA 2005/0617 Si ottiene 89,93,75,36,56,78,67,23,59,51 // j=0 75,93,89,36,56,78,67,23,59,51 // k=2 36,93,89,75,56,78,67,23,59,51 // k=3 23,93,89,75,56,78,67,36,59,51 // k=7 23,89,93,75,56,78,67,36,59,51 // j=1 23,75,93,89,56,78,67,36,59,51 // k=3 23,56,93,89,75,78,67,36,59,51 // k=4 23,36,93,89,75,78,67,56,59,51 // k=7 E così via, fino ad arrivare a 23,36,51,56,59,67,75,78,89,93

Lab.Calc. AA 2005/0618 modularizzazione Nel riordinare la lista abbiamo cercato il numero più piccolo tra i 10 elementi e lo abbiamo collocato nell'elemento 0, poi il numero più piccolo tra i succesivi 9 elementi e lo abbiamo collocato nell'elemento 1... Di fatto abbiamo ripetuto per ogni elemento del nuovo vettore la ricerca del più piccolo tra i rimanenti elementi. Introduciamo allora una funzione che ci consenta di determinare quale degli elementi di un vettore sia il più piccolo e che abbia come argomenti il vettore stesso, e gli indici del primo e dell'ultimo elemento tra i quali cercare il minimo.

Lab.Calc. AA 2005/0619 Introducendo la funzione minList #include "funz.h" // gli header privati si includono tra " " // funz.h contiene il prototipo di minList int main( ) { int A[10]= {89,93,75,36,56,78,67,23,59,51}; for(int j=0; j<10; j++) { int minimo=minList(A, j,9); int B=A[minimo]; A[minimo]=A[j]; A[j]=B; } return 1; }

Lab.Calc. AA 2005/0620 funz.h #ifndef FUNZ_H #define FUNZ_H // questa funzione restituisce l'indice dell'intero più // piccolo tra gli elementi del vettore lista // compresi tra l'elemento con indice primo e l'elemento // con indice ultimo. // PRECONDIZIONE ultimo > primo int minList(int lista[ ],int primo, int ultimo); #endif

Lab.Calc. AA 2005/0621 funz.cc #include "funz.h int minList(int lista[ ],int primo,int ultimo) { int curMin = primo; for(int j = primo+1; j<=ultimo; j++) if(lista[j] < lista[curMin]) curMin = j; return curMin; }

Lab.Calc. AA 2005/0622 assert void assert(int espressione) il cui prototipo si trova in assert.h, è una funzione che valuta l'espressione che le viene data come argomento e se questa è falsa ferma il programma. La si usa per proteggere le funzioni da situazioni che possano dar luogo ad operazioni illegali: nel nostro caso vogliamo protegger minList, che esegue un ciclo dall'indice primo all'indice ultimo dalla situazione in cui primo>ultimo.

Lab.Calc. AA 2005/0623 funz.cc #include "funz.h" #include int minList(int lista[ ],int primo,int ultimo) { int curMin = primo; assert(ultimo > primo); for(int j = primo+1; j<=ultimo; j++) if(lista[j] < lista[curMin]) curMin = j; return curMin; }

Lab.Calc. AA 2005/0624 Si ottiene 89,93,75,36,56,78,67,23,59,51 // A[10] iniziale 89,93,75,36,56,78,67,23,59,51 // l'elemento più piccolo tra A[0] e A[9] 23,93,75,36,56,78,67,89,59,51 // lo si mette in A[0] 23,93,75,36,56,78,67,89,59,51 // si cerca tra A[1] e A[9] 23,36,75,93,56,78,67,89,59,51 // si cerca tra A[2] e A[9] 23,36,51,93,56,78,67,89,59,75 23,36,51,56,93,78,67,89,59,75 23,36,51,56,59,78,67,89,93,75 23,36,51,56,59,67,78,89,93,75 23,36,51,56,59,67,75,78,93,89 23,36,51,56,59,67,75,78,89,93

Lab.Calc. AA 2005/0625 modularizzazione ulteriore Osservando che, una volta trovato il minimo abbiamo sempre bisogno di effettuare uno scambio tra due elementi potremmo introdurre la funzione void swap(double & a, double & b) che dati due numeri a e b restituisce a=b(iniziale) e b=a(iniziale). Il significato dei double & sarà spiegato nel prossimo corso, ma per il momento è importante osservare che i parametri passati ad una funzione non possono essere modificati dalla funzione stessa a meno di non essere passati by reference (double &...).

Lab.Calc. AA 2005/0626 swap (in funz.h) void swap(double & a, double & b);

Lab.Calc. AA 2005/0627 swap (in funz.cc) void swap(double & a, double & b){ double temp = a; a = b; b = temp; }

Lab.Calc. AA 2005/0628 Introducendo la funzione swap #include "funz.h" // gli header privati si includono tra " " // contiene il prototipo di minList e di swap int main( ) { int A[10]= {89,93,75,36,56,78,67,23,59,51}; for(int j=0; j<10; j++) { swap(A[minList(A, j,9)],A[j]); } return 1; }

Lab.Calc. AA 2005/0629 Compilazione di funzioni private Due possibilità 1.Inserire tutte le funzioni all'interno di prog.cc, ponendo i loro prototipi all'inizio del file e compilare normalmente prog.cc (sconsigliato: non vi consente di riutilizzare le funzioni in un altro programma) 2.Creare funz.cc e funz.h, includere funz.h sia in prog.cc che in funz.cc, compilare separatamente programma e funz col comando g++ -c prog.cc g++ -c funz.cc e linkarli insieme col comando g++ -o eseguibile programma.o funz.o

Lab.Calc. AA 2005/0630 Librerie private Tutte le funzioni da voi create possono essere raccolte in una libreria: in questo caso dopo g++ -c funz.cc si usa il comando ar per archiviarle in una libreria, ad esempio ar –r libmy.a funz.o e il comando ranlib per aggiornare l'indice delle funzioni in libreria ranlib libmy.a Un programma può caricarsi le funzioni da libreria mediante il comando g++ -o eseguibile prog.cc libmy.a