Codifica degli algoritmi in un linguaggio di alto livello Informatica per l’Ingegneria
Informatica per l’Ingegneria Indice Obiettivi della programmazione in linguaggi di alto livello Istruzioni principali Tipi di dato Trasformazione da codice sorgente a codice eseguibile Informatica per l’Ingegneria
Obiettivi della programmazione in linguaggi di alto livello Colmare il gap tra i due requisiti fondamentali di un linguaggio per la descrizione di algoritmi: Precisione ed assenza di ambiguità interpretativa per l’esecuzione di operazioni (requisito richiesto dalla macchina) Sintesi per la facilità di comprensione del programmatore (requisito richiesto dall’uomo) Informatica per l’Ingegneria
Programmazione in linguaggi di alto livello Vantaggi: Possibilità di riferirsi agli elementi del programma (celle di memoria, istruzioni, valori costanti) con identificatori (nomi simbolici) Es. a cella di memoria 1001001100 Possibilità di esprimere le istruzioni e il controllo della sequenza della loro esecuzione in modo vicino al linguaggio naturale Es. (a+b)*(c+d) LOAD A ADD B STORE TEMP LOAD C ADD D MULT TEMP Informatica per l’Ingegneria
Astrazione di un elaboratore Informatica per l’Ingegneria Componenti: CPU Memoria centrale: divisa in celle elementari, contenenti un dato (valore numerico o carattere), di un numero di bit variabile Bus Astrazione delle interfacce con le periferiche: Input: unica unità di ingresso diviso in celle elementari, contenenti un dato (valore numerico o carattere), di un numero di bit variabile Output: unica unità di uscita Informatica per l’Ingegneria
Elementi -e terminologia- essenziali Stringa: successione finita di caratteri, supposti immagazzinati in celle consecutive Variabili: celle di memoria, il cui contenuto può cambiare durante l’esecuzione del programma Identificatori simbolici: successione di lettere e cifre(o il simbolo”_”), con al primo posto una lettera N.B. il Matlab è CASE SENSITIVE Identificatori predefiniti e riservati: associati a priori ad elementi del linguaggio e non utilizzabili per le variabili Parole chiave: altre parole del linguaggio predefinite e riservate Informatica per l’Ingegneria
Le principali istruzioni in Matlab Istruzioni di sequenza: Istruzioni di assegnamento Esempi: x = 23; w = 'a'; y = z; r3 = (alfa*43–xgg)*(delta–32*ijj); x = x+1; Istruzioni di ingresso e uscita x= input(‘Inserire un valore’) disp (A) disp(‘Fine del programma!’) Informatica per l’Ingegneria
Istruzioni di ingresso e uscita in Matlab Comando Descrizione disp (A) Visualizza il contenuto di A disp (‘testo’) Visualizza la stringa tra apici format Controlla il formato di visualizzazione x= input(‘testo’) Visualizza la stringa tra apici, attende l’immissione di un valore e lo memorizza in x x= input(‘testo’, ‘s’) Visualizza la stringa tra apici, attende l’immissione di un valore e lo memorizza come stringa in x k=menu(‘titolo’, ‘opzione1’, ‘opzione2’,…) Visualizza un menu dal titolo ‘titolo’, con le opzioni ‘opzione1’, ‘opzione2’,… Informatica per l’Ingegneria
Istruzioni di ingresso e uscita in Matlab Formato di uscita a video personalizzato tramite le funzioni: fprintf (‘stringa formato’, variabili) ‘stringa formato’: stringa che contiene i caratteri che si vogliono visualizzare e, nelle posizioni in cui si vuole venga inserito il valore, deve essere indicato uno dei codici in tabella str = sprintf (‘stringa formato', variabili) indirizza su una stringa di testo di nome str le variabili indicate, con il formato definito per visualizzare: disp(str) Controllo dei formati tramite codici di formato Codice di Formato Significato %s Stringa %c Carattere %d o %i Intero con segno %u Intero senza segno, base 10 %f Numero a virgola fissa \n Carattere di ritorno a capo \t Carattere di tabulazione Informatica per l’Ingegneria
Le principali istruzioni Le istruzioni composte Comprendono selezione ed iterazione visti nel capitolo 5 producono effetti diversi a seconda del verificarsi o meno di condizioni sul valore delle variabili Condizione(espressione booleana): espressione su variabili booleane il cui valore può essere vero o falso Costruita tramite: Operatori di relazione (in Matlab: ==; ~=; <;>;<=;>=) Operatori logici (in Matlab: ~;|;&) Es. di condizioni : x == 0 alfa > beta & x ~= 3 ~ ((a + b)*3 > x | a < c) Informatica per l’Ingegneria
Istruzioni composte: selezione ed iterazione 2. Istruzioni di Selezione if x == 0 z = 5 else y = z + w*y end 3. Istruzioni di Iterazione (ciclo o loop) while x >= 0 x = x – 1 Informatica per l’Ingegneria
Informatica per l’Ingegneria Tipi di dati astratti Tipo di dato : tipo di informazione, di natura eterogenea(interi, reali, caratteri, array, fatture, conti correnti, pagine web, …) Definizione generale di tipo di dato: Insieme di valori e di operazioni ad esso applicabili Tipo astratto: conta la visione esterna, non la rappresentazione interna, ovvero il punto di vista di chi usa il tipo, non di chi lo realizza Immaginiamo di dover trattare direttamente come stringhe di bit la divina commedia, una pagina web, … Inoltre potremo talvolta usare diverse rappresentazioni concrete per la stessa astrazione Informatica per l’Ingegneria
Informatica per l’Ingegneria Dichiarazioni di tipo Nei linguaggi fortemente tipizzati è necessario associare un tipo a tutte le variabili, al momento della dichiarazione; ciò comporta che: Per ogni variabile è possibile determinare l’insieme dei valori ammissibili e delle operazioni ad essa applicabili Per ogni variabile è calcolabile a priori la quantità di memoria necessaria: la memoria per l’esecuzione di tutto il programma può essere calcolata in fase di compilazione (eccezione: allocazione dinamica) E’ possibile rilevare errori nell’uso delle variabili durante la compilazione del programma: espressioni o assegnamenti coinvolgenti variabili eterogenee Informatica per l’Ingegneria
Tipi di dato: classificazioni Informatica per l’Ingegneria In base alla complessità delle informazioni rappresentate: Tipi semplici (interi, caratteri, reali, …): rappresentano informazione logicamente indivisibile Tipi strutturati (array, …): rappresentano informazione logicamente scomponibile In base all’ utilizzabilità nel linguaggio: Tipi predefiniti nel linguaggio(built in): interi, caratteri, … Tipi definiti dall’utente per soddisfare le infinite e imprevedibili esigenze(user defined): fattura, data,… N:B. tale classificazione dipende dal linguaggio: in Matlab variabili come età, conto_corrente non sono predefiniti(devono essere costruiti dal programmatore); in altri linguaggi “special purpose” potrebbero esserlo (e.g. data nei fogli elettronici) Informatica per l’Ingegneria
Informatica per l’Ingegneria Tipi di Dato in Matlab Matlab non prevede la dichiarazione delle variabili Per ogni variabile NON è possibile determinare l’insieme dei valori ammissibili e delle operazioni ad essa applicabili, se non in fase di esecuzione Per ogni variabile NON è calcolabile a priori la quantità di memoria necessaria: la memoria per l’esecuzione di tutto il programma NON può essere calcolata in fase di compilazione (eccezione: allocazione dinamica) NON è possibile rilevare errori nell’uso delle variabili durante la compilazione del programma: espressioni o assegnamenti coinvolgenti variabili eterogenee Modalità operativa: MATLAB calcola o salva i valori in memoria sempre come se le variabili fossero numeri reali in doppia precisione Informatica per l’Ingegneria
Informatica per l’Ingegneria Il comando format Il comando format regola solamente come i numeri sono visualizzati o stampati, non come MATLAB li calcola o li salva in memoria Comando Descrizione format short (default) 4 cifre decimali format long 16 cifre decimali format short e 4 cifre decimali + l’esponente format long e 15 cifre decimali+ l’esponente format bank 2 cifre decimali format + Positivo, negativo o 0 format rat approssimazione razionale format compact elimina le righe vuote format loose elimina l’effetto di compact Informatica per l’Ingegneria
Informatica per l’Ingegneria Esercizi Progettare tramite flow chart strutturato e codificare in Matlab un programma che acquisisca un valore intero. Il programma dovrà controllare che tale valore sia >300 e consentire in caso contrario di acquisire nuovamente un valore per il numero di volte necessario affinché lo diventi Progettare tramite flow-chart strutturato e codificare in Matlab un programma che consenta di calcolare la media dei voti di uno studente universitario, acquisendo il numero complessivo di esami e assicurandosi (con un processo analogo a quello descritto nell’esercizio 1) che i valori di voto immessi siano >=18. Informatica per l’Ingegneria
Informatica per l’Ingegneria Esercizi Progettare tramite flow-chart strutturato un programma per la valutazione di un triangolo. Il programma, dopo aver acquisito 3 valori interi, dovrà verificare se questi possono essere i lati di un triangolo e, in caso affermativo, stabilire il tipo di triangolo Informatica per l’Ingegneria
Strutture di controllo Informatica per l’Ingegneria
Informatica per l’Ingegneria Indice Istruzioni di selezione Sostituibili dal costrutto elseif, switch Istruzioni cicliche (di iterazione) Sostituibili dal costrutto for Informatica per l’Ingegneria
Programmazione strutturata TEOREMA DI BOHM-JACOPINI: tutti i programmi possono essere scritti con l’utilizzo delle sole strutture di controllo: sequenza, selezione e iterazione (senza l’uso del salto goto) Le strutture di controllo consentite sono quelle di selezione(if-else) e iterazione (while) Informatica per l’Ingegneria
Istruzioni di selezione: Il costrutto elseif istruzione di selezione a più vie (se l’else include ulteriori condizioni) Sintassi : if condizione 1 istruzione1 elseif condizione2 istruzione2 else istruzione3 end Regole: l’else si può omettere in assenza di un blocco in corrispondenza di istruzione3 falso vero Condizione1 falso vero Condizione2 istruzione1 istruzione3 istruzione2 Informatica per l’Ingegneria
Costrutto elseif: esempio if j<i fprintf('-'); elseif j==i fprintf('*'); else fprintf('+'); end falso j < i vero falso j =i vero - + * Informatica per l’Ingegneria
Istruzioni di selezione: il costrutto switch (1) istruzione di selezione a più vie auto esclusive (se l’else non è uno solo) consente la scelta di un’istruzione tra altre sulla base del valore di una particolare espressione di input (scalare o stringa) Sintassi: switch input case valore1 istruzioni1 case valore2 istruzioni2 ……. otherwise istruzioniN end Regole: clausola otherwise facoltativa ogni valore di case su una riga distinta del programma In caso di espressione di input scalare simula il costrutto if input ==valore1 istruzioni1 elseif input ==valore2 istruzioni2 else istruzioniN end vero falso input ==valore1 input ==valore2 falso vero istruzioni1 istruzioniN istruzioni2 Informatica per l’Ingegneria
Costrutto switch: esempio Immettere una scelta valore=input(‘Immettere una scelta’) switch valore case 1 disp(‘Caso1’) case 2 disp(‘Caso2’) case 3 disp(‘Caso3’) end valore falso vero valore ==1 vero falso valore==2 Caso 1 falso valore==3 vero Caso 2 Caso 3 Informatica per l’Ingegneria
Istruzioni cicliche: il ciclo for Nei cicli a conteggio (numero di passaggi noti in anticipo) invece di: VariabileDiCiclo = ValoreIniziale while VariabileDiConteggio <= ValoreFinale [Sequenza di istruzioni da ripetere] VariabileDiConteggio = VariabileDiConteggio + Incremento end Usare: for VariabileDiCiclo = ValoreIniziale:Incremento:ValoreFinale [Sequenza di istruzioni da ripetere] Informatica per l’Ingegneria
Informatica per l’Ingegneria Ciclo for: regole Considerazioni su VariabileDiCiclo= ValoreIniziale : Incremento : ValoreFinale Incremento può essere negativo vale +1 in caso di omissione se positivo, il ciclo viene interrotto quando VariabileDiCiclo >ValoreFinale se negativo, il ciclo viene interrotto quando VariabileDiCiclo<ValoreFinale Informatica per l’Ingegneria
Informatica per l’Ingegneria Ciclo for : esempio 1 si può omettere s=0 for i=0:1:10 n=input(‘Inserire un numero’) s=s+n end s 0 i 0 falso i < 10 vero n s s + n i i + 1 Informatica per l’Ingegneria
Le istruzioni break e continue break interrompe l’esecuzione di un ciclo Esempio for k = 1:10 x=50-k^2 if x<0 break end y=sqrt(x) continue provoca l’interruzione della corrente iterazione del ciclo e il passaggio all’iterazione successiva x=input(‘Inserire un intero’) continue Il break, utilizzato in un costrutto if, mappa un salto condizionato: meglio codificare con while k = 1 while k<10 & x>=0 x=50-k^2 if x>=0 y=sqrt(x) end k=k+1 Il continue può essere evitato modellando meglio le condizioni for k = 1:10 x=input(‘Inserire un intero’) if x>=0 y=sqrt(x) end Informatica per l’Ingegneria
Informatica per l’Ingegneria Esercizi Scrivere un programma che consenta la scelta tra le seguenti opzioni: Calcolo del massimo e del minimo di una sequenza di N numeri, con N letto da tastiera Calcolo della media di una sequenza di N numeri, con N letto da tastiera Calcolo di una potenza, data la base e l’esponente, entrambi letti da tastiera Scrivere un programma che consenta la scelta tra le opzioni dell’esercizio 1 in maniera ripetuta (finchè l’utente non desidera terminare il programma) Informatica per l’Ingegneria