FUNZIONI. Ivan Lanese

Documenti analoghi
DEBUGGING. Ivan Lanese

DEBUGGING. Ivan Lanese

Prof. Pagani Corrado IL DEBUGDEL SOFTWARE

Debug di un programma

Programmazione con Java

Fondamenti di informatica T-1 (A K) Esercitazione 6: Eclipse

NOTE SULL USO DI ECLIPSE per la compilazione di programmi c

INTRODUZIONE A VISUAL STUDIO

Esercitazioni di Fondamenti Informatica - Modulo A 1

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

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

Laboratorio di Python

COMANDI ITERATIVI. Ivan Lanese

Assegnazione di una variabile

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Qualsiasi programma in C++ segue lo schema:

Costrutti di iterazione

Implementazione dell albero binario in linguaggio C++

Fondamenti di Informatica AA 2016/2017

IL COSTRUTTO SEQUENZA

STRUTTURE DI CONTROLLO DEL C++

Variabili e input/ Alessandra Giordani Lunedì 18 marzo

Creare un nuovo progetto. Marco Bonelli a.s. 2016/2017. San Secondo P.se I,T.I.S. G. Galilei Department of Computer Science.

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 02/04/2014/ Appello straordinario/ Foglio delle domande / VERSIONE 1

ESPRESSIONI. Ivan Lanese

Lezione 6 Introduzione al C++ Mauro Piccolo

Fondamenti di Informatica T-1 CdS Ingegneria Informatica. Introduzione agli ambienti di sviluppo MS Visual Studio 2005/2008/2010 CodeLite 6.1.

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

PER UTILIZZARE LCC IN LAB

Funzioni, Stack e Visibilità delle Variabili in C

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

L AMBIENTE CODE BLOCKS E L IO

Introduzione a Visual Studio 2005

COSTRUZIONE DI UN APPLICAZIONE

Funzioni. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

uguale livello gerarchico non vi sono funzioni più importanti di altre main main

Anno Accademico Laboratorio di Tecnologie Web Uso di Firebug

Linguaggio C Debugging

Le istruzioni cicliche o iterative: for e while

Laboratorio di informatica Ingegneria meccanica

L AMBIENTE CODE BLOCKS E L IO

Funzioni. Libro cap. 5. Moreno Marzolla Dipartimento di Informatica Scienza e Ingegneria (DISI) Università di Bologna

Ripasso di programmazione ricorsiva

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

INFORMATICA. Strutture condizionali

Sunto della scorsa lezione Il linguaggio C. Un Programma con Errori. Il preprocessore. Linguaggi di Programmazione I.

PROGRAMMAZIONE: I sottoprogrammi

Operazioni numeriche - Input

PROGRAMMAZIONE: ESERCITAZIONE N. 6

Errori di programmazione Università degli Studi di Milano

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Qualsiasi programma in C++ segue lo schema:

ISTRUZIONI DEVC++ Autore: Luca Florio (luca.florio<at>polimi.it)

Linguaggio C. strutture di controllo: strutture iterative. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.

Concetto di Funzione e Procedura METODI in Java

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

Tutorial su Codelite. Luca Ceriani 2011 Federico Cerutti

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

COSTRUZIONE DI UN APPLICAZIONE

LabVIEW (Laboratory Virtual Instrument Engineering Workbench)

Programmazione di base

Istruzioni iterative (o cicliche)

Programmazione orientata agli oggetti. Ivan Lanese e Cosimo Laneve

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

Lab 01 Introduzione a Codelite

Il compilatore Dev-C++

Le strutture di controllo

Struttura di un. Struttura dei programmi C

Definizione di classi. Walter Didimo

Corso di Fondamenti di Informatica

ISTRUZIONI ISTRUZIONI SEMPLICI

ESEMPIO: le variabili LETTURA/SCRITTURA DI VARIABILI. Specifica Leggere da tastiera un intero, un carattere, un float e un double. Stamparli a video.

Fondamenti di Informatica. Ingegneria elettronica

2 Lavorare con Eclipse

Elementi DI INFORMATICA. Linguaggio C

INTRODUZIONE ALLA PROGRAMMAZIONE

Corso di Fondamenti di Programmazione canale E-O. Un esempio. Funzioni ricorsive. La ricorsione

Scritto di Algoritmi e s.d. (1o anno) 5 Luglio 2005

Valutazione di espressioni

Informatica per Statistica Riassunto della lezione del 17/10/2012

Perché il linguaggio C?

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

passaggio di vettori come parametri di funzioni/procedure. I Quando si passa un vettore come parametro ad una funzione, in

Errori frequenti Cicli iterativi Array. Cicli e array. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A.

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Primo esempio di un programma Java

#include <iostream> // libreria che gestisce flusso di input e output. using namespace std; // uso di librerie standard del C++

IL LINGUAGGIO JAVA. Input, Tipi Elementari e Istruzione Condizionale. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

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

Algoritmi e basi del C Struttura di un programma

Manualistica 3 Le strutture di controllo

Le basi del linguaggio Java

Esercizi Programmazione I

Transcript:

FUNZIONI Ivan Lanese

Argomenti Tecniche di debugging Funzioni

Di solito i programmi non funzionano int main() { int n, prod = 1; do { cout << "Inserire un numero (0 per uscire):"; cin >> n; prod = prod * n; } while (n!= 0); cout << "Il prodotto è " << prod << "\n"; return 0; }

