Sviluppo dei Programmi

Documenti analoghi
Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Linguaggio C: introduzione

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

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

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

Linguaggio C Debugging

Un esempio per iniziare. Il controllo del programma in C. Altri cenni su printf() Esercizi (printf) printf( 8!=%d, fatt);

Esercitazione 3. Espressioni booleane I comandi if-else e while

Elementi di informatica

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Primi passi col linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

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

IL PRIMO PROGRAMMA IN C

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

prova.c #include <stdio.h> char funzione(char); codice oggetto del main()

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

while Istruzione while Cicli ed iterazioni Istruzioni di ripetizione in C Comportamento del while

Esercizi C su array e matrici

Il calcolatore. Architettura di un calcolatore (Hardware)

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

5. Codifica degli Algoritmi in C

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

Un semplice programma L ambiente di sviluppo Dev-C++ Codifica del programma Compilazione e correzione errori Esecuzione e verifica

Linguaggio C - sezione dichiarativa: costanti e variabili

Formalismi per la descrizione di algoritmi

Indice. Prefazione. 3 Oggetti e Java 53

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Preprocessore, linker e libreria standard

ESERCIZI DI PROGRAMMAZIONE DA SVOLGERE INDIVIDUALMENTE - parte 1 -

Debug di un programma

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

Realizzare un programma che legga da input tre numeri interi e stampi a video la loro somma e la media.

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

La programmazione in linguaggio C

Istruzioni iterative (o cicliche)

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Indice PARTE A. Prefazione Gli Autori Ringraziamenti dell Editore La storia del C. Capitolo 1 Computer 1. Capitolo 2 Sistemi operativi 21 XVII XXIX

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

ESERCIZI DI PROGRAMMAZIONE. - condizionali e cicli -

#include <iostream> using namespace std; // int main ( ) { // --- Dichiarazione delle variabili int N ; float A, Pot;

Il linguaggio di programmazione Python

Strutture di iterazione

Algebra di Boole: Concetti di base. E un algebra basata su tre operazioni logiche

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

LINGUAGGI DI ALTO LIVELLO

Esercitazione 6. Array

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Corso di Reti di Calcolatori L-A

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Esercitazione 4. Comandi iterativi for, while, do-while

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Espressione di chiamata di funzione

Esercitazione 3. Oggi sono stati effettuati semplici esercizi in C utilizzando le seguenti istruzioni: if...else, while, printf, scanf

Corso di Fondamenti di Informatica

Corso di Laurea Ingegneria Civile Fondamenti di Informatica. Esercizi sui metodi. Carla Limongelli. Maggio Esercizi 1

Rappresentazione con i diagrammi di flusso (Flow - chart)

I S T I T U T O T E C N I C O I N D U S T R I A L E S T A T A L E

Informatica/ Ing. Meccanica/ Prof. Verdicchio/ 13/09/2013/ Foglio delle domande/versione 1

IDE DevC

Es 1. Scrivere un programma che verifica se una terna di numeri interi e' pitagorica

Indovina la lettera...

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

Corso di Fondamenti di Informatica Classi di istruzioni 2

acquisizione numero elementi del primo insieme e del secondo insieme, finché elprimoinsieme oppure elsecondoinsieme > EL_INS

Corso sul linguaggio C Modulo Tipi di dato

Scrittura formattata - printf

ISTRUZIONI ISTRUZIONI

Introduzione a. Funzioni di Ingresso e Uscita. Compilazione

Algoritmi e soluzione di problemi

Fondamenti VBA. Che cos è VBA

Programmazione I - Laboratorio

Esercizio 1: calcolo del massimo di una sequenza (versione 1)

Laboratorio di Algoritmi e Strutture Dati

1 (6) 2 (7) 3 (7) 4 (7) 5 (6)

Linguaggio C: le funzioni

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

Variabili e Istruzioni

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

Strutture di Controllo

