Esercizi su. Funzioni

Похожие документы
Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

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

SISTEMI DI NUMERAZIONE E CODICI

Alla scoperta della nuova interfaccia di Office 2010

4 3 4 = 4 x x x 10 0 aaa

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

REVISIONE-CORREZIONE. La Revisione è un momento molto importante nel processo della produzione scritta.

QUANTIZZAZIONE diverse fasi del processo di conversione da analogico a digitale quantizzazione

Metodologie di programmazione in Fortran 90

Utilizzo delle formule in Excel

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

SISTEMA di GESTIONE QUALITÀ Non Conformità ed Efficacia delle Azioni Correttive Preventive

Corso di Laurea in Matematica. Seminario C/C++ Lorenzo Dusty Costa. Università degli Studi di Milano Dipartimento di Matematica

La selezione binaria

LA MOLTIPLICAZIONE IN CLASSE SECONDA

Uso di base delle funzioni in Microsoft Excel

Dimensione di uno Spazio vettoriale

IL METODO PER IMPOSTARE E RISOLVERE I PROBLEMI DI FISICA (NB non ha nulla a che vedere con il metodo scientifico)

Obiettivo Principale: Spiegare come la stessa cosa possa essere realizzata in molti modi diversi e come, a volte, ci siano modi migliori di altri.

Introduzione al MATLAB c Parte 2

Un metodo per il rilevamento degli errori: la tecnica del Bit di Parità

REGOLE PER L ESAME (agg.te settembre 2015)

Facciamo click su Ricerca tra i miei Viaggi

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

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

La somma. Esempio: Il prodotto. Esempio:

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

Logica Numerica Approfondimento 1. Minimo Comune Multiplo e Massimo Comun Divisore. Il concetto di multiplo e di divisore. Il Minimo Comune Multiplo

NOZIONI DI BASE DEL DIRITTO IL DIRITTO COME INSIEME DI REGOLE

CONSIGLI PER POTENZIARE L APPRENDIMENTO DELLA LINGUA

E naturale chiedersi alcune cose sulla media campionaria x n

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

ESEMPIO 1: eseguire il complemento a 10 di 765

Corso di Informatica

Obiettivo Principale: Aiutare gli studenti a capire cos è la programmazione

RISOLUTORE AUTOMATICO PER SUDOKU

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

Analisi e diagramma di Pareto

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

S- magari si potrebbe dire la prima riga, la seconda riga UNITÀ DIDATTICA: TESTO POETICO. Obiettivi

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Progetto di simulazione molecolare per il corso di Complementi di algoritmi A.A

Novità di Access 2010

Lezione 9: Cambio di base

CORSO VENDITE LIVELLO BASE ESERCIZIO PER L ACQUISIZIONE DEI DATI

In questa lezione abbiamo ricevuto in studio il Dott. Augusto Bellon, Dirigente Scolastico presso il Consolato Generale d Italia a São Paulo.

~ Copyright Ripetizionando - All rights reserved ~ STUDIO DI FUNZIONE

AUTOREGOLAZIONE PER IL COMPITO

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti

MINIGUIDA PER RISORSE SU CLASH OF CLANS

PowerPoint. Guida introduttiva

Elementi di Psicometria con Laboratorio di SPSS 1

IL MODELLO CICLICO BATTLEPLAN

I SISTEMI DI NUMERAZIONE

Matematica generale CTF

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

USO DI EXCEL CLASSE PRIMAI

COME AVERE SUCCESSO SUL WEB?

CONCETTO DI ANNIDAMENTO

Calcolatori Elettronici. La Pipeline Criticità sui dati Criticità sul controllo Cenni sull unità di controllo

Esercitazione N7:Gioco dei 21 fiammiferi (impariamo java giocando)

1. LE REGOLE EDUCAZIONE ALLA LEGALITA OBIETTIVI

Vincere a testa o croce

Come Calcolare un Preventivo RC Auto. Seguimi su. Marco Venturi Intermediario Assicurativo. MarcoVenturi10

Teoria delle code. Sistemi stazionari: M/M/1 M/M/1/K M/M/S

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

da 2 a 5 giocatori, dai 10 anni in su, durata 30 minuti

( x) ( x) 0. Equazioni irrazionali

Interesse, sconto, ratei e risconti

