laboratorio di programmazione - ce.unipr.it · qualsiasi manuale (recente) di matlab ... e’...

56
Laboratorio di Programmazione Corso di Laurea in Ingegneria Civile e Ambientale Anno accademico 2017/2018 Stefano Cagnoni Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma

Upload: haxuyen

Post on 17-Feb-2019

229 views

Category:

Documents


0 download

TRANSCRIPT

Laboratorio di Programmazione Corso di Laurea in Ingegneria Civile e Ambientale

Anno accademico 2017/2018

Stefano Cagnoni

Dipartimento di Ingegneria dell’Informazione

Università degli Studi di Parma

Riferimenti del corso

Docente:

Stefano Cagnoni

Tel.: 0521/905731

Palazzina 1 – Sede Scientifica Ingegneria

Parco Area delle Scienze 181/A

E-mail: [email protected]

Sito del corso: http://www.ce.unipr.it/people/cagnoni/didattica/liciv

A giorni anche su Elly

Ricevimento: - in aula/laboratorio dopo la lezione - su appuntamento - occasionalmente in laboratorio fuori orario di lezione

Obiettivi

Introdurre gli elaboratori elettronici come strumenti per

risolvere problemi e gestire informazioni

Introdurre i concetti di dato e di elaborazione dati

Vederli utilizzati in un applicativo (EXCEL)

Fornire le metodologie per esprimere la soluzione ad un

problema (definizione di un algoritmo) e codificarla in un

linguaggio di programmazione (MATLAB)

Contenuti

Cenni su:

Rappresentazione dell’informazione

Hardware: architettura di un calcolatore

Software: sistemi operativi e applicazioni

Algoritmi e linguaggi di programmazione

L’applicativo EXCEL (foglio elettronico)

Il linguaggio/ambiente di programmazione

MATLAB

Testi di riferimento/consultazione

L. Snyder, A. Amoroso “Fluency: Conoscere e

usare l'informatica”, IV ed., Pearson Education

D. Sciuto, G. Buonanno, L. Mari “Introduzione ai sistemi informatici», IV ed, McGraw-Hill

Qualsiasi manuale (recente) di MATLAB In biblioteca:

W.J. Palm “MATLAB 7 per l’ingegneria e le scienze”, McGraw-Hill

Più recente H. Moore “MATLAB per l’Ingegneria”, Pearson/Prentice-Hall

Esame: modalità

Durante il corso: in ogni lezione, preceduto da un

po’ di teoria, verrà assegnato un set di esercizi

(tempo previsto per lo svolgimento circa 1.5 ore): la

programmazione si impara programmando!!!!

Esame:

Breve prova scritta (circa 30 minuti) di ammissione

alla prova pratica

Prova pratica in laboratorio: realizzazione ed

esecuzione su calcolatore (e salvataggio su disco)

di un esercizio analogo a quelli realizzati durante

l’anno

Esame: modalità L’iscrizione ad ogni appello chiude 3 giorni prima

dello svolgimento della prova scritta.

Se possibile, prova scritta la mattina, prova pratica

il pomeriggio.

Intorno al 15/12 si svolgerà una prova scritta

preliminare sul programma svolto fino a quel punto

(quasi tutto). Chi ottiene un voto sufficiente sarà

direttamente ammesso alla prova pratica.

Se possibile (disponibilità laboratori), prova pratica

preliminare a fine dicembre o inizio gennaio.

Appelli I sessione: fine gennaio e metà febbraio.

Lezioni

Le lezioni si svolgono in aula O dalle 8.45 alle 11 circa nell’aula informatica E del nuovo plesso didattico (Aule delle Scienze).

La frequenza non è obbligatoria anche se vivamente consigliata (se si sono fatti gli esercizi, il superamento dell’esame è … inevitabile!)

Prepararsi a seguire il corso Per partecipare alle esercitazioni è necessario ottenere un

account nei laboratori didattici se non lo avete già dallo scorso anno

E’ possibile farlo direttamente in uno dei laboratorio didattici di Informatica (sede didattica di Ingegneria), accedendo ad un qualunque computer con Login: laboratori