Linguaggio C: le funzioni. Introduzione e sintassi

Corso di Fondamenti di Informatica Linguaggi di Programmazione

SOFTWARE. È l insieme delle istruzioni che è necessario fornire alla macchina per il suo funzionamento. Vi sono due categorie di software:

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Il generatore di numeri casuali

Programmazione I - Laboratorio

Le direttive del Preprocessore

Esercitazione 5. Procedure e Funzioni Il comando condizionale: switch

Fondamenti di Informatica T-1 Modulo 2

Input/Output di numeri

Introduzione al DEV C++

Linguaggi e moduli. Dott. Franco Liberati

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

Laboratorio di Algoritmi e Strutture Dati

La gestione della memoria dinamica Heap

Esercizi Programmazione I

Transcript:

Programmazione I a.a 2009-2010 docente: Carmine Gravino Sviluppo dei Programmi Presentazione realizzata dal Prof. Andrea De Lucia 1

Analisi e Specifica Sviluppo dei programmi Progettazione Codifica Verifica 2

Analisi e Specifica - Definizione di cosa fa il programma Individuazione dei dati di ingresso e di uscita, della precondizione e della regola di trasformazione dei dati di ingresso in dati di uscita (postcondizione) - Buona norma utilizzare un dizionario dei dati da arricchire durante le varie fasi del ciclo di vita Una tbll tabella il cui schema è: Attributo, Tipo, Descrizione La descrizione i serve a specificare meglio l attributo t e a descrivere il contesto in cui il dato viene usato 3

Un esempio: conversione di misura... Dati di ingresso: cm Precondizione: ii cm >= 0 Dati di uscita: <feet, inch> Postcondizione: feet è il massimo numero di piedi contenuti in cm e inch è il valore in pollici corrispondenti alla differenza tra cm e il valore in centimetri di feet. Il fattore di conversione tra pollici e centimetri è 2.54 e un piede equivale a 12 pollici Attributo Tipo Descrizione Cm reale Misura in centimetri in ingresso feet intero Misura in piedi in uscita inch reale Misura in pollici in uscita 4

Progettazione Definizione di come il programma effettua la trasformazione specificata; Progettazione dell algoritmo per raffinamenti successivi (stepwise refinement)... Decomposizione funzionale... (più avanti nel corso) - Esempio: Algoritmo per conversione di misura input cm calcola feet e inch a partire da cm output t feet e inch 5

Stepwise refinement - Dettagliare il passo di calcolo; calcola l inchtotali t (totalinches t = cm / 2.54) calcola feet a partire da inch totali (feet = parte_intera (totalinches / 12)) calcola inch rimanenti da inch totali e feet (inch = totalinches - feet * 12) introduzione variabile locale di tipo reale totalinches 6

Modifica del dizionario dei dati Il dizionario dei dati viene modificato ogni volta che viene introdotta una variabile nella progettazione dell algoritmo; Attributo Tipo Descrizione Cm reale Misura in centimetri in ingresso feet intero Misura in piedi in uscita inch reale Misura in pollici in uscita totalinches reale Misura in pollici dei centimetri in ingresso 7

Codifica e Verifica - Codifica dell algoritmo o nel linguaggio gg scelto - Verifica del programma (individuazione degli errori) Scelta dei casi di prova Esecuzione del programma Verifica dei risultati rispetto ai risultati attesi - Utilizzo del software di base... - Il nostro esempio... 8

#include <stdio.h> main() { float totalinches, cm, inch; itf int feet; Codifica } printf("this program converts centimeters to feet and inches.\n"); printf("length in centimeters? "); scanf("%f", & cm); totalinches = cm / 2.54; feet = totalinches / 12; inch = totalinches - feet * 12; printf("%f cm = %d ft + %f in.\n", cm, feet, inch); 9

Ambiente di programmazione integrato Contiene editor, compilatore, collegatore, e tool per testing e debugging 10

