LA METAFORA DELL UFFICIO Lavagna di lavoro Lavagna di programma Sportello utenti Impiegato Capo Ufficio
LAVAGNA DI LAVORO Chiamiamo variabili le posizioni sulla lavagna, identificate ognuna da un nome distinto, e valore il loro eventuale contenuto
SPORTELLO UTENTE Modulo IN: modulo di ricezione di dati dall utente. Certificato OUT: certificato per la comunicazione di risultati all utente. Sia il modulo sia il certificato sono organizzati in posizioni (per un totale rispettivamente MIN e MOUT) di N caselle come la lavagna di lavoro, ma non hanno cornice, in quanto si suppone che le loro posizioni abbiano nomi standard IN-i e OUTj, con i compreso tra 1 e MIN e j compreso tra 1 e MOUT.
LAVAGNA DI PROGRAMMA Su questa lavagna viene descritto, secondo un opportuna modalità che vedremo, il compito che l impiegato deve svolgere, in base a una serie di attività elementari che egli è in grado di eseguire. Il compito viene descritto sulla lavagna da un direttore dell ufficio. Un segnalino magnetico, a forma di freccia, da posizionare sulla lavagna magnetica in corrispondenza dell attività elementare che l impiegato sta per svolgere.
ATTIVITA ELEMENTARI DELL IMPIEGATO Istruzione di assegnamento: nome valore nome2 nome1 Istruzione di lettura: nome ( LEGGI IN-i ) nome2 ( LEGGI nome1 ) Istruzione di scrittura: ( SCRIVI OUT-i ) nome ( SCRIVI nome2 ) nome1 Operazioni aritmetiche e logiche: nome op1 + op 2 (oppure -, x, /) op1 > op2 (oppure <, =) vera se il valore di op1 è maggiore (minore, uguale) del valore di op2
ORGANIZZAZIONE DELLE ATTIVITA : DIAGRAMMI DI FLUSSO Viene descritta dal direttore sulla lavagna di programma utilizzando i diagrammi di flusso. Un diagramma di flusso è una struttura costituita da blocchi connessi da frecce (più formalmente, sono grafi costituiti da nodi e archi orientati che collegano coppie di nodi). Esistono quattro tipi di blocchi: un blocco di inizio, che indica l inizio del programma; è unico in un programma, e può presentare un solo arco uscente e nessuno entrante; un blocco di fine, che denota la fine del programma e quindi non avrà archi uscenti, ma solo uno o più archi entranti; possono essercene più d uno; blocchi funzionali, che contengono un istruzione elementare di tipo aritmetico, di assegnamento, di lettura e scrittura, rappresentata come descritto nel paragrafo precedente; possono avere più archi entranti, ma solo uno uscente; blocchi decisionali: possono contenere una condizione logica che assume i valori vero (V) oppure falso (F); possono avere più archi entranti, e da esso ne escono due, uno denotato con V, e l altro con F.
TIPI DI BLOCCHI Blocco di inizio Inizio Istruzione elementare Blocco decisionale Blocco funzionale Fine V Condizione F Blocco di fine
ESEMPIO DI DIAGRAMMA DI FLUSSO Start Calcolo di base esp base (LEGGI IN-1) esp (LEGGI IN-2) val 1 esp esp - 1 val val x base NO esp = 0 SI (SCRIVI OUT-1) val Exit
ESEMPIO DI ATTIVITA Modulo IN Lavagna di lavoro b a s e 4 4 3 Lavagna di programma e v s a p l 21 03 61 641 Start base (LEGGI IN-1) esp (LEGGI IN-2) val 1 esp esp - 1 val val x base NO esp = 0 SI (SCRIVI OUT-1) val Modulo OUT Exit 6 4
PROBLEMI, ISTANZE Un problema è un insieme di domande omogenee. Esempio: calcolare la radice quadrata intera di un numero naturale. Per descrivere un problema in modo più preciso si possono evidenziare questi punti usando il concetto di variabile: il problema precedente potrebbe essere formulata con Calcolare la radice quadrata intera di un numero naturale X. Un istanza di un problema è uno specifico esemplare della classe di domande omogenee cioe una specifica domanda. Esempio: calcolare la radice quadrata intera di 27. Un istanza deve specificare il valore delle variabili. La soluzione di un istanza di un problema è la risposta a una domanda.
ALGORITMO, LINGUAGGI DI PROGRAMMAZIONE PPROGRAMMI Un algoritmo è un procedimento che permette di rispondere a tutte le istanze di un certo problema. Essendo l algoritmo un concetto astratto, non può essere comunicato dal direttore all ufficio senza un passo di rappresentazione. Il diagramma di flusso è quindi la rappresentazione dell algoritmo in un certo formalismo. Il diagramma di flusso è quindi la rappresentazione dell algoritmo in un certo formalismo. La rappresentazione è detta programma e il formalismo linguaggio di programmazione. Un calcolatore è quindi un esecutore universale di algoritmi: può eseguire qualsiasi algoritmo gli venga fornito, purché rappresentato nel formalismo (programma) che il calcolatore sa comprendere.
PROPRIETA DI UN ALGORITMO Finito: Un algoritmo deve essere composto da un numero finito di istruzioni. Non ambiguo: ogni istruzione deve essere non ambigua, interpretabile in un unico modo. Inoltre anche il modo di combinare le istruzioni deve essere non ambiguo. Deterministico: con uguali dati di ingresso e a parita di condizioni di partenza, deve produrre gli stessi risultati.
Risoluzione di un problema Esigenze Utente Analisi Problema MCD(N,M) Progettazione MCD(132,24) Istanza Algoritmo ALGORITMO DI EUCLIDE Programmazione 132,24 Dati di input Programma main() { } Esecuzione Calcolatore Risultati 12
Come affrontare un problema Analisi Dall esigenze dell utente e dai dati di ingresso, capire cosa ci si aspetta per la soluzione del problema (dati di uscita). Progettazione Scomporre il problema in sottoproblemi piu semplici fino a giungere ad operazioni elementari (programmazione top-down). Trovare l algoritmo risolvente. Programmazione Convertire l algoritmo nel linguaggio di programmazione scelto. Esecuzione Con i dati di ingresso, verificare il buon funzionamento del programma
Errori Errori di analisi Sono dovuti all errata interpretazione delle esigenze dell utente. Normalmente comportano il rifacimento dell intero processo Errori di progettazione Portano all errata scrittura dell algoritmo. Normalmente si rivelano all esecuzione di istanze particolari e sono molto difficili da individuare Errori di programmazione Dovuti ad una errata implementazione dell algoritmo. Statici: errata scrittura del programma (di sintassi e/o grammaticali) Dinamici: si manifestano solo all esecuzione del programma Errori di esecuzione Molto rari, talvolta dovuti a malfunzionamendi hardware/software del calcolatore
DIAGRAMMI DI FLUSSO STRUTTURATI (DFS) Un diagramma di flusso strutturato (DFS) è un Diagramma di Flusso (DF) composto con apposita regola in cui il BSG (Blocco Strutturato Generico) può essere a sua volta una struttura di controllo o un blocco funzionale semplice, e ha un solo arco entrante. Quando la programmazione fa uso sistematico di queste strutture, si parla di programmazione struttutata. START DFS STOP Le strutture di controllo sono a loro volta costituite da tre possibili costrutti: Sequenza Selezione (doppia o semplice) Iterazione
Strutture base SEQUENZA F condizione V DFS DFS DFS DFS ITERAZIONE CON CONTROLLO INIZIALE ITERAZIONE CON CONTROLLO FINALE SELEZIONE condizione V F DFS DFS V condizione F
Es: struttura di sequenza Inizio Istruzione1 Istruzione2 Fine Pseudocodifica: Inizio Istruzione1; Istruzione2; Fine
Es: struttura di selezione Pseudocodifica: V condizione F Selezione doppia SE condizione Istruzione1 Istruzione2 ALLORA Istruzione1 ALTRIMENTI Istruzione2 V condizione F Selezione semplice SE condizione Istruzione1 ALLORA Istruzione1
Es: struttura di iterazione condizione V Corpo iterazione F Pseudocodifica: Ciclo di while MENTRE condizione ESEGUI Corpo iterazione* V Corpo iterazione condizione F Ciclo di repeat RIPETI Corpo iterazione* FINCHE condizione *NB: il corpo dell iterazione deve modificare la condizione del blocco decisionale
Alcune strutture derivate SELEZIONE MULTIPLA switch 1 2 3 altri P1 P2 P3 errore NEL CASO CHE switch VALGA 1: ESEGUI P1; 2: ESEGUI P2; 3: ESEGUI P3; ALTRIMENTI: ESEGUI errore
Alcune strutture derivate CICLO CON CONTATORE FOR cont = N1 TO N2, incr P2 P1 PER cont CHE VA DAL VALORE N1 A N2 INCREMENTANDO DI incr 1: ESEGUI P1;
EQUIVALENZA FRA DF Equivalenza debole: due diagrammi di flusso X e Y si dicono debolmente equivalenti se e solo se, per ogni possibile dato d ingresso, le funzioni da essi computate assumono lo stesso valore o sono indefinite. Equivalenza forte: due diagrammi di flusso X e Y si dicono fortemente equivalenti se e solo se, per ogni possibile dato d ingresso, le sequenze di computazione generate sono uguali. Teorema di Böhm-Jacopini Per ogni diagramma di flusso esiste un diagramma di flusso strutturato debolmente equivalente. Ciò significa che con i DFS possiamo computare tutte le funzioni computabili, ma abbiamo perso in potenza espressiva, non potendo più realizzare qualsiasi algoritmo. Infatti: non per tutti i DF esiste un DFS fortemente equivalente. La soluzione è costituita da un linguaggio di diagrammi di flusso, chiamato DFBF (Diagrammi di Flusso Ben Formati). Teorema di Peterson-Kasami-Tokura Per ogni diagramma di flusso esiste un diagramma di flusso ben formato fortemente equivalente