Password: laboratori

E’ anche possibile farlo da casa collegandosi al sito

http://www.cedi.unipr.it/gestioneaccounts (ignorare l’eventuale messaggio di errore per certificato non valido)

Installare MATLAB sul proprio computer per svolgere gli esercizi settimanali. Le istruzioni per ottenere la licenza didattica sono sul sito del corso.

Installare EXCEL o LibreOffice (gratuito)

Rappresentazione digitale

delle informazioni

Informazione

Informazione: elemento che consente di

acquisire conoscenza, più o meno esatta, di fatti,

situazioni, modi di essere.

Perché sia utile deve essere:

Mirata ad uno scopo

Non sovrabbondante

Rispettosa dei principi di etica e riservatezza

Informatica = Informazione + Automatica (gestione automatica dell’informazione)

I sistemi informatici gestiscono l’informazione

elaborando entità elementari di cui è costituita (dati)

Dato: ciò che è immediatamente presente alla

conoscenza, prima di ogni elaborazione;

(in informatica) elemento di informazione costituito

da simboli che devono essere elaborati.

(dal Vocabolario della Lingua Italiana, Istituto dell’Enciclopedia Italiana)

Informatica e dati

Elaboratore elettronico

(computer o calcolatore) Dispositivo in grado di

rappresentare

memorizzare

elaborare

i dati eseguendo sequenze di operazioni

elementari (istruzioni)

le azioni eseguite sui dati generano altri dati (i

risultati, cioè i dati elaborati)

Programmazione

La risoluzione di un problema è quel processo

che

dato un problema e un insieme di dati che lo

descrivono

individuato un opportuno metodo risolutivo, detto

algoritmo

trasforma i dati iniziali nei corrispondenti

risultati finali che descrivono la soluzione.

Programmazione

L’attività con cui si predispone l’elaboratore a

eseguire un particolare insieme di azioni su un

particolare insieme di dati allo scopo di risolvere

un problema

Le azioni da compiere sui dati sono “richieste” al

computer attraverso “frasi” di un linguaggio di

programmazione (istruzioni)

Vediamo perché si parla di linguaggio…

Gli esseri viventi ricevono informazione direttamente

dal mondo circostante e dai propri simili attraverso i

sensi (percezione).

L’informazione percepita deve poter anche essere

memorizzata e trasmessa agli altri.

La memorizzazione e la trasmissione dell’informazione

richiedono che questa sia codificata.

Per descrivere un fenomeno che non è direttamente

percepibile o un oggetto che non è a portata di mano o

un concetto astratto ho bisogno di simboli (es. parole,

testi) che mi aiutino a rappresentarlo.

Codifica dell’informazione

Problema (non risolubile)

Un uomo atterra su un pianeta sconosciuto e

incontra una diversa forma di vita.

Come può far capire che non ha cattive intenzioni se

non esiste alcun codice riconosciuto da entrambi ?

Per comunicare è necessario condividere gli stessi

codici!

Due persone di provenienza diversa hanno lingue e

gestualità diverse. Però trasmettono le proprie

emozioni attraverso espressioni spontanee simili.

I codici possono collocarsi a livelli diversi.

Comunicazione

Un insieme di simboli e di regole che

determinano come interpretarli costituiscono un

codice.

Es. la scrittura

SIMBOLI = a b c d e f g h … x y z , . +’ ( ) …

ARCO

(potremmo anche leggerlo ocra, cane ecc.)

Esistono regole che creano una corrispondenza

fra ogni simbolo e un suono, che determinano

come interpretare gruppi di più simboli ecc.

Codifica dell’informazione

Alcuni codici usati quotidianamente:

gesti

parole e, quindi, lingue

scrittura

rappresentazione dei numeri

Utilizzare gli stessi codici permette la

COMUNICAZIONE (dell’informazione)

COMUNICARE permette di:

descrivere/condividere oggetti, idee, percezioni, emozioni

trasmettere conoscenza, esperienza, comandi

Codifica dell’informazione

Rappresentazione dell’informazione

L’informazione può essere rappresentata in due

forme:

Analogica