Ambiente non integrato (S.O. Linux) Un editor di testo: vi oppure pico vi i nomefile.c pico nomefile.c Un compilatore e un collegatore integrati: gcc Compilazione: gcc -c nomefile.c prodotto il programma oggetto nomefile.o Collegamento: gcc nomefile.o o o nomefile prodotto il programma eseguibile nomefile Compilazione e collegamento: gcc nomefile.c o nomefile prodotto il file nomefile 11

Scelta dei casi di prova e verifica I casi di prova non vanno scelti a caso l obiettivo è quello di una verifica il più possibile esaustiva (NB: verificare la correttezza di un qualsiasi programma è in generale indecidibile...)) cercare di evitare i casi di prova ridondanti ii casi di prova e i risultati della verifica vanno documentati... Input Output atteso Output effettivo (cm) (feet, inch) (feet, inch) 0 < 0, 0 > < 0, 0 > --- PASS 69.85 < 2, 3.5 > < 2, 3.5 > --- PASS 12

Errori nella stesura dei programmi - Errori sintattici (individuati in fase di compilazione) i A causa di errata scrittura o di mancanza di conoscenza delle regole del linguaggio (ad es. mancanza del ; alla fine di una istruzione) - Errori logici (più difficili da correggere) A causa di una errata trascrizione durante la codifica dell algoritmo (ad es. scrittura del numero 4 invece del numero 2) Si manifestano con malfunzionamenti durante l esecuzione del programma 13

Errori logici - Possono essere di diverso tipo: Errori nella definizione del problema (fasi di analisi e specifica) Errori di progettazione (es. nella definizione/scelta dell algoritmo) Errori nella stesura (codifica) dei programmi - Causano malfunzionamenti del programma - Più alta è la fase in cui avviene l errore più è difficile correggerlo: propagazione dell errore alle fasi più basse correzione degli errori: debugging 14

#include <stdio.h> main() { float totalinches, cm, inch; itf int feet; Programma con errore (bug) } printf("this program converts centimeters to feet and inches.\n"); printf("length in centimeters? "); scanf("%f", & cm); errore e totalinches = cm * 2.54; feet = totalinches / 12; inch = totalinches - feet * 12; printf("%f cm = %d ft + %f in.\n", cm, feet, inch); 15

Verifica e Debugging Input Output atteso Output effettivo (cm) (feet, inch) (feet, inch) 0 < 0, 0 > < 0, 0 > --- OK 69.85 < 2, 3.5 > < 14, 9.419 > --- FAIL Ricerca dell errore nel programma Ispezione i del codice ed esecuzione simulata Esecuzione e controllo dello stato del programma nei punti sospetti e nei punti critici Stato del programma: l insieme dei valori assegnati alle diverse variabili prima dell esecuzione di una data istruzione Strumenti automatici negli ambienti di programmazione Rimozione dell errore e nuova verifica con il caso di prova su cui è stato rilevato il malfunzionamento 16

Controllo precondizione Cosa succede se al programma precedente viene dato in ingresso un valore negativo per cm? valori l i di uscita indefiniti iti... preferibile evitare queste situazioni... L istruzione di selezione può essere utilizzata per controllare la precondizione, prima dell elaborazione dei dati di ingresso durante la verifica del programma usare anche casi di prova che violano la precondizione... 17

... rivisitiamo l algoritmo per la conversione di misura... input cm if(cm >= 0) { /* test precondizione */ calcola feet e inch apartiredacm output feet e inch } /* da raffinare */ else output errore: valore di ingresso negativo 18

#include <stdio.h> main() { float totalinches, cm, inch; int feet; Conversione da centimetri a piedi e pollici i } printf("conversion of centimeters to feet and inches.\n ); printf("length in centimeters? ); scanf("%f", & cm); /* Input cm */ if (cm >= 0) { /* test precondizione */ totalinches = cm / 2.54; feet = totalinches / 12; inch = totalinches - feet * 12; printf("%f cm = %d ft + %f in.\n", cm, feet, inch);} else printf( errore, valore di ingresso negativo \n ); 19

