Algoritmi, dati e programmi Laboratorio di Informatica AA 2007/2008 1 Scopo della lezione Introduzione ai concetti di: – problema – dato – algoritmo – linguaggio di programmazione – programma – diagramma di flusso Laboratorio di Informatica AA 2007/2008 2 1 Informatica informatica informazione mezzi mezzi fisici rappresentazione dell’informazione calcolatori procedure programmi Laboratorio di Informatica AA 2007/2008 3 Elaborazione di informazione Ogni problema di elaborazione di informazione è caratterizzato da – un insieme di dati di partenza – un risultato cercato Ogni sua soluzione è – una procedura che genera un risultato sulla base dei dati indicati Laboratorio di Informatica AA 2007/2008 4 2 Elaborazione dell’informazione • Es. Problema di elaborazione dell’informazione: “Quanto fa 21+32?” • Dati di partenza: {21,32} • Risultato cercato: {53} • Soluzione: procedura per l’addizione (addizione delle unità con riporto + addizione delle decine con riporto, ...) 21 + 32 = ----53 Laboratorio di Informatica AA 2007/2008 5 Elaborazione di informazione Distinguiamo tra: • conoscenza di come si risolve un problema – analisi del problema – identificazione di una soluzione – descrizione della soluzione • effettiva capacità di risolvere un problema – interpretazione della soluzione – attuazione della soluzione Laboratorio di Informatica AA 2007/2008 6 3 Elaborazione di informazione • Es. Problema di elaborazione dell’informazione: “Quanto fa 21+32?” • Conoscenza di come si risolve il problema: – – – • Analisi Æ è un problema di somma tra due numeri interi; Identificazione di una soluzione Æ esiste una procedura per la somma tra due numeri interi; Descrizione della soluzione Æ i due numeri interi vanno incolonnati, si sommano le unità, il riporto viene sommato alla somma delle decine, il riporto viene sommato alla somma delle centinaia, ... Effettiva capacità di risolvere il problema: – – Interpretazione della soluzione Æ un utente italiano legge la descrizione del problema e comprende le operazioni da eseguire; Attuazione della soluzione Æ 21 + 32 = ----53 Laboratorio di Informatica AA 2007/2008 7 Elaborazione di informazione • La conoscenza di come si risolve un problema è ciò che ci permette di sviluppare un programma. • Il programma sarà poi interpretato ed eseguito da un esecutore (es.: essere umano, calcolatore, ...) • Sono competenze distinte. Laboratorio di Informatica AA 2007/2008 8 4 Elaborazione di informazione • Conoscenza di come si risolve un problema Æ Scoperta / invenzione di un algoritmo per la risoluzione di un problema… Richiede uno sforzo creativo. • Risoluzione del problema Æ Intepretazione di un linguaggio ed esecuzione di una serie di operazioni… Operazioni “meccaniche”. Laboratorio di Informatica AA 2007/2008 9 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 10 5 Elaborazione di informazione Per la descrizione della soluzione si utilizza: • linguaggio naturale – italiano, inglese, … • sono linguaggi ambigui – Es. in una ricetta, “Aggiungere un pizzico di sale…” Quanto è un pizzico di sale? • linguaggio formale – – – – – formalismo matematico pseudo-codice diagramma di flusso (flow-chart) linguaggio di programmazione codice macchina • sono linguaggi non ambigui Laboratorio di Informatica AA 2007/2008 11 Elaborazione di informazione La descrizione della soluzione può essere fatta a diversi livelli di dettaglio: Esempio: • cucinare le lasagne al forno – preparare il ragù Alto livello – preparare la besciamella Basso livello • setacciare 50g di farina e stemperarla con 10cc di latte – … • aggiungere 30cc di latte e 50g di burro a pezzetti • …. – bollire le lasagne – mettere a strati nella teglia e cuocere in forno Laboratorio di Informatica AA 2007/2008 12 6 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 13 Algoritmo algoritmo [al-go-rìt-mo] s.m. Dal Dal nome del matematico ar. Al-Khuwa¯rizmi¯ (sec. IX): 1 (mat.) procedimento sistematico di calcolo: algoritmo algebrico, euclideo 2 nel Medioevo, il calcolo basato sull'uso delle cifre arabiche 3 in logica matematica, procedimento meccanico che permette la risoluzione di problemi mediante un numero finito di passi | (inform.) serie di operazioni logiche e algebriche, espresse in linguaggio comprensibile all'elaboratore, la cui sequenza costituisce un programma. Fonte: Dizionario Garzanti on-line (http://www.garzantilinguistica.it) Laboratorio di Informatica AA 2007/2008 14 7 Algoritmo La descrizione rigorosa di un metodo che consente di ottenere un risultato attraverso passi elementari si chiama algoritmo. Definizione di algoritmo: • • • • un insieme ordinato di passi eseguibili e non ambigui che determinano un procedimento atto a risolvere un problema o una classe di problemi • utilizzando dati iniziali e ottenendo dei risultati • in un tempo finito. Laboratorio di Informatica AA 2007/2008 15 Algoritmo Esempi: • gli algoritmi per eseguire le 4 operazioni che ci sono stati insegnati alle elementari – in un linguaggio adatto ai bambini • la ricetta per fare le lasagne – linguaggio dei libri di cucina • livello di dettaglio diverso a seconda delle competenze dell’esecutore (Æ linguaggi a basso / alto livello). • Att.ne! L’algoritmo è indipendente dal linguaggio nel quale viene espresso! Laboratorio di Informatica AA 2007/2008 16 8 Esempi di algoritmi Algoritmo per accedere a un PC del laboratorio • Accendere lo schermo se è spento • Scrivere il proprio <username> nella riga in cui compare la scritta login: • Scrivere la propria <password> nella riga in cui compare la scritta password • Se il sistema risponde con la frase: «utente non abilitato», chiamare il tutor Laboratorio di Informatica AA 2007/2008 17 Esempi di algoritmi (2) 12317 53 41 67 4 7 1759 Laboratorio di Informatica AA 2007/2008 18 9 Esempi di algoritmi (3) Laboratorio di Informatica AA 2007/2008 19 Linguaggio e algoritmo • Att.ne! Il linguaggio con cui è espresso l’algoritmo non fa parte dell’algoritmo! • Es. l’algoritmo per effettuare la somma tra due numeri è lo stesso sia in inglese che in italiano… Ciò che cambia è la rappresentazione dell’algoritmo, non l’algoritmo! Laboratorio di Informatica AA 2007/2008 20 10 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 21 Linguaggio Un linguaggio è costituito da: • un vocabolario; • una sintassi, cioè un insieme di regole che specificano come comporre i vocaboli per ottenere costrutti ben formati (sintatticamente corretti); • una semantica, che associa un significato ad ogni costrutto linguistico sintatticamente corretto. Laboratorio di Informatica AA 2007/2008 22 11 Sintassi e semantica Sintassi Semantica Esempi Girare la carta Un lato grigio Distinguere tra i due lati Piegare a monte rappresenta Piegare a valle rappresenta Ripiegare produce Piegare internamente produce Laboratorio di Informatica AA 2007/2008 23 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 24 12 Esecutore di algoritmi Un esecutore è un soggetto in grado di attuare le azioni specificate in un algoritmo • Nei casi esemplificati, noi Laboratorio di Informatica AA 2007/2008 25 Esecutore di algoritmi Un esecutore è quindi caratterizzato da: • il linguaggio che è in grado di interpretare • l’insieme di azioni che è in grado di compiere • l’insieme delle regole che ad ogni costrutto linguistico sintatticamente corretto associano le relative azioni da compiere. Laboratorio di Informatica AA 2007/2008 26 13 Esecutore di algoritmi A seconda dell’insieme delle azioni, differenti esecutori possono usare algoritmi diversi per risolvere uno stesso problema • Nel caso della divisione, un computer NON userebbe l’algoritmo proposto nell’esempio! • Es. algoritmo per spostarsi avanti di un metro: – muovi le gambe per un esecutore umano; – muovi le ruote per un robot. – CPU diverse possono utilizzare operazioni elementari diverse per eseguire semplici istruzioni! (es. utilizzano algoritmi diversi per la somma) Laboratorio di Informatica AA 2007/2008 27 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 28 14 Programmi • I programmi sono sequenze finite di istruzioni, ognuna scritta in un fissato linguaggio (di programmazione) • I programmi eseguibili da un computer devono essere scritti usando un linguaggio che il computer è in grado di “comprendere”. Laboratorio di Informatica AA 2007/2008 29 Programmi e algoritmi Un algoritmo può essere quindi specificato sottoforma di programma eseguibile da un calcolatore. Att.ne! Programma e algoritmo sono concetti diversi! Algoritmo = concetto astratto; Programma = sequenza finita di istruzioni in un determinato linguaggio… Può essere la rappresentazione di un algoritmo… Ma la sequenza di operazioni può anche non terminare in un tempo finito! Laboratorio di Informatica AA 2007/2008 30 15 Linguaggi di programmazione Un linguaggio di programmazione è costituito da: • un vocabolario • un insieme di regole sintattiche che specificano come comporre istruzioni ben formate • una semantica che associa un “significato” alle istruzioni ben formate, cioè l’azione denotata da ciascuna istruzione. Laboratorio di Informatica AA 2007/2008 31 Linguaggi di programmazione • Rispetto ad una qualsiasi lingua parlata da esseri umani, un linguaggio di programmazione è molto più semplice, perché la sua sintassi è molto semplice. • La teoria dei linguaggi formali fornisce una classificazione dei linguaggi in base alla loro “semplicità”. Laboratorio di Informatica AA 2007/2008 32 16 Linguaggi di basso livello • Linguaggi di programmazione le cui istruzioni corrispondono ad azioni molto elementari. Richiedono uno sforzo di codifica maggiore da parte di un programmatore. Laboratorio di Informatica AA 2007/2008 33 Linguaggi di alto livello • Linguaggi di programmazione alle cui istruzioni corrisponde un insieme di azioni più articolato. Richiedono uno sforzo di codifica inferiore da parte di un programmatore. Laboratorio di Informatica AA 2007/2008 34 17 Esempio • • • • Il linguaggio L1 mette a disposizione i comandi: Aggiungi_una_unità al dato A Leggi dato A Leggi dato B Esegui per <numero di volte> Laboratorio di Informatica AA 2007/2008 35 Esempio Il linguaggio L2 mette a disposizione i comandi: • Leggi dato A • Leggi dato B • Somma <addendo1, addendo2> Laboratorio di Informatica AA 2007/2008 36 18 Esempio (2) Vogliamo scrivere un programma per sommare due numeri A e B: In L1 In L2 • Leggi dato A • Leggi dato A • Leggi dato B • Leggi dato B • Esegui per B volte: Aggiungi _una_unità al • Somma (A, B) dato A Laboratorio di Informatica AA 2007/2008 37 Esempio (3) • L2 è un linguaggio di livello più alto rispetto a L1, perché offre al programmatore la possibilità di usare istruzioni che sono meno “vicine” al modo in cui lavora il processore e più vicine al modo in cui lavoriamo noi. Laboratorio di Informatica AA 2007/2008 38 19 Esempio (4) Alto livello Basso livello • “preleva dalla memoria il contenuto della cella A e mettilo nel registro AA della CPU”; • “preleva dalla memoria il contenuto della cella B e mettilo nel registro BB della CPU”; • “Somma i registri AA e BB e metti il risultato nel registro CC della CPU”; • “Copia in memoria il registro CC della CPU, in posizione C”. • C = A + B. Laboratorio di Informatica AA 2007/2008 39 Linguaggio macchina • Il processore è in grado di riconoscere (e quindi di eseguire) solo programmi scritti in un proprio linguaggio di basso livello (linguaggio macchina). • Ogni modello di processore (es: Intel, Pentium, Motorola, PowerPC) ha un proprio linguaggio macchina diverso da quello degli altri processori. Laboratorio di Informatica AA 2007/2008 40 20 Linugaggio macchina – diversi processori • Un processore di tipo A ha N registri; • Un processore di tipo B ha M>N registri; • Per il processore A, ogni istruzione che utilizza i registri da N+1 a M non ha senso! • Anche la sintassi o l’insieme di istruzioni del linguaggio possono essere diverse. Laboratorio di Informatica AA 2007/2008 41 Linugaggio macchina – diversi processori • Un processore di tipo A implementa direttamente la funzione “prodotto”; • Un processore di tipo B implementa l’operazione “somma” ma non l’operazione “prodotto”; • Per il processore B, non è disponibile l’operazione “prodotto” nel linguaggio a basso livello! • L’insieme di istruzioni del linguaggio macchina sono diverse per A e B. • Il processore B potrà essere utilizzato per fare dei prodotti utilizzando un ciclo e l’operazione “somma”. Laboratorio di Informatica AA 2007/2008 42 21 Linguaggi di alto livello • Un programma scritto in un linguaggio diverso dal linguaggio macchina deve essere quindi tradotto nel linguaggio che il processore sa riconoscere • I soggetti preposti a questa traduzione sono a loro volta dei programmi (interpreti e compilatori) • Compilatore Æ traduce un programma per intero, poi il programma può essere eseguito (es. programmazione in C, compilatore Microsoft); • Inerprete Æ traduce ed esegue un’istruzione immediatamente (es. Matlab). Laboratorio di Informatica AA 2007/2008 43 Interpreti e compilatori Programma (istruzione) in linguaggio macchina Intel Programma (istruzione) in linguaggio ad alto livello Interprete o compilatore Processore Intel Programma (istruzione) in linguaggio macchina Athlon Processore Athlon Programma (istruzione) in linguaggio macchina Motorola Processore Motorola Laboratorio di Informatica AA 2007/2008 44 22 Un confronto Velocità Portabilità Complessità Linguaggio macchina Linguaggi di alto livello Laboratorio di Informatica AA 2007/2008 45 Una nota sulla velocità • Molti linguaggi di alto livello vengono tradotti in linguaggio macchina da un apposito traduttore (detto compilatore), ottenendo in questo modo delle ottime prestazioni anche in termini di velocità • Esempi: C, PASCAL • JAVA si trova a metà strada Laboratorio di Informatica AA 2007/2008 46 23 Elaborazione di informazione Analisi del problema Individuazione dell’algoritmo Scrittura del programma Intepretazione del programma Dati Ambito scientifico del problema Programmazione Calcolatore Esecuzione del programma Risultato Laboratorio di Informatica AA 2007/2008 47 Dal problema al programma • Per costruire un programma conviene procedere con metodo, – passando da un’analisi del problema da risolvere – all’algoritmo di soluzione rappresentato in un “linguaggio” adatto all’uomo ma non troppo lontano dai linguaggi di programmazione – e infine al programma scritto nel linguaggio di programmazione prescelto Laboratorio di Informatica AA 2007/2008 48 24 Dal problema al programma Riassumendo, il processo di sviluppo di un programma prevede le seguenti fasi: – analisi del problema e specificazione dei dati in ingresso e in uscita; – identificazione e formalizzazione di una soluzione, definizione dell’algoritmo risolutivo; – programmazione in un linguaggio di programmazione “ad alto livello”; – traduzione in linguaggio macchina; – verifica (testing). Laboratorio di Informatica AA 2007/2008 49 Dal problema al programma Approccio top-down alla progettazione: • si parte da una descrizione ad alto livello della soluzione, in cui si individuano sotto-problemi • si definiscono le soluzioni dei sotto-problemi in termini di operazioni più elementari • … e così via, fino ad esprimere tutto in termini di problemi elementari. [Programmazione bottom-up – meno intuitiva Æ si parte dalla risoluzione dei singoli sottoproblemi, si assemblano poi le soluzioni dei sottoproblemi per arrivare alla soluzione di problemi più grandi – es. sviluppo di librerie] Laboratorio di Informatica AA 2007/2008 50 25 Dal problema al programma Due aspetti da gestire: • i dati da utilizzare • la successione di operazioni da compiere Laboratorio di Informatica AA 2007/2008 51 Dal problema al programma • introdurremo la nozione di contenitore di dati come astrazione dalla nozione di zona della memoria utilizzata da un computer per i dati • introdurremo i principali tipi di istruzioni • descriveremo gli algoritmi mediante diagrammi di flusso, strumento per descrivere una successione di operazioni adatto all’uomo e orientato alla traduzione in un linguaggio di programmazione Laboratorio di Informatica AA 2007/2008 52 26 Processo di sviluppo di un algoritmo orientato alla programmazione • Descriveremo i passi da seguire nella costruzione di un algoritmo, intesa come passo preliminare alla costruzione di un corrispondente programma. • Il processo delineato è adatto alla programmazione in piccolo – programmazione in piccolo = costruzione di programmi di dimensioni trattabili da un singolo programmatore • La programmazione in grande richiede processi di sviluppo ingegnerizzati, che non tratteremo. Laboratorio di Informatica AA 2007/2008 53 I contenitori di dati Un contenitore dati – è un’astrazione della nozione di area di memoria contenente dei dati, – è detto anche variabile di programma. • Un contenitore dati ha un tipo, che caratterizza – un insieme di elementi, cioè l’insieme dei valori ammessi per quel contenitore – le operazioni possibili su di essi – Es.: tipo intero (32 bit per ogni variabile) • insieme: insieme dei numeri interi rappresentabili • operazioni: +, -, *, /, ecc. Laboratorio di Informatica AA 2007/2008 54 27 I contenitori di dati • Es. tipo BYTE • Occupazione in memoria: 1 byte per variabile • Operazioni possibili: +, -, (attenzione all’overflow!), >, <, ==, *, / (con approssimazioni!) • Numeri da 0 a 255 – 0 Æ [00000000] – 255 Æ [11111111] Laboratorio di Informatica AA 2007/2008 55 I contenitori di dati • Es. tipo BOOLEAN • Occupazione in memoria: 1 byte per variabile • TRUE o FALSE – 0 Æ [00000000] –> FALSE – Qualsiasi altra rappresentazione Æ TRUE • Operazioni possibili: AND, OR, XOR, NOT… Non è possibile eseguire * o /! Laboratorio di Informatica AA 2007/2008 56 28 Rappresentazione grafica dei contenitori di dati Nome del contenitore: pippo tipo : intero pippo: intero 54 Contenuto = dato (appartenete al tipo di dati associato al nome, infatti 54 è un numero intero, e su di esso sono ammesse le usuali operazioni aritmetiche) Laboratorio di Informatica AA 2007/2008 57 I contenitori di dati • I linguaggi di programmazione ad alto livello (ma anche Excel e Access) prevedono la tipizzazione dei dati. • I dati possono essere di tipo semplice, cioè con un solo valore, ed i tipi comunemente previsti sono: – Intero • Es.: -158 0 32 – Reale • Es.: 1,414213562373 -56,133 – Logico • vero / falso – Testo • Es.: a, pippo, Mario_Rossi, casa Laboratorio di Informatica AA 2007/2008 58 29 I contenitori di dati • I dati possono essere di tipo strutturato, cioè contenenti più valori, ad esempio: – vettori e matrici (strutture uniformi, cioè più valori dello stesso tipo) • Es.: vettore di interi [2,5,7,3,12,43] – record (strutture non uniformi, cioè più valori non necessariamente dello stesso tipo) • Es.: studente cognome : caratteri nome : caratteri matricola : intero …. Rossi Mario 656565 …. Laboratorio di Informatica AA 2007/2008 59 Istruzioni • Tre categorie: – istruzioni di ingresso e uscita (lettura e scrittura) – istruzioni aritmetico-logiche (assegnamento) – istruzioni di controllo (selezione, iterazione) Laboratorio di Informatica AA 2007/2008 60 30 Istruzioni • Le istruzioni di ingresso / uscita permettono di acquisire dati e di presentare risultati Esempi: • read a – acquisisci un dato da tastiera e mettilo nel contenitore ‘a’ • print 'La media dei valori dati in ingresso è ', media – stampa il contenuto di ‘media’ preceduto da un commento Laboratorio di Informatica AA 2007/2008 61 Istruzioni • Le istruzione di assegnamento modificano lo stato di memoria, cioè i valori dei contenitori dati (detti variabili). Sono della forma: – CONTENITORE = ESPRESSIONE – (leggi: metti ESPRESSIONE in CONTENITORE) • Es.: a = b + 3 – ESPRESSIONE può essere: una costante, una variabile, un’espressione vera e propria, una funzione – CONTENITORE è il nome di una variabile – l’esecutore valuta l’ESPRESSIONE e mette il valore così calcolato in CONTENITORE, sostituendone il valore precedente. Laboratorio di Informatica AA 2007/2008 62 31 Espressioni • Le espressioni aritmetiche esprimono calcoli numerici – somma, sottrazione, prodotto divisione – elevamento a potenza, radice, logaritmo, esponenziale, ecc. • Es.: b**2 – 4 * a * c • Le espressioni sui caratteri modificano parole e testi. – concatenazione • Es.: moto&sega (risultato: motosega) –… Laboratorio di Informatica AA 2007/2008 63 Espressioni • Le espressioni logiche (o booleane) esprimono calcoli logici e possono quindi assumere solo i valori vero o falso. – Operatori logici relazionali: confronto fra due valori, ad esempio • x<y • (x + 5) = y • ecc. – Operatori logici AND, OR, NOT, ecc. per comporre, ad es.: • (x < y) AND (y < z) • Un valore booleano (vero, falso) è rappresentabile con un bit. Convenzionalmente si assegna 1 a vero, 0 a falso. Laboratorio di Informatica AA 2007/2008 64 32 Espressioni • Le espressioni di tipo booleano assumono particolare importanza perché, usate nelle istruzioni di controllo, ci permettono di prendere delle decisioni. Laboratorio di Informatica AA 2007/2008 65 Istruzioni • Le istruzioni di controllo permettono di modificare il flusso di esecuzione delle istruzioni all’interno di un programma, altrimenti puramente sequenziale. – Selezione • if, case, ... – Iterazione • while, repeat • for • Si basano sull’uso di espressioni booleane – Es. se x > 0, calcola la radice quadrata di x Laboratorio di Informatica AA 2007/2008 66 33 Diagrammi di flusso • Blocchi di elaborazione: contengono sequenze di azioni metti x+y in y metti x-1 in x Laboratorio di Informatica AA 2007/2008 67 Diagrammi di flusso • Blocchi decisionali: contengono una condizione booleana; se vera, si segue la freccia vero, se falsa si segue la freccia falso. falso vero x = 0 Laboratorio di Informatica AA 2007/2008 68 34 Diagrammi di flusso • Un diagramma di flusso si ottiene collegando le frecce uscenti dai blocchi di elaborazione e decisionali. Laboratorio di Informatica AA 2007/2008 69 Simboli principali • inizio o fine • elaborazione • decisione • connessione Laboratorio di Informatica AA 2007/2008 70 35 Strutture di controllo principali sequenza Laboratorio di Informatica AA 2007/2008 71 Strutture di controllo principali selezione vero falso Laboratorio di Informatica AA 2007/2008 72 36 Strutture di controllo principali Iterazione (sequenza + selezione) falso vero Laboratorio di Informatica AA 2007/2008 73 Esempio Inizio Function RadiceQuadrata; Acquisisci a SI’ Real a,b; // Si alloca spazio in memoria per a, b Repeat a<0? Display(‘Dammi a’); read a; NO Until (a>=0) b = sqrt (a) Scrivi: “la radice di a è <b>” b=sqrt(a); Display(‘La radice di a è: <b>’) end Fine Laboratorio di Informatica AA 2007/2008 74 37 Esempio di decomposizione modulare Laboratorio di Informatica AA 2007/2008 75 Esempio di programma strutturato procedura programma principale chiamata di procedura Laboratorio di Informatica AA 2007/2008 76 38 Paradigmi di programmazione • • Programmazione Æ Traduzione da diagramma di flusso (o da altra rappresentazione ad altissimo livello!) a linguaggio di programmazione. Esistono diversi paradigmi di programmazione… Approfondiamo la programmazione procedurale: – Basato su moduli (funzioni) che permettono di elaborare dei dati fornendo dei risultati; – Le funzioni possono essere incapsulate l’una dentro l’altra. • Es. Altro paradigma di programmazione: ad oggetti – si creano degli oggetti caratterizzati da uno stato e da alcune attività caratteristiche; – L’interazione tra oggetti fa avanzare il programma. – Es. oggetto panettiere; • Possibili stati: dietro al bancone, al forno… • Attività caratteristiche: cuocere il pane, emettere scontrino, … – Oggetto ‘consumatore’ • Possibili stati: al lavoro, a fare shopping,… • Attività caratteristiche: acquista pane, … Laboratorio di Informatica AA 2007/2008 77 Introduzione alla programmazione procedurale Moduli Æ funzioni Una funzione permette di elaborare i dati, può avere una serie di input (variabili di ingresso) e di output (variabili di uscita); Input Æ dati da elaborare; Output Æ risultati. Esempio: [Quoziente, Resto] = DivisioneIntera (Dividendo, Divisore) Laboratorio di Informatica AA 2007/2008 78 39 Introduzione alla programmazione procedurale Implementazione di: [Quoziente, Resto] = DivisioneIntera (Dividendo, Divisore), notazione Matlab. [Quoziente, Resto] = function DivisioneIntera (Dividendo, Divisore); Quoziente = div (Dividendo, Divisore); Resto = mod (Dividendo, Divisore); return; Parole chiave (function, return), caratteristiche del lingugaggio di programmazione. function Æ dichiarazione di una funzione; return Æ per terminare l’esecuzione della funzione (può essere omesso). Laboratorio di Informatica AA 2007/2008 79 Introduzione alla programmazione procedurale [Quoziente, Resto] = function DivisioneIntera (Dividendo, Divisore); • La prima riga contiene la dichiarazione della funzione. Nella dichiarazione viene utilizzata la parola chiave function, che specifica che si sta effettuando una dichiarazione di funzione; • E’ necessario dichiarare una funzione per poterla utilizzare in seguito; • Tutte le istruzioni terminano con ‘;’. Laboratorio di Informatica AA 2007/2008 80 40 Introduzione alla programmazione procedurale Quoziente = div (Dividendo, Divisore); Resto = mod (Dividendo, Divisore); • Elaborazione dei dati. • Per dichiarare una funzione, la sintassi è data da: – [Output1, Output2, … OutputN] = function Funzione (Input1, Input2, … input); • Per utilizzare una funzione, la sintassi è data da: – [Output1, Output2, … OutputN] = Funzione (Input1, Input2, … input); • E’ comodo creare una libreria di funzioni, perché ciascuna funzione può essere utilizzata da altre funzioni quando necessario (programmazione modulare – ogni funzione è un modulo da riutilizzare). Laboratorio di Informatica AA 2007/2008 81 Introduzione alla programmazione procedurale return; • Infine, la quarta e ultima riga termina l’esecuzione della funzione mediante la parole chiave return (opzionale in Matlab). Laboratorio di Informatica AA 2007/2008 82 41