LA METAORA DELL UICIO LAAGNA DI LAORO Lavagna di lavoro Lavagna di programma Sportello utenti Capo Ufficio Impiegato Chiamiamo variabili le posizioni sulla lavagna, identificate ognuna da un nome distinto, e valore il loro eventuale contenuto SPORTELLO UTENTE LAAGNA DI PROGRAMMA 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. 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. 1
ATTIITA ELEMENTARI DELL IMPIEGATO Istruzione di assegnamento: nome valore nome2 nome1 Istruzione di lettura: nome ( LEGGI IN-i ) nome2 ( LEGGI nome1 ) Istruzione di scrittura: ( SCRII OUT-i ) nome ( SCRII 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 ATTIITA : DIAGRAMMI DI LUSSO iene 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 logica che assume i valori vero () oppure falso (); possono avere più archi entranti, e da esso ne escono due, uno denotato con, e l altro con. TIPI DI BLOCCHI ESEMPIO DI DIAGRAMMA DI LUSSO Blocco di inizio Inizio Istruzione elementare Blocco decisionale Calcolo di base esp Start base (LEGGI IN-1) esp (LEGGI IN-2) Blocco funzionale val 1 ine Blocco di fine Condizione esp esp - 1 val val x base NO esp = 0 SI (SCRII OUT-1) val Exit 2
ESEMPIO DI ATTIITA PROBLEMI, ISTANZE Lavagna di lavoro b a s e 4 e s p 21 03 v a l 61 641 Modulo IN esp esp - 1 Modulo OUT 6 4 3 val val x base 4 Lavagna di programma Start base (LEGGI IN-1) esp (LEGGI IN-2) NO val 1 esp = 0 SI (SCRII OUT-1) val Exit 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 PROPRIETA DI UN ALGORITMO 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. inito: 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. 3
Risoluzione di un problema Come affrontare un problema MCD(132,24) 132,24 Istanza Dati di input Esigenze Utente Problema Algoritmo Programma Calcolatore Analisi MCD(N,M) Progettazione ALGORITMO DI EUCLIDE main() { } Programmazione Esecuzione Risultati 12 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 Test e Debugging Test Al fine di evidenziare possibili errori di progettazione o di programmazione (errata interpretazione dell algoritmo o dinamici) normalmente si prevede una fase di test (o verifica) del programma stesso. In questa fase si controllano che i risultati ottenuti siano validi per istanze particolari del mio problema (diversi valori iniziali, dati di ingresso particolari, ecc.). Se l algoritmo dara risultati corretti per queste particolari istanze, potremmo ragionevolmente pensare che esso dia risultati corretti per ogni istanza del problema. Debugging (dall inglese spulciare ) Se i risultati ottenuti nella fase di verifica evidenziano errori, si dovra effettuare il debugging del programma. Con questa operazione si intende la verifica passo-passo del programma scritto al fine di individuare i possibili errori fatti. 4
DIAGRAMMI DI LUSSO STRUTTURATI (DS) Strutture base Un diagramma di flusso strutturato (DS) è un Diagramma di lusso (D) 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 in ingresso ed uscita. Quando la programmazione fa uso sistematico di queste strutture, si parla di programmazione struttutata. DS SEQUENZA DS DS DS START DS STOP ITERAZIONE CON CONTROLLO INIZIALE ITERAZIONE CON CONTROLLO INALE SELEZIONE Le strutture di controllo sono a loro volta costituite da tre possibili costrutti: Sequenza Selezione (doppia o semplice) Iterazione DS DS Es: struttura di sequenza Es: struttura di selezione Inizio Istruzione1 Istruzione2 ine Istruzione1 Istruzione2 Pseudocodifica: Selezione doppia SE ALLORA Istruzione1 ALTRIMENTI Istruzione2 Pseudocodifica: Inizio Istruzione1; Istruzione2; ine Istruzione1 Selezione semplice SE ALLORA Istruzione1 5
Es: struttura di iterazione Alcune strutture derivate Corpo iterazione Pseudocodifica: Ciclo di while MENTRE ESEGUI Corpo iterazione* SELEZIONE MULTIPLA switch 1 2 3 altri Corpo iterazione Ciclo di repeat RIPETI Corpo iterazione* INCHE *NB: il corpo dell iterazione deve modificare la del blocco decisionale P1 P2 P3 errore NEL CASO CHE switch ALGA 1: ESEGUI P1; 2: ESEGUI P2; 3: ESEGUI P3; ALTRIMENTI: ESEGUI errore Alcune strutture derivate EQUIALENZA RA D CICLO CON CONTATORE OR cont = N1 TO N2, incr P2 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. P1 PER cont CHE A DAL ALORE N1 A N2 INCREMENTANDO DI incr 1: ESEGUI P1; Ciò significa che con i DS possiamo computare tutte le funzioni computabili, ma abbiamo perso in potenza espressiva, non potendo più realizzare qualsiasi algoritmo. Infatti: non per tutti i D esiste un DS fortemente equivalente. La soluzione è costituita da un linguaggio di diagrammi di flusso, chiamato DB (Diagrammi di lusso Ben ormati). Teorema di Peterson-Kasami-Tokura Per ogni diagramma di flusso esiste un diagramma di flusso ben formato fortemente equivalente 6