... verifica Input Output atteso Output effettivo (cm) (feet, inch) (feet, inch) 0 < 0, 0 > < 0, 0 > --- PASS 69.85 < 2, 3.5 > < 2, 3.5 > --- PASS -9.7 msg errore msg errore --- PASS 20

- Analisi e specifica Dati di ingresso: n Dati di uscita: fatt Precondizione: n >= 0 Un altro esempio: Il fattoriale Postcondizione: se n = 0 allora fatt = 1 altrimenti fatt = n * (n-1) * * 2 * 1 Progettazione input n if (n >= 0) { /* test precondizione */ } calcola il fattoriale di n e assegnalo a fatt output fatt else output t errore: valore di ingresso negativo 21

Stepwise refinement Raffinamento del passo: calcola il fattoriale di n e assegnalo a fatt fatt = 1 for (i =2;i<=n ; i++) fatt = fatt * i Attributo Tipo Descrizione n intero Numero in ingresso fatt intero Fattoriale del numero in uscita i intero Indice del ciclo 22

#include <stdio.h> main() { int n, fatt, i; Programma fattoriale } printf( Inserisci i i un intero positivo: i ); scanf( %d, &n); if (n >= 0) { /* test precondizione */ fatt = 1; for(i =2; i <= n; i++) fatt = fatt * i; printf( Fattoriale tt i di %d : %d \n, n, fatt); } else printf( errore errore, valore di ingresso negativo \n ); 23

... verifica Input Output atteso Output effettivo (n) (fatt) (fatt) 0 1 1 --- PASS 4 24 24 --- PASS -2 msg errore msg errore --- PASS 24

Forzare la precondizione ad essere verificata Nell esempio precedente il programma si arresta con un messaggio di errore nel caso in cui la precondizione i non è soddisfatta input x if (precondizione(x)) i ( elabora lb else messaggio di errore In alcuni casi potrebbe essere preferibile ripetere l immissione dell input (è una scelta di progetto) do input x while (!precondizione(x)) elaborazione lb 25

#include <stdio.h> main() { int n, fatt, i; Forzare la precondizione... do { printf( Inserisci un intero positivo: ); scanf( %d, &n); }while(n < 0); /* test precondizione */ fatt = 1; for(i =2;i<= n; i++) fatt = fatt * i; printf( Fattoriale di %d : % d \n, n, fatt); } Ripete l input finché la precondizione non è verificata 26

Differenziare la prima immissione... In alcuni casi è preferibile visualizzare un messaggio di errore nel caso di input che violano la precondizione Ovviamente tale messaggio non deve comparire alla prima immissione: necessità di trattare la prima immissione fuori dal ciclo input x; while (!precondizione(x)) { messaggio di errore; input x; } elaborazione done = FALSE; while (! done) { input x; if(precondizione(x)) i ( done = TRUE; else messaggio di errore;} elaborazione 27

#include <stdio.h> prima immissione... main() { int n, fatt, i; printf( Inserisci un intero positivo: ); scanf( %d, &n); while(n < 0) ){ printf( Errore: numero negativo! \n ); printf( Inserisci un intero positivo: ); scanf( %d, &n); } fatt = 1; for(i =2;i<= n; i++) fatt = fatt * i; printf( Fattoriale di %d : %d \n, n, fatt); } 28

#include <stdio.h> prima immissione void main() { int n, fatt, i; int tdone = 0; while(!done) { printf( Inserisci un intero positivo: ); scanf( %d, &n); if(n >= 0 ) done = 1; else printf( Errore: numero negativo! \n ); } fatt = 1; for(i =2; i <= n; i++) fatt = fatt * i; printf( Fattoriale di %d : %d \n, n, fatt); } 29