Digitale (o Numerica; in inglese digit = cifra/numero )

In forma analogica una grandezza è rappresentata

mediante un’altra grandezza in modo continuo (ad

esempio mediante un livello variabile di tensione).

In forma digitale una grandezza è rappresentata in

modo discreto, mediante sequenze finite di simboli

tratti da un insieme finito associabile con i numeri

naturali.

Rappresentazione analogica dell’informazione

Esempio

suono -> microfono -> tensione codifica

tensione -> registratore -> polarizzazione magnetica

memorizzazione

p.magn. -> altoparlante -> suono decodifica

Rappresentazione analogica qui significa che:

La tensione prodotta dal microfono è tanto più alta

quanto più elevato è il livello del suono.

La vibrazione dell’altoparlante è tanto più ampia

quanto più elevata è la tensione

Rappresentazione dell’informazione

La rappresentazione digitale (numerica) usata

all’interno di un calcolatore:

è una approssimazione discreta della realtà

(che è continua): ogni fenomeno/quantità è

approssimato da una sequenza finita di dati

(numeri), ciascuno dei quali può assumere solo

un numero finito di valori.

l’errore che si commette in questa

approssimazione dipende dalla quantità di dati

utilizzati e dalla precisione (numero di

cifre/simboli a disposizione) della

rappresentazione digitale.

Rappresentazione dell’informazione

La rappresentazione digitale della realtà è una

rappresentazione basata su numeri (digit = cifra,

quindi digitale = numerico) che necessita di un

CODICE per rappresentarli.

I circuiti di un calcolatore lavorano a due diversi

livelli di tensione (di solito 0 e 5 Volt, ma anche 0 e

3.3 Volt)

Rappresentazione dell’informazione

I 2 livelli rappresentano, in generale, due SIMBOLI

diversi, a cui associare due diversi significati

Es. Vero/Falso Positivo/Negativo

Presenza/Assenza

…ma anche le quantità (cifre) 0/1

Codifica binaria

Codifica binaria

Rappresentazione di numeri

Notazione di tipo posizionale (esattamente come la notazione decimale, di cui segue le stesse regole).

Ogni numero è rappresentato da una sequenza (stringa) di simboli

Il valore del numero dipende non solo dalla quantità rappresentata da ciascun simbolo, ma anche dalla posizione in cui si trovano i simboli.

3456 è diverso da 6543

1001 è diverso da 1100

Utilizza solo 2 simboli (0 e 1)

Notazione posizionale Scelta una base di rappresentazione B

ogni numero è rappresentato da una sequenza di simboli (cifre) appartenente a un alfabeto di B simboli distinti

ogni cifra rappresenta un valore compreso fra 0 e B-1

a ogni posizione corrisponde un peso, uguale ad una potenza della base crescente da destra verso sinistra.

Valore del numero = somma dei prodotti di ciascuna cifra per il peso associato alla sua posizione

Esempio di rappresentazione su N cifre:

dN-1 dN-2 …d1 d0 = dN-1* BN-1 + dN-2 * BN-2 +…+ d1* B1 + d0 * B0

Cifra più significativa Cifra meno significativa

Esempi

(109)10 = 1*102 + 0*101 + 9*100 = 100 + 0 + 9

(1101101)2 = 1* 26+1* 25+0* 24+1* 23+1* 22+0* 21+ 1* 20

= 64 + 32 + 0 + 8 + 4 + 0 + 1 = (109)10

(155)8 = 1*82 + 5*81 + 5*80 = 64 + 40 + 5 = (109)10

(6D)16 = 6*161 + 13 *160 = 96 + 13 = (109)10

Decimale (B=10) (usa le cifre da 0 a 9)

Binaria (B=2) (usa le cifre 0 e 1)

Un calcolatore rappresenta l’informazione

attraverso la codifica binaria.

Ogni elemento di una sequenza binaria viene

detto bit (Binary digIT).

Una sequenza di 8 bit si dice byte.

Ottale (B=8) (usa le cifre da 0 a 7)

Esadecimale (B=16) (cifre da 0-9 + lettere A-F)