Rappresentare i nessi logici con gli insiemi

FLASHINVESTOR Manuale dell Utente

Appunti sulla Macchina di Turing. Macchina di Turing

Introduzione. Classificazione di Flynn... 2 Macchine a pipeline... 3 Macchine vettoriali e Array Processor... 4 Macchine MIMD... 6

SPC e distribuzione normale con Access

Modulo: I. Mi presento Livello: Alto

Informatica pratica. File e cartelle

Cap. 3. APERTURA NUOVO PROGETTO

SISTEMI DI NUMERAZIONE IL SISTEMA DECIMALE

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

UNA LEZIONE SUI NUMERI PRIMI: NASCE LA RITABELLA

risulta (x) = 1 se x < 0.

Capitolo 2. Operazione di limite

STAMPA UNIONE DI WORD

Come e quanto si guadagna con Human Support International?

13. Campi vettoriali

Cambiamenti nell'assicurazione invalidità

RAPPRESENTAZIONE GRAFICA E ANALISI DEI DATI SPERIMENTALI CON EXCEL

Corso di formazione CerTICTablet

Paghe Scaglioni. Fascia di reddito. Fascia di reddito

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

EXCEL FUNZIONI PRINCIPALI

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

CONTABILITA ON LINE GUIDA ALL USO PER I CIRCOLI INSERIRE IN PRIMA NOTA I COSTI

Processo di risoluzione di un problema ingegneristico. Processo di risoluzione di un problema ingegneristico

Office 2007 Lezione 02. Le operazioni più

MODULO 5 ACCESS Basi di dati. Lezione 4

Транскрипт:

Esercizi su Funzioni

๒ Varie Tracce extra Sul sito del corso

๓ Esercizi funz_max.cc funz_fattoriale.cc

๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità Documentare gli algoritmi utilizzati

๕ Documentazione: funzioni Interfaccia della funzione Valori in ingresso Valori in uscita Algoritmo implementato

๖ Collaudo (testing) Se non avessimo aggiunto il controllo in funz_fattoriale.cc Cosa accadeva se si inseriva un numero negativo? In generale come si va alla ricerca degli errori? Innanzitutto occorre provare il programma

๗ Esaustività 1/2 Se un programma funziona correttamente per un valore di ingresso, si può affermare che sia corretto?

๘ Esaustività 2/2 Ovviamente no Senza entrare in ulteriori dettagli, per questo corso diciamo solo che bisogna cercare di provare il programma per tutti gli ingressi possibili, o almeno per un alta percentuale degli ingressi possibili Quale logica e quale approccio usare?

Testing a scatola aperta Testing a scatola aperta (white box) Mi metto nei panni del compilatore prima e soprattutto dell'esecutore dopo Cerco di capire come vanno le cose al variare dei rami di codice eseguiti I commenti nel programma aiutano ๙

Testing a scatola chiusa Testing scatola chiusa (black box) Si opera sui valori di ingresso supponendo di non sapere nulla di come funziona il programma Si provano i valori agli estremi, nel mezzo, fuori dagli estremi degli intervalli consentiti ๑๐

๑๑ Fallimento 1/2 Se troviamo un caso in cui il programma non si comporta correttamento, siamo di fronte ad un caso di fallimento del programma Vi sono fondamentalmente due tipi di fallimento:

๑๒ Fallimento 2/2 1)Il programma viene terminato forzatamente dal sistema operativo Esempio: divisione per zero 2)Il programma non viene terminato forzatamente, ma fornisce risultati scorretti

๑๓ Debugging Ed una volta scoperto che il programma fallisce? Vuol dire che il programma contiene un errore Spesso si usa il termine bug o baco Il passo successivo è trovare l'errore

๑๔ Analisi del codice La prima cosa che possiamo fare per trovare l'errore è rileggere con cura il codice Cercare di capire dove sta l'errore Facendosi guidare, se possibile dal tipo di fallimento Spesso non è facile

๑๕ Tracing 1/3 Come faccio a capire dove e perché fallisce un programma? Cosa accade all'esecuzione di ciascuna istruzione? Eventuale cambio del flusso di esecuzione in conseguenza di Lettura di un qualche valore Scrittura di un valore

๑๖ Tracing 2/3 Cosa guida l'esecuzione di un programma? Il valore delle variabili Come posso guardare il valore delle variabili mentre il programma è in esecuzione? Stampandolo (tracing)!