3 tipi di errori Errori di compilazione Errori a run time Errori logici

3 tipi di errori Errori di compilazione Esempio: manca un ; Notificati dal compilatore Semplici da individuare Non sempre semplici da correggere A volte il messaggio di errore non è preciso A volte il messaggio di errore si riferisce alla riga sbagliata Errori a run time Errori logici

3 tipi di errori Errori di compilazione Errori a run time Esempio: divisione per 0 Si verificano durante l'esecuzione e ne causano l'interruzione Non necessariamente in tutte le esecuzioni Difficili da individuare In quali circostanze si verifica l'errore? Quale ne è la causa? Errori logici

3 tipi di errori Errori di compilazione Errori a run time Errori logici Esempio: il programma restituisce sempre 0 Il programma esegue normalmente ma il risultato non è quello atteso Non semplice rendersi conto dell'esistenza dell'errore il risultato potrebbe essere simile a quello atteso il risultato atteso potrebbe non essere noto l'errore potrebbe presentarsi solo in certe esecuzioni Molto difficili da individuare In quali circostanze si verifica l'errore? Quale ne è la causa? Quali risultati parziali sono giusti e quali sbagliati?

Tecniche di debugging Debugging a mano Si inseriscono delle stampe ausiliarie per capire il flusso dell'esecuzione gli stati intermedi Non richiede supporto dai tool Richiede attenzione a non introdurre ulteriori errori Potrebbe essere necessario aggiungere parentesi Un po' artigianale Uso di tool di debug Richiede l'uso di tool dell'ambiente di sviluppo o esterni Consente di verificare il flusso dell'esecuzione: tracing, breakpoints gli stati intermedi Molto potente Eclipse fornisce un buon supporto

Debugging in Eclipse: tracing Lanciate il programma con Debug dal menu Run Passate alla prospettiva Debug A destra potete vedere i valori delle variabili e i breakpoints definiti Potete modificare i valori delle variabili per vedere cosa succede Potete aggiungere espressioni da visualizzare con Add watch expression... Eseguite il programma passo passo con Step into del menu Run Potete far completare l'esecuzione con Resume del menu Run

Debugging in Eclipse: breakpoints Potete definire un breakpoint con Toggle breakpoint Sospende l'esecuzione quando viene raggiunta la riga in cui si trova Se il programma è eseguito in modalità Debug (tramite Resume) Potete gestire i vostri breakpoint nella finestra a destra Abilitarli/disabilitarli Aggiungere informazioni di log Eliminarli Visibili nell'apposita console

Errori classici Alcuni errori classici vengono individuati da Eclipse e segnalati come warning Assegnamento al posto di una condizione Variabili non usate... Obi Wan (off by one) Quando un ciclo viene eseguito una volta in più o in meno di quanto serve Errore nei casi limite Nei programmi che lavorano su numeri controllate sempre cosa succede se un numero è 0 Un buon modo per evitare errori è scrivere codice pulito

Funzioni: reminder Una funzione è un blocco di codice a cui è associato un nome int square (int n) { return (n*n); } Le funzioni consentono di risparmiare codice Scrivendo una volta sola codice ripetuto Rendendo il codice parametrico tramite passaggio dei parametri L'uso di funzioni in modo opportuno Rende il codice più leggibile Rende il codice più facile da modificare

Funzioni: quando usarle Una funzione contiene un blocco di codice con una funzionalità chiara e con poche dipendenze verso l'esterno che corrispondono ai parametri e ai valori di ritorno Le funzioni vanno usate quando lo stesso blocco di codice è usato più volte all'interno del programma o in programmi diversi Quando lo stesso codice compare più volte nel programma non esitate a trasformarlo in una funzione lo sforzo richiesto sarà ripagato in seguito Le funzioni ricorsive oltre a consentire un notevole risparmio di codice forniscono uno stile di programmazione alternativo

Funzioni: parametri e valore di ritorno Rappresentano i legami tra la funzione e il resto del programma Vanno evitate altre dipendenze, quali accessi a variabili globali, che rendono il programma poco leggibile e poco modificabile Una funzione ha un numero arbitrario ma fissato di parametri Anche il tipo di ogni parametro è fissato Una funzione restituisce al più un valore, di tipo fissato Se nessun valore viene restituito si usa void Se vogliamo restituire più di un valore si usano parametri passati per riferimento Va evitato se possibile, perchè rende il programma meno chiaro In seguito vedremo soluzioni alternative

Funzioni: esercizi Scrivere un programma che legge un numero binario da tastiera e lo stampa in decimale Scrivere un programma che calcola il massimo comun divisore di 4 numeri interi Scrivere un programma che legge due numeri binari da tastiera e ne stampa la somma e il prodotto (sempre in binario) Scrivere una funzione che dati due numeri interi x e y calcoli x^2+y^2 e x^2*y

Funzioni: debugging Per effettuare il debugging di un problema complicato conviene prima verificare il funzionamento delle singole funzioni Definite un semplice main che consente di testarle con vari parametri Testate anche i casi inaspettati Quando siete confidenti nella correttezza della funzione potete eseguirla in un passo solo durante il debugging con Step over Si ferma comunque in presenza di breakpoints