Rappresentazioni medianti basi diverse

Multipli del byte

1 Byte = 8 bit

1 KiloByte (kB) = 1024 byte (210 = 1024)

1 MegaByte (MB) = 1024 KB = 220 Byte

1 GigaByte (GB) = 1024 MB = 230 Byte

1 TeraByte (TB) = 1024 GB = 240 Byte

Con sequenze di N simboli in base B posso

rappresentare BN numeri diversi

3 cifre decimali (B=10) 1000 (103) valori diversi

3 cifre binarie (B=2) 8 (23) valori diversi

Quanto più piccola è la base tanto più lunga sarà la

rappresentazione di una stessa quantità.

Es. (109)10 = (1101101)2 = (6D)16

Rappresentazioni mediante basi diverse

Per rappresentare un dato si ha a disposizione un

numero finito N di bit.

Con N bit si possono formare 2N combinazioni

diverse (con N cifre in base 10 se ne formano 10N )

Se voglio rappresentare valori in un certo intervallo

[min,max] posso rappresentare in modo esatto 2N

valori compresi fra min e max (inclusi) ed

equispaziati e approssimare tutti gli altri possibili

valori nell’intervallo con il valore rappresentabile più

vicino

Rappresentazione digitale binaria

Rappresentare i numeri nell’intervallo [min,max]=[0,7] con

N=3 bit

Con 3 bit posso ottenere 23=8 combinazioni diverse

000 001 010 011 100 101 110 111

Le faccio convenzionalmente corrispondere a 8 valori

equispaziati nell’intervallo [0,7] 23 -1 intervalli

000=0 001=1 010=2 011=3

100=4 101=5 110=6 111=7 000 001 010 011 100 101 110 111

0 1 2 3 4 5 6 7

23 valori

Tutti i valori intermedi sono approssimati con il valore

rappresentabile più vicino

Es. 3.456 viene approssimato come 011=3

Rappresentazione digitale binaria

Non necessariamente i valori rappresentati saranno interi

Es. [min,max] = [0, 4.2] con N=3 bit

Con 3 bit posso ottenere 23=8 combinazioni diverse

000 001 010 011 100 101 110 111

Le faccio convenzionalmente corrispondere a 8 valori

equispaziati nell’intervallo [0,4.2] 23 -1 intervalli

000=0 001=0.6 010=1.2 011=1.8

100=2.4 101=3.0 110=3.6 111=4.2 000 001 010 011 100 101 110 111

0 0.6 1.2 1.8 2.4 3.0 3.6 4.2

23 valori

In questo caso 3.456 viene approssimato come 110=3.6

Rappresentazione digitale binaria

Osservazioni

L’insieme di sequenze di bit utilizzato per la

rappresentazione corrisponde alla codifica binaria della

sequenza dei primi 2N (0..2N-1) numeri interi positivi (naturali).

Fissato il range di valori da rappresentare e il numero di bit

con cui rappresentarli, il massimo errore di approssimazione

che si può commettere è pari alla metà dell’ampiezza di un

intervallo (a=(Nmax-Nmin)/2N-1), cioè la differenza fra due

numeri consecutivi rappresentabili in modo esatto.

Più grande è N, minore è l’ampiezza degli intervalli.

Più grande è N, minore è l’errore (errore di quantizzazione)

che si commette approssimando un numero qualunque

all’interno dell’intervallo con uno dei valori rappresentabili

Rappresentazione digitale binaria

Rappresentazione

digitale dei dati

Cosa possiamo rappresentare ?

Numeri (interi e reali)

Simboli (codifica di concetti o simboli: es. vero e falso,

caratteri alfanumerici, ecc.)

Dati multimediali

- testi sequenze di simboli (lettere dell’alfabeto)

- suoni sequenze di campioni (misure nel tempo)

- immagini sequenze di campioni (misure nello spazio)

Tipi di dati

Tutti questi tipi di dati possono essere

rappresentati in forma binaria all’interno di un

calcolatore

La potenza e la versatilità del calcolatore

derivano dalla possibilità di utilizzare una

codifica comune per diversi tipi di dati.