๑๗ Tracing 3/3 Inserire una cout<< in un ciclo può creare problemi? Cosa succede se il ciclo non termina più? Possibili soluzioni? Inserire delle letture da stdin per controllare il ritmo delle iterazioni durante l'esecuzione

Collaudo e correzione errori D'ora in poi, ogni volta che si scrive un programma: Collaudarlo sempre a scatola aperta e chiusa Trovare e correggere autonomamente gli errori, eventualmente con l'aiuto del tracing Adottare questo approccio vi condurrà verso la professionalità nonché verso un buon voto alla prova pratica... ๑๘

๑๙ Somma di quadrati somma_quadrati.cc Mettere in pratica quanto appreso sul tracing se ci si imbatte in casi di fallimento

Valori di ritorno ed eccezioni Ritornare -1 oppure in generale un valore fuori dall'intervallo di valori di output attesi in caso di errore è una buona norma? Soluzione migliore: meccanismo delle eccezioni del C++ (non lo vedremo in questo corso) ๒๐

๒๑ Riassunto Abbiamo visto Chiamata di funzione con due parametri Suddivisione di un doppio ciclo tra il main ed una funzione Utilizzo delle cout<< per il tracing

๒๒ Difficoltà del debugging A questo appunto dovremmo aver acquisito abbastanza esperienza da aver capito fino in fondo che: correggere gli errori è faticoso In merito c'è un problema molto serio: Se introduciamo un secondo errore prima di esserci accorti del precedente, il debugging diviene molto più difficoltoso e lungo

๒๓ Combinazione errori Se ne introduciamo anche un terzo siamo in guai seri In sintesi, la difficoltà ed il tempo di debugging aumentano esponenzialmente col numero di errori perché gli errori possono combinare i loro effetti

Aggiunta codice ed errori Ma la nostra esperienza dovrebbe già averci insegnato che a peggiorare la situazione c'è anche il fatto che Ogni riga di codice che si aggiunge ad un programma può introdurre nuovi errori Detto tutto questo, come facciamo a sviluppare il nostro programma tenendo al minimo l'attività di debugging? ๒๔

๒๕ Ciclo di sviluppo 1/3 Un approccio estremamente efficace è il seguente: Dato l'insieme di linee di codice che si dovrebbero scrivere per aggiungere una certa funzionalità ad un programma (o per scrivere il programma da zero) Non scrivere tutto il codice subito per poi iniziare a revisionarlo, compilarlo, collaudarlo solo dopo aver finito di scriverlo

Ciclo di sviluppo 2/3 Al contrario, seguire sempre il seguente ciclo di sviluppo Dividere la scrittura in micro-fasi successive: Aggiungere una quantità minima di nuovo codice, tale che il programma dovrebbe perlomeno compilarsi Analizzare subito il codice aggiunto Provare a compilare Se compila procedere con la successiva micro-fase, altrimenti correggere gli errori ๒๖

๒๗ Ciclo di sviluppo 3/3 Se in una certa micro-fase si è aggiunto ormai abbastanza codice da avere una nuova versione funzionante del programma, allora anche se ancora non si è arrivati alla versione completa a cui si deve arrivare, collaudare subito la nuova versione parziale

๒๘ Quantità minima di codice Qual è la quantità minima di codice per ogni micro-fase? Non vi è una risposta precisa Dipende dal problema e dalla confidenza che il programmatore ha nel codice che sta scrivendo In ogni caso, l'errore tipico di un programmatore inesperto è quello di scrivere troppo prima di provare

๒๙ Approccio vincente D'ora in poi adottare sempre questo approccio nello sviluppo dei programmi Non farlo quasi sempre allunga il tempo necessario per arrivare ad un programma funzionante aumenta la probabilità che vi rimangano errori rende estremamente più spiacevole lo sviluppo del programma

๓๐ Generazione numeri primi gen_primi.cc Nella soluzione vedremo: Invocazione di funzioni all'interno delle funzioni Uso dell'istruzione vuota

๓๑ Compiti per casa In ordine di difficoltà: gen_primi_gemelli.cc congettura_goldbach.txt funz_quadrato_pieno.cc verifica_data.cc funz_pot_pos_overflow.txt ricevimento_iter.cc