Informatica B Introduzione al corso Danilo Ardagna Politecnico di Milano 11-3-2013 Corso offerto a ! Ingegneri Elettrici [A,L) ! Ingegneri Chimici ! Ingegneri dei Materiali e Nanotecnologie 2 Docenti Docente: Danilo Ardagna Dipartimento di Elettronica, Informazione e Biongingegneria e-mail: [email protected] Ufficio: Dipartimento di Elettronica, Informazione e Bioingegneria, Ed. 22 piano III Via Golgi 42 Tel: 02/2399 3514 Esercitatori: Michele Ciavotta, [email protected] Responsabili di laboratorio: Davide Cucci, [email protected] Luca Florio, [email protected] 3 Organizzazione ! Il corso equivale a 7 crediti ! ! ! ! Lezioni = 36 ore Esercitazioni = 30 ore Laboratorio = 18 ore Orario: ! Lezioni ed Esercitazioni: Martedì 8.15– 10.15, aula CG3 Giovedì 14.15 – 17.15, aula CG3 Venerdì 15.15 – 18.15 (secondo il calendario sul sito) ! Laboratorio: ! ! Il venerdì, secondo il calendario e suddivisione in squadre esposte sul sito. Aula EG7 Facoltativo A partire dal 14 aprile verrà attivato il servizio di tutoring Ricevimento: ! Martedì: 16.30 – 18.30 o su appuntamento ! ! 4 Materiale didattico ! Slide delle lezioni esercizi e temi d’esame accessibili attraverso il sito ! Mandrioli, Ceri, Sbattella, Cremonesi, Cugola. Informatica, arte e mestiere. McGraw-Hill, 2008 ! Un libro sul linguaggio C (a scelta) ! ! ! ! Deitel & Deitel. C: Corso completo di programmazione. Nuova Edizione, Apogeo Kochan. Programmare in C, Pearson Bellini e Guidi. Linguaggio C, McGraw-Hill Kernighan, Ritchie. Il linguaggio C, Pearson/Prentice Hall 5 Materiale didattico ! Slide delle lezioni esercizi e temi d’esame accessibili attraverso il sito ! Mandrioli, Ceri, Sbattella, Cremonesi, Cugola. Informatica, arte e mestiere. McGraw-Hill, 2008 ! Un libro sul linguaggio C (a scelta) ! ! ! ! Deitel & Deitel. C: Corso completo di programmazione. Nuova Edizione, Apogeo Kochan. Programmare in C, Pearson Bellini e Guidi. Linguaggio C, McGraw-Hill Kernighan, Ritchie. Il linguaggio C, Pearson/Prentice Hall 6 Materiale didattico ! Eserciziari: ! Bisogni, Borney, Mezzalira. Programmare con il linguaggio C, Spiegel ! Bellettini et al. Linguaggio C: esercizi e temi d’esame risolti, ed. Esculapio, prog. Leonardo ! Morzenti Campi Di Nitto Loiacono Spoletini. Introduzione alla programmazione in Matlab Ed.2011, Esculapio 7 Modalità esame ! Prove in itinere ! Appelli ! Esame scritto che assegna complessivamente 32 punti corrispondenti al voto massimo di 30 e lode 8 Prove in itinere ! ! Le due prove scritte previste durante lo svolgimento del corso saranno collocate nei due periodi di sospensione dell'attività didattica Le prove in itinere saranno costituite da esercizi e/o domande inerenti la parte del programma alla quale fanno riferimento e potrebbero in casi eccezionali essere completate da un colloquio orale 9 Prove in itinere ! ! Ogni prova assegna un massimo di 16 punti ed è considerata valida se lo studente ottiene almeno un punteggio minimo di 8 punti; chi ottiene un punteggio inferiore a quello minimo in almeno una prova è obbligato a sostenere la prova di recupero (appello, quindi per partecipare alla seconda prova è necessario superare la prima!) Per superare l'esame è inoltre necessario che la somma dei punteggi delle due prove in itinere sia almeno di 18 punti sui 32 disponibili; lo studente che non soddisfa le precedenti condizioni dovrà recuperare l’intera prova scritta 10 Prova di recupero (Appello) ! ! ! Gli studenti sono ammessi ai recuperi se non hanno superato entrambe le prove in itinere, o se il risultato delle due prove è inferiore a 18, oppure se intendono migliorare il voto ottenuto In ciascuno di questi casi lo studente annulla automaticamente il voto precedentemente ottenuto non appena si presenta in aula per la prova di recupero La prova di recupero è organizzata in un’unica prova che fa riferimento all’intero programma del corso 11 Programma ! ! Breve rassegna sull’Informatica Nozioni di base sull’architettura hardware e software di un calcolatore ! ! ! La programmazione del calcolatore: ! ! ! ! ! ! Struttura e principi di funzionamento di un calcolatore elettronico elementare Codifica binaria dell'informazione Rappresentazione dello schema risolutivo (algoritmo) di un problema in una forma adatta all'elaborazione automatica Rappresentazione e codifica degli algoritmi in un linguaggio formale (programmi) Linguaggio C Matlab e Octave Database, linguaggio SQL (facoltativo per gli allievi Chimici e Materiali) Applicazioni dell’Informatica ! ! Reti di calcolatori, sistemi distribuiti (facoltativo per gli allievi Chimici e Materiali) Internet (facoltativo per gli allievi Chimici e Materiali) 12 Programma dei laboratori 1. 2. 3. 4. 5. 6. Introduzione all'ambiente, primi esempi C Programmi semplici, strutture dati Funzioni e Procedure Matlab, introduzione Funzioni e Procedure in Matlab SQL (facoltativo per gli allievi Chimici e Materiali) 13 Perché studiare informatica ! ! ! Perché l’informatica è a livello mondiale uno dei settori industriali maggiori e in maggiore crescita Perché oltre ad essere una tecnologia “primaria” è una tecnologia “abilitante” di altre tecnologie e di altri settori industriali Perché imparare a programmare passando dalla formulazione del problema alla sua soluzione attraverso lo studio di un algoritmo risolutivo, insegna un metodo, rigoroso, spendibile in tutte le altre attività 14 Applicazioni dell’informatica per Ingegneri Elettrici e Chimici ! Analisi circuiti 15 Applicazioni dell’informatica per Ingegneri Elettrici e Chimici ! ! Analisi circuiti Simulazione 16 Applicazioni dell’informatica per Ingegneri Elettrici e Chimici ! ! ! ! Analisi circuiti Simulazione Smart-Grid … 17 Grid esempi: acceleratore di particelle • Generazione dati dell’ordine di TB/s • Un cluster riduce il flusso dei dati all’ordine dei MB/s 18 Grid esempi: protein folding • Passo simulazione pSec • Durata simulazione µSec • Tempo di CPU 30 anni 19 Un progenitore: ENIAC 1945 - University of Pennsylvania spazio: 170 m² peso: 30 t Attività quotidiane: riparazione Attività quotidiane: programmazione CRC 102A (1954) Il “computer di Dadda” Un investimento post-bellico in ricerca 120.000 US$ CRC 102A (1954) Il “computer di Dadda” Evoluzione • Il software • Il computer (l’hardware) • Le reti di interconnessione Evoluzione • Il software • Il computer (l’hardware) • Le reti di interconnessione Dedicherò la prima conferenza all’opposizione leggerezza-peso, e sosterrò le ragioni della leggerezza. [...] E’ vero che il software non potrebbe esercitare i poteri della sua leggerezza se non mediante la pesantezza del hardware; ma è il software che comanda, che agisce sul mondo esterno e sulle macchine, le quali esistono solo in funzione del software, si evolvono in modo d’elaborare programmi sempre più complessi. La seconda rivoluzione industriale non si presenta come la prima con immagini schiaccianti quali presse di laminatoi o colate d’acciaio, ma come i bits d’un flusso d’informazione che corre sui circuiti sotto forma d’impulsi elettronici. Le macchine di ferro ci sono sempre, ma obbediscono ai bits senza peso. Evoluzione • Il software • Il computer (l’hardware) • Le reti di interconnessione Evoluzione dell’hardware A parità di funzioni la dimensione si dimezza ogni 2 anni (legge di Moore) Ubiquitous computing Ubiquitous computing names the third wave in computing, just now beginning. The most profound technologies are those that disappear. They weave themselves into the fabric of everyday life until they are indistinguishable from it. Mark Wiser, 1991 First were mainframes, each shared by lots of people. Now we are in the personal computing era, person and machine staring uneasily at each other across the desktop. Next comes ubiquitous computing, or the age of calm technology, when technology recedes into the background of our lives. Mark Wiser, 1995 Internet delle cose (Internet of Things) Google Smart Contact Lens 32 Altri esempi ! IoT - IBM ! http://www.youtube.com/watch?v=sfEbMV295Kk 33 Altri esempi ! Google glasses ! http://www.youtube.com/watch?v=JSnB06um5r4 34 Che cos’è l’Informatica? ! E’ una scienza, ovvero una conoscenza sistematica di tecniche/metodi per: ! ! ! Rappresentare dell’informazione Elaborare l’informazione L’informazione è costituita da una collezione di dati (osservazioni, fatti, entità fisiche o concettuali) strutturata ed elaborata automaticamente 35 Che cos’è un calcolatore? • Nell’epoca moderna, è uno strumento elettronico che elabora informazione. Informazione in ingresso Informazione in uscita Calcolatore Il calcolatore esegue un algoritmo ed utilizza elementi di memoria per elaborare l’informazione 36 Che cos’è un calcolatore? Uscita informazione Calcolatore Ingresso informazione 37 Che cos’è un algoritmo? • Es. IKEA Una sequenza finita di operazioni elementari tali che: • • • siano comprensibili ad uno specifico esecutore possano essere eseguite senza ambiguità permettano di risolvere uno specifico problema 38 Un esempio di algoritmo Ricetta di cucina: cuocere un uovo in padella ! Metti un cucchiaio colmo d’olio in una padella ! Metti la padella sul fuoco ! Aspetta un minuto ! Rompi un uovo ! Versa il tuorlo e l’albume nella padella ! Aggiungi un pizzico di sale ! Togli dal fuoco quando l’albume si è rappreso 39 Esempio: il prodotto di due interi positivi ! ! ! ! Leggi W Leggi Y Somma W a se stesso Y volte Scrivi risultato 40 Prodotto di due interi positivi 1 2 3 4 5 6 7 8 9 Leggi W 3 2 Leggi Y SP = 0 0 2 NS = Y SP = SP + W 3 6 NS = NS - 1 1 0 NS = 0? Se NO: torna a 5 6 Z=SP Scrivi Z ! ! ! ! Procedimento sequenziale Non ambiguo Formulazione generale Prevede tutti i casi (che succede se Y < 0?) 6 41 Proprietà degli Algoritmi ! ! Procedimenti sequenziali: un passo dopo l’altro secondo un ordine specificato (flusso di esecuzione) I passi elementari devono essere eseguiti in modo univoco dall’esecutore ! devono essere descritti in una forma eseguibile e comprensibile dall’esecutore 42 Proprietà degli Algoritmi ! La descrizione di un algoritmo per un esecutore deve avere una formulazione generale ! ! ! ! la soluzione individuata non deve dipendere solo da valori predefiniti dei dati, così che l’algoritmo sia utilizzabile nel maggior numero possibile di casi gli algoritmi prevedono particolari passi destinati ad acquisire i valori dei dati da utilizzare ed elaborare in ogni particolare esecuzione L’esecutore deve terminare in tempo finito per ogni insieme di valori in ingresso L’esecutore deve essere in grado di eseguire l’algoritmo con le risorse a sua disposizione (informazioni + tecnologia) 43 Proprietà degli Algoritmi Ogni operazione o direttiva deve: ! terminare entro un intervallo finito di tempo ! ! ! Es.: calcolare le cifre decimale di π, NO! produrre un effetto osservabile (stato prima dell’esecuzione, stato dopo l’esecuzione) produrre lo stesso effetto ogni volta che viene eseguita a partire dalle stesse condizioni iniziali ! Es. x=5, y=10 à x+y=15 44 Proprietà degli Algoritmi ! Correttezza ! ! L’algoritmo ottiene la soluzione del compito cui è preposto Efficienza ! L’algoritmo perviene alla soluzione del problema nel modo più veloce possibile e/o usando la minima quantità di risorse fisiche 45 Elementi degli Algoritmi ! Oggetti: le entità su cui opera l’algoritmo ! ! ! Operazioni: Interventi da effettuare sui dati ! ! Dati iniziali del problema, informazioni ausiliarie, risultati parziali e finali Le informazioni sono dette anche dati (anche i risultati parziali e finali) e possono essere variabili o costanti Calcoli, confronti, ricopiature, acquisizioni, emissioni, ecc. Flusso di controllo: l’indicazione delle possibili successioni dei passi dell’algoritmo ! La correttezza dei risultati dipende non solo dalla corretta esecuzione delle singole operazioni, ma anche dalla corretta sequenza con cui sono eseguite 46 Elementi degli Algoritmi ! ! Flusso di controllo: la descrizione a priori di tutte le possibili sequenze nell’esecuzione dei passi dell’algoritmo, in particolare di operazioni in alternativa e di operazioni da ripetere più volte ciclicamente Flusso di esecuzione: la sequenza di operazioni effettivamente seguita durante una particolare esecuzione dell’algoritmo e che dipende dai particolari valori che i dati assumono in quell’esecuzione 47 Rappresentazione di un algoritmo destinato all’esecuzione automatica ! Rappresentazione di un algoritmo ! ! Descrizione, univoca per l’esecutore, di tutte le possibili sequenze di operazioni da eseguire per risolvere il problema dato Descrizione del flusso di controllo, delle operazioni eseguibili, e degli oggetti su cui agiscono le singole operazioni 48 Rappresentazione di un algoritmo destinato all’esecuzione automatica ! E’ necessario un formalismo di rappresentazione, cioè un linguaggio costituito da: ! ! ! Vocabolario: insieme di elementi per la descrizione di oggetti, operazioni e flusso di controllo Sintassi: insieme di regole di composizione degli elementi in frasi eseguibili e costrutti di controllo (istruzioni) Semantica: insieme di regole per l’interpretazione degli elementi e delle istruzioni sintatticamente corrette 49 Linguaggi di descrizione ! ! I linguaggi per descrivere gli algoritmi devono essere noti all’uomo che progetta gli algoritmi e al calcolatore che deve eseguirli Fasi iniziali di progetto: struttura generale dell’algoritmo ! ! descrizione rigorosa del flusso di controllo descrizione semplificata delle direttive, per es. mediante l’uso di linguaggio naturale 50 Linguaggi semi-formali ! Schemi a blocchi (o diagrammi di flusso) ! ! ! elementi grafici per indicare il flusso di controllo e i tipi di operazioni elementi testuali per descrivere le operazioni e gli oggetti Linguaggio naturale/pseudo-codice ! ! ! completamente testuale costrutti di controllo descritti con la forma e le parole chiave dei linguaggi di programmazione le operazioni possono essere descritte in modo informale IF A>0 THEN A=A+1 ELSE A=0 51 Schemi a Blocchi ! Blocco esecutivo ! Blocco di inizio ! Blocco di terminazione ! Flusso di controllo delle operazioni ! Blocco condizionale ! Blocco di ingresso dati Operazione di ingresso ! Blocco di uscita dati Operazione di uscita operazione Inizio Fine vera Condizione falsa 52 Schemi a blocchi - Variabili ! Rappresentata tramite nomi simbolici ! ! Contenitore di valori ! ! ! Le operazioni descritte possono essere eseguite di volta in volta sui diversi valori assegnabili alle variabili (formulazione generale) Proprietà: una variabile non può essere vuota, cioè ad una variabile è sempre associato un valore Il nome della variabile rappresenta una scatola Il valore della variabile il suo contenuto 5 x Valore della variabile x=5 Nome della variabile 53 Schemi a blocchi ! Negli schemi a blocchi operazioni e condizioni sono rappresentate in modo testuale e tramite simboli che rappresentano gli operatori aritmetici, di confronto, ecc. 54 Regole di composizione ed interpretazione degli elementi Composizione degli elementi flusso di controllo dell’algoritmo, cioè tutte le possibili sequenze di blocchi da eseguire Un solo blocco di inizio ! Almeno un blocco di terminazione ! 55 Regole di composizione ed interpretazione degli elementi ! Dal blocco di inizio e da ogni blocco esecutivo deve uscire una sola freccia ! Se per ogni blocco c’e’ un solo blocco successivo: flusso di controllo sequenziale (sequenza) Inizio operazione 56 Regole di composizione ed interpretazione degli elementi ! ! Il flusso di controllo non è più sequenziale se dopo un blocco si possono presentare diverse alternative. In questo caso si usa un blocco di selezione Dal blocco di selezione escono due frecce che devono essere contrassegnate dal valore vero o falso.Il successivo blocco da eseguire dipende dal valore della condizione Condizione vera operazione1 falsa operazione2 57 Regole di composizione ed interpretazione degli elementi ! In tutti i casi -in esecuzione- è unica la scelta del blocco successivo da eseguire Condizione vera operazione1 falsa operazione2 58 Esempio: Prodotto di due numeri interi positivi Diagramma di flusso con direttive in italiano Inizio Leggi(W) Leggi(Y) Acquisizione dall’utente dei particolari valori da considerare per i due fattori del prodotto e da assegnare alle variabili W e Y Moltiplica intero W per intero Y e denota il risultato con Z Operazioni di elaborazione, valide per qualsiasi valore dei dati Scrivi (Z) Fine Emissione all’utente del risultato dell’elaborazione Variabili W, Y, Z intere W, Y, fattori di ingresso, Z risultato in uscita 59 Operatori ed espressioni ! Operatori aritmetici: +, -, , /, ... ! ! ! Operatori di confronto: >, <,==,>=, … ! ! ! agiscono sugli operandi (variabili o costanti) producono un valore numerico agiscono sugli operandi (variabili o costanti) producono un valore logico (vero o falso) Funzioni: cos(x), log(x), … ! ! agiscono su valori detti parametri (variabili oppure costanti) producono un valore 60 Operatori ed espressioni ! Procedure: Leggi(X), Scrivi(N), … ! ! ! agiscono su valori detti parametri effettuano operazioni Espressione: 5+cos(Y), ... composizione di operatori, funzioni, variabili e costanti ! ad essa è associato un valore Assegnamento: X = 6, Y = X, Z = X+6, ... ! Il valore dell’espressione a destra dell’operatore di assegnamento è assegnato alla variabile a sinistra ! ! 61 Esempio 2: Prodotto di due interi tramite somme ripetute ! ! Algoritmo: somma W a se stesso tante volte quanto vale Y Variabili: ! ! ! W,Y intere (valori in ingresso) Z intera (valore in uscita) Variabili ausiliari: ! ! NS intera (contatore del numero di somme ancora da eseguire) SP intera (valore della somma parziale) 62 Schema a Blocchi con ciclo a condizione finale (l’algoritmo è corretto se Y>0) Inizio Leggi(W) Acquisizione dei dati in ingresso e attribuzione dei loro valori a W e Y Leggi(Y) SP=0 Inizializzazione delle variabili ausiliarie NS=Y SP=SP+W Corpo del ciclo NS=NS-1 NS>0 no si Valutazione della condizione di uscita dal ciclo Z=SP Scrivi (Z) Fine Emissione del risultato 63 Flusso di controllo ciclico ! ! ! Permette di esprimere l’iterazione di un insieme di istruzioni (corpo del ciclo) Il corpo del ciclo è ripetuto un numero finito di volte La ripetizione è controllata dalla valutazione della condizione di permanenza del ciclo 64 Flusso di controllo ciclico ! variabile di controllo del ciclo ! ! condizione di permanenza ! ! funzione della variabile di controllo corpo del ciclo ! ! inizializzata prima di entrare nel ciclo contiene la modifica della variabile di controllo Cicli: ! ! a condizione finale a condizione iniziale 65 Schema a blocchi con ciclo a condizione iniziale (l’algoritmo è corretto per Y>=0) Inizio Leggi(W) Leggi(Y) SP=0 NS=Y no SP=SP+W NS=NS-1 NS>0 si NS>0 si SP=SP+W NS=NS-1 no Z=SP Scrivi (Z) Fine 66 Pre- e post-condizioni nei cicli ! ! Nell’esempio la verifica della condizione è stata spostata dalla fine all’inizio del ciclo Nell’esempio abbiamo migliorato l’algoritmo ma in realtà i due algoritmi NON sono funzionalmente equivalenti: ! ! ! Il primo è corretto per y > 0 Il secondo è corretto per y >= 0 Se vogliamo due algoritmi equivalenti non basta quindi semplicemente spostare la condizione ma vanno verificati i casi limite 67 Algoritmo in linguaggio naturale per calcolare il prodotto di due numeri con somme ripetute (ciclo a condizione iniziale) ! ! ! ! ! ! Leggi W Leggi Y Azzera il prodotto Le somme da fare = Y Ripeti se hai ancora somme da fare { somma W al prodotto sottrai 1 ai cicli ancora da fare } Scrivi il prodotto 68 Algoritmo in linguaggio naturale per calcolare il prodotto di due numeri con somme ripetute (ciclo a condizione finale) ! ! ! ! ! ! Leggi W Leggi Y Azzera il prodotto Le somme da fare = Y Ripeti { somma W al prodotto sottrai 1 ai cicli ancora da fare } fintantoche’ hai ancora somme da fare Scrivi il prodotto 69 Algoritmo con esecutore calcolatore per l’esempio precedente (ciclo a condizione finale) main () { int w,y,z,sp,ns; /*dichiarazione delle variabili */ leggi(w); leggi(y); sp=0; ns=y; /*inizializzazione*/ /*inizializzazione*/ 70 Algoritmo con esecutore calcolatore per l’esempio precedente (ciclo a condizione finale) /*ciclo a condizione finale: l’algoritmo e’ corretto solo nell’ipotesi y>0 */ do { sp=sp+w; ns=ns-1; }while (ns>0); z=sp; scrivi (z); } 71 Algoritmo con esecutore calcolatore per l’esempio precedente (ciclo a condizione iniziale) main () { int w,y,z,sp,ns; /*dichiarazione delle variabili */ leggi(w); leggi(y); sp=0; ns=y; /*inizializzazione*/ /*inizializzazione*/ 72 Algoritmo con esecutore calcolatore per l’esempio precedente (ciclo a condizione iniziale) /*ciclo a condizione iniziale: l’algoritmo e’ corretto solo nell’ipotesi y>=0 */ while (ns>0) { sp=sp+w; ns=ns-1; } z=sp; scrivi (z); } 73 Raffinamenti Successivi ! ! ! Nelle prime fasi di progetto si trascurano i dettagli Man mano che il progetto evolve si conosce meglio il problema Uno dei raffinamenti tipici: VERIFICA DEI DATI IN INGRESSO ! ! ! L’utente può commettere errori nell’immissione dei dati Si verifica che i dati immessi siano accettabili rispetto alle ipotesi di correttezza dell’algoritmo Esempio precedente: l’algoritmo non fornisce valori corretti per valori negativi di Y (Y >= 0 ?) 74 ESEMPIO: verifica dei dati in ingresso Ipotesi: l’algoritmo non calcola il prodotto nei casi in cui Y è < 0 Inizio Leggi(W) Leggi(Y) si Y>=0 SP=0 Scrivi: “Secondo fattore Negativo” NS=Y no no NS>0 si SP=SP+W NS=NS-1 Z=SP Scrivi (Z) Fine 75 Ipotesi: i due fattori possono essere positivi, nulli o negativi Inizio Leggi(W) Leggi(Y) si Y>=0 ? no NS=Y NS=-Y CS=1 CS=-1 SP=0 no NS> 0? si SP=SP+W NS=NS-1 si CS=1? Z=SP no Z=-SP Scrivi (Z) 76 Fine In linguaggio naturale Leggi w e y Controlla e ricorda se y<0 Inizializza la somma Ripeti y volte sp=sp+w se y era <0 cambia segno a sp Scrivi sp scrivi(z); 77 Raffiniamo Leggi w Leggi y se y>=0 ns=y cs=1 altrimenti (è negativo) ns=-y cs=-1 sp=0 (inizializzazione somma) Ripeti mentre ns>0 { sp=sp+w ns=ns-1 } se cs==1 z=sp altrimenti z=-sp scrivi(z); 78 Codifica in C main () {int w,y,z,sp,ns,cs;/*dichiarazione variabili*/ leggi(w); leggi(y); if (y>=0) { ns=y; cs=1; } else /*y è negativo*/ { ns=-y; cs=-1; } sp=0; /*inizializzazione*/ 79 Codifica in C while (ns>0) { sp=sp+w; ns=ns-1; } if (cs==1) {z=sp;} else {z=-sp;} scrivi(z); } 80 E ora che abbiamo il codice? ! ! ! Dobbiamo trovare un elaboratore in grado di eseguirlo Problema! L’elaboratore ragiona in modo differente: linguaggio macchina Dobbiamo quindi trovare anche un modo per trasformare il C (alto livello) in linguaggio macchina (basso livello) 81 Perché linguaggio macchina? ! ! ! Un elaboratore è un insieme di circuiti Si basa su logica binaria Il linguaggio C è vicino al modo di pensare umano ! ! È infatti un linguaggio ad alto livello Il linguaggio macchina è vicino al modo di lavorare di un elaboratore ! È infatti un linguaggio di basso livello 82 Il processo analisi algoritmo Compilazione (linguaggio macchina) Codifica (linguaggio C) esecuzione 83 Flusso di esecuzione ! Il flusso di controllo: ! ! ! Il flusso di esecuzione: ! ! ! definisce tutti i cammini possibili di esecuzione si basa su ipotesi relative ai valori assumibili dalle variabili definisce un particolare cammino di esecuzione si basa su valori precisi date alle variabili ottenute anche dai dati in ingresso dall’utente Il tracing è il meccanismo che permette di controllare il funzionamento di un algoritmo analizzando il valore delle variabili durante l’esecuzione 84 Tracing ! ! In una griglia vanno messe tutte le variabili definite nell’algoritmo In ogni riga va indicato il valore della variabile per ogni operazione eseguita Contenuto della variabile non definito Ipotesi di valore inserito dall’utente leggi (x); leggi (y); sp=0; while (y>0){ sp=sp+x; y=y-1; } w=sp; scrivi(w); X Y SP W 5 # # # 5 2 # # 5 2 0 # 5 2 5 # 5 1 5 # 5 1 10 # 5 0 10 # 5 0 10 10 85