Eseguendo operazioni dello stesso tipo a livello

fisico si possono ottenere risultati interpretabili in

modo molto diverso a livello logico

E’ una rappresentazione di tipo DISCRETO (il numero di

elementi con cui si descrive un fenomeno anche continuo

è finito; inoltre ogni elemento può assumere un numero

finito di valori)

Per rappresentare in modo digitale grandezze continue

variabili nel tempo (es. intensità sonora, temperatura,

velocità, posizione, ecc.) o nello spazio (es.

luminosità/colore delle immagini, altitudine in una carta

geografica, ecc.) devo CAMPIONARLE (rappresentarle

come sequenze discrete di valori, equidistanti nel tempo o

nello spazio) e QUANTIZZARLE (approssimare ogni

valore col valore più simile che il computer può

rappresentare in modo esatto)

Rappresentazione digitale

Campionare una grandezza significa

approssimarla attraverso una sequenza ordinata

nel tempo (o nello spazio) di dati, detti campioni,

che descrivono i valori di tale grandezza in un

numero limitato di istanti di tempo (punti nello

spazio) sufficientemente vicini.

La distanza fra due campioni consecutivi è detta

tempo (intervallo, se nello spazio) di

campionamento; il suo inverso frequenza di

campionamento (risoluzione spaziale, se nello

spazio): indica quanti campioni ho a disposizione

per la descrizione nell’unità di tempo (spazio)

Rappresentazione digitale

La frequenza di campionamento si misura in

campioni/secondo

La risoluzione spaziale in campioni (pixel)/millimetro

(pixel = PICTure ELement)

Quanto più sono elevate, tanto più precisa è

l’approssimazione (discreta) della realtà (che è

continua) che si può ottenere.

Rappresentazione digitale

Sin(x): rappresentazione continua

fc = 2

fc = 10

fc = 1

1

1/5

1/10

1/100

In conclusione La rappresentazione digitale, essendo discreta, introduce

due tipi di approssimazioni:

1. Errore di campionamento: dovuto all’approssimazione

del valore effettivo della grandezza che sto

rappresentando con il valore dell’ultimo campione

acquisito, fino all’acquisizione di un nuovo campione

(cioè alla rappresentazione discreta delle ascisse).

In conclusione 2. Errore di quantizzazione: dovuto all’approssimazione

del valore effettivo della grandezza che sto

rappresentando con il valore rappresentabile più vicino

(rappresentazione discreta delle ordinate)

Dipende dal numero di bit disponibili per la

rappresentazione e quindi dalla precisione con cui

posso rappresentare l’effettivo valore di un campione.

Rappresentazione di simboli

Con N bit posso rappresentare qualunque insieme

numerabile (cioè che può essere messo in corrispondenza

con gli interi) di simboli.

Con due bit è possibile generare 4 configurazioni distinte

(00, 01, 10, 11) che possono essere associate a 4

informazioni distinte

Esempi di insiemi diversi di informazioni rappresentabili:

00 -> a 1 verde

01 -> b 2 rosso

10 -> c 3 giallo

11 -> d 4 blu

Codifica dei caratteri alfanumerici

26 lettere minuscole e 26 lettere maiuscole, 10 cifre, 10

segni aritmetici, 20 segni di interpunzione (spazi inclusi)

e 3 caratteri non stampabili (a capo, tabulazione,

backspace) = 95 caratteri, che rappresentano la lingua

Inglese

Per 95 simboli sono necessari 7 bit: log2M =7

Una consolidata rappresentazione a 7-bit è il codice

ASCII (American Standard Code for Information

Interchange)

Codifica dei caratteri alfanumerici

A metà degli anni ‘60 divenne chiaro che il codice a 7 bit

non bastava per rappresentare anche i caratteri dei

linguaggi diversi dall’inglese

IBM estese il codice ASCII a 8 bit e 256 simboli

Chiamato "Extended ASCII", la prima metà (codici da 0

a 127) è costituita dall’originale codice ASCII (con uno 0

aggiunto all’inizio di ogni gruppo di bit)

Permette di esprimere la maggior parte dei caratteri

degli alfabeti occidentali e include molti altri simboli utili

Codifica dei caratteri alfanumerici

Colori nelle immagini digitali

Codifica RGB per le immagini a colori

Ogni colore è diviso in 3 componenti fondamentali:

Rosso (R), Verde (G), Blu (B).

L’intensità di ogni componente è di solito rappresentata

su 8 bit => ogni colore è rappresentato su 24 bit.

Posso quindi rappresentare (quantizzazione) 224 colori

diversi (circa 16 milioni).

Se almeno una delle componenti è diversa dalle altre

ho percezione del colore, altrimenti vedo una tonalità

grigia più o meno intensa (0,0,0 è il nero; 255,255,255 il

bianco)

Memoria

Memoria Centrale Spazio di lavoro del calcolatore: contiene i dati da

elaborare, le istruzioni da eseguire e i risultati delle

elaborazioni durante il funzionamento del calcolatore.

Insieme di celle di dimensione 1 byte, ciascuna delle quali

è individuata da un indirizzo, che indica la posizione della

cella all’interno della memoria

Se ogni indirizzo è lungo 32 bit posso distinguere e

accedere singolarmente a 232 celle diverse.

232 celle = 4 Gcelle -> 4 Gbyte (circa 4 x 109 celle)

Si usano normalmente indirizzi a 32 o 64 bit (16x1018 celle)

Poiché è possibile accedere direttamente a ogni cella, una

memoria di questo tipo si chiama Random Access Memory

(RAM), cioè, alla lettera, memoria ad accesso casuale.

Memoria Centrale

La memoria centrale contiene codici binari

interpretabili come dati o istruzioni (che costituiscono

i programmi) durante il funzionamento del calcolatore.

I dati possono essere modificati durante l’esecuzione

dei programmi (elaborazione dati) come risultato delle

istruzioni eseguite.

Sulla memoria centrale deve quindi essere possibile

fare operazioni di lettura (ad es. delle istruzioni da

eseguire o dei dati da elaborare) e scrittura (ad es.

dei dati elaborati).

E’ tipicamente volatile (utilizzabile solo se alimentata).

Memoria Centrale

Caratteristiche fondamentali:

Dimensione o capacità (n. di celle, quindi di byte)

Tempo di accesso (il ritardo dopo l’invio del

comando di lettura con cui il dato diviene

effettivamente disponibile per l’elaborazione)

Tipicamente la dimensione della memoria centrale è

dell’ordine del GByte.

Il tempo di accesso è dell’ordine delle decine di

nanosecondi.

(1 ns = 10-9 s = un miliardesimo di secondo)

Memorie di massa

Memorie permanenti: mantengono il loro contenuto

anche dopo lo spegnimento del calcolatore.

Diverse rispetto alla memoria centrale: il loro

funzionamento è basato perlopiù su fenomeni di

tipo ottico o magnetico, non su fenomeni elettrici.

Tipicamente organizzate in dischi, fissi o asportabili.

Più economiche rispetto alle memorie RAM.

Il loro tempo di accesso è tuttavia molto maggiore,

cioè, a parità di dati da leggere, il processo di lettura

avviene in modo più lento.

Memorie di massa

Le memorie di massa allo stato solido (es.

“chiavette” USB) non sono basate su supporti

magnetici o ottici.

Sono basate su circuiti (flash memory) strutturati in

modo simile alle RAM. Tuttavia, nel loro uso come

memorie di massa, vengono utilizzati (e gestiti dal

computer) come le altre memorie di massa (hard

disk).

Si vogliono rappresentare i numeri nell’intervallo [0,160]

con 4 bit • In quanti intervalli viene suddiviso l’insieme ?

• Quanto è ampio ciascun intervallo ?

• Quali sono i valori che risultano rappresentabili (gli estremi

degli intervalli) ?

• A quanto ammonta l’errore che si commette approssimando

127.8 con il numero rappresentabile più vicino ?

In generale, dato un intervallo [min,max] e N bit, quanto

è ampio ciascun sottointervallo? Quale è il massimo

errore che posso commettere?

Giustificare le risposte

Esercizi