Fondamenti di Informatica - PowerPoint PPT Presentation

1 / 91
About This Presentation
Title:

Fondamenti di Informatica

Description:

Title: Informatica 1 Author: Dino Mandrioli Last modified by: Dino Mandrioli Created Date: 7/29/2000 9:00:00 AM Document presentation format: On-screen Show – PowerPoint PPT presentation

Number of Views:114
Avg rating:3.0/5.0
Slides: 92
Provided by: Dino78
Category:

less

Transcript and Presenter's Notes

Title: Fondamenti di Informatica


1
Fondamenti di Informatica
  • Dino Mandrioli
  • Presentazione del corso

2
Domandina sfiziosetta(rivolta non solo agli
ingegneri informatici)
  • Questo è un corso di laurea (del Politecnico) in
    Ingegneria Informatica
  • Quale delle due parole del titolo prevale?
  • Il sostantivo o laggettivo?
  • Anzi, già che ci siamo
  • Parliamo un po dellIngegneria dellInformazione

3
Obiettivi e organizzazione del corso
  • Fornire unintroduzione allinformatica con
    enfasi sulle basi concettuali e
    sullapprendimento integrato ltConcetti-sperimenta
    zionegt
  • Al corso seguiranno corsi di approfondimento e
    applicazione
  • Integrazione ltLezioni-esercitazioni-laboratorio-ve
    rificagt

4
Traccia del programma
  • Concetti introduttivi (e fondamentali)
  • Breve panoramica dei sistemi e applicazioni
    dellinformatica
  • Gli elementi essenziali della programmazione(ling
    uaggio di riferimento C)
  • Alcuni aspetti più avanzati forse diversificati
    per CS (programmazione di sistema vs. CAD)

5
Aspetti organizzativi
  • Lezioni tradizionali ma interattive concetti,
    esempi base
  • Esercitazioni ulteriori esempi/esercizi
  • Laboratorio messa in pratica. Enfasi
    sullatteggiamento attivo da parte dello
    studente, rispetto alla didattica tradizionale.
  • Verifica on-line o in itinere
  • il laboratorio ammette allesame e dà un
    punteggio (se positivo) da 1 a 5 punti
  • 2 prove scritte intermedie (con eventuale orale)
    danno punti fino a 14 (7 è il minimo di
    sufficienza)
  • Alla fine del corso verrà proposto un voto finale
    (se gt 18) il voto proposto potrà essere
    rifiutato secondo modalità definite dal docente
  • Chi non è ammesso allesame dovrà rifrequentare
    il corso lanno successivo
  • Chi non avrà ottenuto un voto finale sufficiente
    o rifiuterà il voto proposto dovrà sostenere un
    recupero negli appelli previsti. Non sono ammessi
    recuperi di singole prove.

6
Materiale didattico
  • Libro di testoCeri, Mandrioli, Sbattella
    Informatica Programmazione, II edizione,
    Mc-Graw-Hill Italia
  • (Parti di)
  • Pelagatti Informatica II, Sistema operativo
    Linux e TCP/IP, Esculapio, 2002.
  • File dei lucidi accessibile via web
  • Eserciziari e temi desame di corsi
    precedentiTesti di esercizi in C ampiamente
    disponibili

7
I concetti fondamentali dellinformatica
  • Informatica scienza della rappresentazione ed
    elaborazione rigorosa - quindi potenzialmente
    automatica- dellinformazione
  • (non scienza del calcolatore né di Internet, )
  • ----gt
  • Informatica coeva e sorella della matematica
    e della filosofia (radici storiche nella cultura
    classica ellenistica importanti risultati
    teorici e di base allinizio del 900)
  • Tuttavia .

8
  • ...
  • Il grande impatto applicativo, industriale,
    sociale dellinformatica
  • Calcolo, gestione, informatica personale, web,
    controllo di impianti, applicazioni mediche, .
    Con i relativi rischi!..
  • Determinato dallevoluzione tecnologica
  • elettronica
  • miniaturizzazione
  • trasmissione (telecomunicazioni)
  • Le rivoluzioni qualitative prodotte dagli
    enormi sviluppi quantitativi (un moderno PC è
    enormemente più potente di un calcolatore da
    decine di miliardi - metri cubi- degli anni 60)
  • Si va verso linformatica globale e spesso
    nascosta (embedded)

9
Cominciamo dallabc (senza snobbarlo )
  • rappresentazione (ed elaborazione) rigorosa
    (ossia meccanizzabile) dellinformazione
  • Il primo tipo di informazione che si presta ad
    essere rigorosamente rappresentato è
    linformazione numerica numeri rappresentati
    mediante
  • aste, fagioli,
  • cifre greco-romane
  • cifre decimali (o in altra base)
  • Una prima fondamentale differenza quantitativa
    tra le diverse tecniche di rappresentazione
  • n aste per rappresentare il numero n (numerazione
    unaria)
  • ?logk(n) ? 1 cifre per rappresentare il numero
    n in base k

10
La rappresentazione dellinformazione non
numerica(Osservazioni preliminari)
  • Informazione testuale (caratteri)
  • Informazione grafica (pixel, ma anche forme più
    astratte)
  • Informazione musicale (digitalizzata o no)
  • . Multimedialità
  • NB Fondamentale distinguere tra rappresentazione
    dellinformazione in forma analogica e
    digitaleLelettronica - e linformatica-
    moderne sono ormai assestate sulle tecniche
    digitali, però in un passato anche recente ...

11
Ma rappresentare linformazione non basta
occorre elaborarla (sempre rigorosamente, ossia
precisamente, ossia meccanizzabilmente)
  • Ricominciamo dai numeri (45 25) è definita
    rigorosamente
  • Un primo calcolatore

12
  • Nel fare il calcolo della somma mediante il
    pallottoliere, noi applichiamo un algoritmo,
    ossia una sequenza di passi elementari, ben
    definita, precisa, eventualmente eseguibile anche
    da una macchina.
  • Informazione ed elaborazioni complesse vengono
    sempre scomposte in elementi base semplici e
    aggregate mediante composizione di elementi
    semplici in altri sempre più complessi.
  • Questa è lessenza della progettazione
    informatica!
  • Irrobustiamo ora il concetto di algoritmo
    mediante nuovi esempi.

13
Utilizzo di un lettore portatile di CD
musicali Consideriamo un lettore di CD musicali
portatile, con un certo numero di pulsanti di
controllo e un display che indica se il lettore è
in funzione e in particolare qual è il brano che
è attualmente riprodotto. Vogliamo suonare il
brano numero 13 le operazioni da eseguire per
svolgere questo compito costituiscono un
algoritmo
14
  • Se siamo a casa ed è disponibile una presa
    elettrica, inseriamo lalimentatore nella presa.
  • Se non è disponibile una presa, controlliamo che
    il lettore contenga lappropriato numero di
    batterie e che queste siano sufficientemente
    cariche in caso contrario inseriamo o
    sostituiamo le batterie con altre nuove.
  • Accendiamo il lettore.
  • Inseriamo il CD nel lettore il display indica
    No disk.
  • Premiamo il pulsante Start e attendiamo finché
    il display non indica Disk OK.
  • Premiamo ripetutamente il pulsante Forward
    finché il display non indica il numero del brano
    voluto (13).
  • Indossiamo le cuffie.

15
Alla fine giungiamo ad ascoltare il brano
prescelto. Anche in questo caso, abbiamo
costruito il nostro algoritmo combinando
opportunamente poche operazioni
elementari inserire il disco, premere diversi
pulsanti, controllare quanto visualizzato dal
display, indossare le cuffie. Si osservi inoltre
che lordine in cui tali operazioni vengono
eseguite può dipendere dai risultati (parziali)
dellesecuzione stessa dobbiamo inserire nella
presa lalimentatore se si verifica la
disponibilità di una presa elettrica dobbiamo
ripetere lazione di premere un pulsante finché
non è verificata una determinata condizione (il
fatto che il display indichi 13). La possibilità
di decidere quale operazione eseguire sulla base
dellanalisi dello stato dellesecuzione è una
caratteristica essenziale di ogni algoritmo non
banale.
16
  • Il precedente algoritmo è una versione
    semplificata di ciò che facciamo in pratica e non
    tiene conto di numerose variabili.
  • Per esempio, la decisione di usare la presa
    elettrica piuttosto che le batterie può dipendere
    da parecchi altri fattori diversi da quelli
    esemplificati qui se il CD non viene inserito
    correttamente nel lettore, anche dopo aver
    premuto il pulsante Start il disco non gira
    come dovrebbe e non compare lindicazione Disk
    OK. Se succede proprio questo, si deve ripetere
    il passo 5, come segue
  • Premiamo il pulsante Start fintanto che il
    display indica No disk, si ripete
  • Inseriamo nuovamente il CD nel lettore.
  • Premiamo il pulsante Start.
  • ...

17
Anche questa nuova versione dellalgoritmo è
probabilmente troppo semplificata. In realtà,
anche il più testardo di noi, dopo diversi
tentativi andati male, concluderebbe che il
lettore non funziona Lezione 1 gli esseri
umani sono buoni esecutori di algoritmi, ma
possono anche decidere di abbandonarli (per
esempio, in condizioni eccezionali) usando il
buon senso. I calcolatori, invece, non
possiedono buon senso e intuizione tutte le
situazioni fuori dal normale devono essere loro
descritte, se si vogliono ottenere reazioni
appropriate.
18
Altri algoritmi -e lezioni- più o meno dettagliati
  • La somma tra due numeri
  • in versione unaria (pallottoliere)
  • in versione decimale -o, in generale, in base k gt
    0
  • Le ricerca in uno schedario
  • non ordinato
  • ordinato -e.g, in ordine alfabetico
  • Lezione 2 (e 3)
  • gli algoritmi dipendono dalla rappresentazione
    dei dati (informazioni) prescelte
    rappresentazione ed elaborazione
    dellinformazione procedono a braccetto
  • gli algoritmi possono essere più o meno
    efficienti si pensi alla differenza tra
  • operazioni unarie e in base k gt 1
  • ricerca su schedari non ordinati e ordinati (la
    guida del telefono)
  • In questo corso non valuteremo in modo matematico
    lefficienza degli algoritmi ma tale valutazione
    va tenuta presente almeno sul piano intuitivo.

19
Consultazione di una carta geografica(per
decidere percorsi automobilistici)
  • In genere, la selezione di un luogo di
    villeggiatura non obbedisce a un rigido
    algoritmo.
  • Al contrario, il problema di trovare la via più
    breve per andare in auto da una città allaltra
    può essere risolto mediante un algoritmo.

20
  • 1. Si trovano tutte le sequenze di città che
    determinano un itinerario tra le due città. Più
    precisamente, siano cp e ca rispettivamente la
    città di partenza e la città di arrivo si
    individuano e si memorizzano, ognuna su un
    diverso pezzo di carta, tutte le sequenze c0,
    c1, c2, , ck di nomi di città, tali che
  • nessuna città compaia due volte nella sequenza
  • il primo elemento della sequenza, c0, coincida
    con cp, e lultimo, ck, coincida con ca
  • per ogni coppia di elementi contigui, ltci, ci1gt,
    esista un tratto di strada che li unisce il
    tratto di strada non può ovviamente attraversare
    alcuna città.
  • 2. Per ogni sequenza, si calcola la somma delle
    distanze dei vari tratti di strada e la si
    memorizza accanto alla sequenza.
  • 3. Si individua la sequenza per cui il valore
    della somma delle distanze è minimo e la si
    sceglie come strada più breve. Se per caso si
    trovasse più di un itinerario con la stessa
    distanza totale tra cp e ca, se ne sceglierebbe
    uno arbitrariamente (per esempio il primo
    trovato). Se non si trova alcun itinerario, per
    esempio perché cp e ca sono separate dal mare,
    non esiste alcuna soluzione.

21
Le operazioni utilizzate nei precedenti punti 1,
2, 3 (individuare sequenze di tratti di strada,
calcolare la sommatoria di varie distanze ecc.)
sono piuttosto complesse, e forse non
sufficientemente dettagliate. Tuttavia, non
dovrebbe essere un esercizio troppo difficile
precisare meglio almeno i punti 2 e 3 facendo uso
di operazioni più elementari, fino ad arrivare a
una formulazione che sia così precisa da poter
essere eseguita. Il punto 1 merita invece un
esame più approfondito. Trovare tutti gli
itinerari che vanno da una città allaltra è a
sua volta un problema che va risolto mediante un
opportuno algoritmo possiamo chiamarlo un
sottoproblema del problema principale, perché la
sua soluzione è necessaria per costruire la
soluzione di questultimo. Questo sottoproblema,
a sua volta, può essere risolto mediante un
algoritmo
22
Se n è il numero di città riprodotte nella carta
geografica, un itinerario che unisca cp a ca
senza passare due volte (inutilmente!) dalla
stessa città, non può essere costituito da un
numero di tratti elementari superiore a n?1
Basta quindi costruire tutti gli itinerari che
partono da cp e hanno un numero di tratti non
superiore a n?1, e scegliere tra questi quelli
che terminano in ca. Supponiamo di aver già
trovato tutti gli itinerari che partono da cp e
sono lunghi r1 tratti otterremo gli itinerari
lunghi r creando molte copie degli itinerari
lunghi r1 e aggiungendo a ciascuna copia un
tratto ulteriore, che collega lultima città,
cr1, a tutte le città direttamente collegate a
essa, purché tali città non facciano già parte
della sequenza lunga r?1.
23
Consideriamo come itinerario di lunghezza 0 un
itinerario fittizio, che parte e arriva nella
città cp. A questo punto, gli itinerari di
lunghezza 1 saranno tutti quelli che collegano cp
alle città limitrofe, cioè a quelle città
direttamente collegate a cp da una strada.
Abbiamo così definito i primi due passi di un
algoritmo, che in n passi ci porta a generare
tutti i percorsi lunghi n?1 che partono da cp, e
quindi a risolvere il punto 1 dellalgoritmo
generale. Questo ragionamento è un primo esempio
di un potentissimo procedimento
matematico-informatico che ci servirà per
risolvere i più svariati problemi
linduzione. Otteniamo dunque una nuova
formulazione più completa e più precisa del punto
1 del nostro algoritmo
24
  • 1. Partiamo da una sequenza iniziale, trascritta
    su un foglio di carta, che comprende la sola
    città cp questa sequenza ha lunghezza 0.
  • 2. Esaminiamo le sequenze fin qui costruite, di
    lunghezza r?1. Chiamiamo S una generica sequenza
    cp, c1, c2, , cr1. Per ciascuna sequenza S
    si costruiscono nuove sequenze di lunghezza r
    come segue
  • sia cr1 lultima città della sequenza S. Si
    trovano tutte le città collegate a cr1 da una
    strada siano esse linsieme di città a1, a2, ,
    as
  • si escludono dallinsieme a1, a2, , as tutte
    le città che già fanno parte della sequenza S.
    Restano così a1, a2, , at città, con t ? s
  • si costruiscono t sequenze di lunghezza r,
    ottenute aggiungendo a S una diversa città ai
    scelta fra le t città individuate al passo
    precedente.
  • 3 Si ripete lesecuzione del passo precedente
    fino a quando non si verifica la condizione r
    n. A questo punto vengono estratte (da tutte le
    sequenze costruite di lunghezza minore di n) le
    sequenze che hanno ca come ultima città, e
    lalgoritmo che identifica tutti i possibili
    tragitti termina. Se per caso non ve ne fossero,
    si può terminare a questo punto lintero
    algoritmo, stabilendo che il problema non ha
    soluzione.

25
 
Città collegate ad A da una strada B Città
collegate a B da una strada A, E, F Città
collegate a C da una strada D, E, F Città
collegate a D da una strada C, F Città
collegate a E da una strada B, C, G Città
collegate a F da una strada B. C, D, G Città
collegate a G da una strada E, F   Percorsi
di 0 tratti che partono da E E Percorsi di 1
tratto che partono da E E, B E, C E,
G Percorsi di 2 tratti che partono da E E, B,
A E, B, F E, C, D E, C, F E, G,
F Percorsi di 3 tratti che partono da E E, B,
F, C E, B, F, D E, B, F, G E, C, D, F
E, C, F, B E, C, F, D E, C, F, G
E, G, F, B E, G, F, C E, G, F, D Percorsi
di 4 tratti che partono da E E, B, F, C, D
E, B, F, D, C E, C, D, F, B E, C, D, F,
G E, C, F, B, A E, G, F, B, A E, G,
F, C, D E, G, F, D, C   Lunghezza del
percorso E, C, D 6 Lunghezza del percorso E,
B, F, D 7 Lunghezza del percorso E, C, F,
D 6 Lunghezza del percorso E, G, F,
D 3 Percorso più breve Lunghezza del percorso
E, B, F, C, D 11 Lunghezza del percorso E,
G, F, C, D 7 
 
 
 
26
Lezioni ricavate
  • Certamente noi non consultiamo le carte
    geografiche -solo- in questa maniera
  • Un problema complesso si può risolvere
    scomponendolo in problemi meno complessi fino ad
    arrivare a problemi elementari
  • Quali siano i problemi elementari (risolvibili
    immediatamente) dipende da chi/ che cosa è il
    risolutore
  • Trovato un algoritmo non è detto che questo sia
    lunico né tantomeno il migliore per risolvere il
    nostro problema (nel caso specifico ne esistono
    certamente di migliori da vari punti di vista).
  • Quando potremo stabilire che lalgoritmo da noi
    elaborato è eseguibile da una macchina? ---gt
    Dobbiamo conoscere, almeno un po, la macchina!

27
La macchina da calcolo -in senso lato e
astratto-(cominciando dal basso)
  • Lessenza dellinformatica sta nello scomporre
    linformazione in pezzi elementari e la sua
    elaborazione in operazioni elementari
  • Che cosa più elementare del bit, ossia di due
    possibili valori dellinformazione 0,1 o
    Vero, Falso, ?
  • Tutta linformazione -discreta- può essere
    scomposta - ossia rappresentata come una
    opportuna sequenza di 0 e 1(e quella continua
    può essere approssimata in questa maniera)

28
Primi esempi di rappresentazione di informazioni
componendo bit
  • Byte sequenza di 8 bit (00000000, 00000001,
    00000010, , 11111111).
  • Un byte può rappresentare i numeri naturali da 0
    a 255 ( 28 1)zero 00000000 8 00001000
    255 11111111.
  • e i numeri interi compresi fra 127 e 127,
    ossia fra (2(81) ? 1) e (2(81) ? 1) (primo bit
    0 numero positivo, primo bit 1 numero
    negativo 0 00000000 e 0 10000000
  • (nei prossimi lucidi vedremo una rappresentazione
    più efficace)
  • I numeri reali numeri razionali contenenti una
    parte intera e una frazionaria che approssimano
    il numero reale con precisione arbitraria.
    Notazione in virgola fissa si codificano
    separatamente la parte intera e la parte
    frazionaria ad esempio 8.345 ( in base due)
  • primo byte (rappresentazione dellintero 8)
    00001000
  • secondo byte (rappresentazione della parte
    frazionaria 0.345) 01011000(anche qui vedremo
    ulteriori rappresentazioni in seguito)

29
  • I caratteri ASCII (American Standard Code for
    Information Interchange)
  • sette bit usati per rappresentare 128 caratteri
    (ottavo per controllo).
  • a ogni lettera (le maiuscole da A a Z, le
    minuscole da a a z), cifra (da 0 a 9) o
    separatore (usato per la punteggiatura o come
    operatore aritmetico) viene assegnato un numero
    naturale rappresentabile in forma binaria.
  • Ad esempio A viene codificata in ASCII come
    numero 65 e la sua forma binaria è 01000001 il
    separatore viene codificato come 59 e la sua
    forma binaria è 00111011.
  • NB la stessa stringa di bit ha diversi
    significati, a seconda del tipo di informazione
    rappresentata!

30
Dallinformazione elementare alle operazioni
elementari
  • Inversione di un bit 0 ---gt 1, 1 ---gt 0
  • somma di due bit 00 0, 10 1, 01 1,
    11 1
  • prodotto di due bit 00 0, 10 0, 01 0,
    11 1
  • Se interpretiamo 0 come Falso (False, F) e 1 come
    Vero (True, T), le operazioni di dui sopra
    possono essere viste come operatori logici
  • Inversione negazione, (NOT, ?)
  • Somma logica, (OR, ?)
  • Prodotto logico, (AND, ?)
  • Mediante le suddette operazioni si possono
    elaborare sequenze di bit in modo arbitrario
    ----gt operazioni base per costruire algoritmi
  • Oltre allintuitiva interpretazione logica queste
    operazioni sono facilmente realizzabili mediante
    dispositivi elettronici (a loro volta elementari
    e combinabili in circuiti integrati)

31
Un piccolo approfondimento laritmetica binaria
  • Il fatto che linformazione base sia il bit porta
    a codificare i numeri come sequenze di bit
  • Ne consegue ladozione della numerazione in base
    2
  • 0 000 1 001 2 010 3 011 .
  • algoritmi di conversione 102 10/2 5 resto
    0 0
  • 5/2 2 resto 1 1
  • 2/2 1 resto 0 0
  • 1/2 0 resto 1 1
  • 102 1010
  • (1010)10 1. 23 0. 22 1. 21 0. 20 8 0
    2 0 10
  • Da base due a base 8 (o 16) e viceversa facile.
    Perché?

32
Aritmetica binaria la somma cifra per cifra
riporto 11100 00110000000100
8731 10001000011011
5698 01011001000010
risultato 14429 11100001011101
33
Aritmetica binaria realizzata mediante operatori
logici
  • 8 9 7, riporto 1
  • 1 0 1, riporto 0
  • 1 1 0, riporto 1
  • riporto 1 7 6 4, riporto 1
  • riporto 1 0 0 1, riporto 0
  • riporto 1 1 0 0, riporto 1
  • riporto 1 1 1 1, riporto 1

Risultato
B1
B1
Risultato
Half adder
Full adder
B2
Riporto
B2
Riporto
Riporto
Half adder Risultato (NOT(B1) AND B2) OR (B1
AND NOT(B2)) Riporto B1 AND B2
34
Torniamo ai numeri negativi
  • e i numeri interi compresi fra 127 e 127,
    ossia fra (2(81) ? 1) e (2(81) ? 1) (primo bit
    0 numero positivo, primo bit 1 numero
    negativo 0 00000000 e 0 10000000
  • a parte lo spreco di due rappresentazioni
    diverse per un solo numero
  • la realizzazione delle varie operazioni (e.g.
    differenza) richiede algoritmi nuovi e non
    leggerissimi
  • ? una tecnica di rappresentazione più efficace
    il complemento a due
  • Usando m bit, -N rappresentato come 2m N
    Esempio, m 3
  • - 4 100 (NB non rappresentabile con modulo e
    segno)
  • - 3 101
  • - 2 110
  • - 1 111
  • 0 000
  • 1 001
  • 2 010
  • 3 011

35
Somma e sottrazione in complemento a due
  • Passare da N a N in complemento a due
  • Scambio 1 ? 0 sommo 1 al risultato (facile ed
    efficiente realizzazione con operazioni logiche)
  • 3 ? - 3 011 ? 100 ? 101
  • -2 ? 2 110 ? 001 ? 010
  • M - N M (-N) (occhio alloverflow!)

5 0000101 5 0000101
8 0001000 - 8 1111000
13 0001101 - 3 1111101
- 5 1111011 - 64 1000000
8 0001000 - 8 1111000
3 (1) 0000011 - 72 1 (1) 0111000
36
I numeri frazionari
  • 0.58710 (5 ? 101 8 ? 102 7 ? 103)
  • 0.10112 (1 ? 21 0 ? 22 1 ? 23 1 ? 24)
    10 0.687510
  • I numeri frazionari possono introdurre
    approssimazioni, dovute alla presenza di un
    numero limitato di cifre dopo la virgola
    lapprossimazione è comunque inferiore a pn, ove
    n è il numero di cifre utilizzate.
  • Rappresentazione binaria del numero frazionario
    0.58710
  • 0.587 ? 2 1.174 parte frazionaria 0.174 e
    parte intera 1
  • 0.174 ? 2 0.348 parte frazionaria 0.348 e
    parte intera 0
  • 0.348 ? 2 0.696 parte frazionaria 0.696 e
    parte intera 0
  • 0.696 ? 2 1.392 parte frazionaria 0.392 e
    parte intera 1
  • 0.392 ? 2 0.784 parte frazionaria 0.784 e
    parte intera 0
  • 0.784 ? 2 1.568 parte frazionaria 0.568 e
    parte intera 1
  • 0.568 ? 2
  • 0.1001 (con quattro cifre binarie dopo la
    virgola) o
  • 0.100101 (con sei cifre binarie dopo la
    virgola).

37
I numeri reali
  • Approssimati da razionali
  • Dalla virgola fissa
  • 00101001011.10110 331.6875 in base 10
  • alla virgola mobile
  • mantissa e esponente o caratteristica
  • r m ? bn
  • esempi con b p 10
  • -331.6875 viene rappresentato in virgola mobile
    con
  • m ?0.3316875 e n 3
  • con b p 2, bit di segno della mantissa 0,
    mantissa 1011 e caratteristica 01010
  • viene interpretato in base decimale come
  • 0.6875 ? 210 0.6875 ? 1024 704.01

38
  • Un numero in virgola mobile si dice normalizzato
    se la virgola della mantissa è posizionata subito
    a sinistra della prima cifra diversa da 0.
  • 0.45676 ? 102 normalizzato
  • 0.0456 ? 104 non normalizzato.
  • i numeri non normalizzati rischiano di sprecare
    cifre
  • 456.7682 con cinque cifre decimali per la
    mantissa
  • 456.76 ? 101
  • 4.5676 ? 102
  • 0.0456 ? 104

39
Lo standard IEEE per la rappresentazione in
virgola mobile
  • 4 formati per la rappresentazione dei numeri
    reali che differiscono per il numero totale di
    bit utilizzati. I più diffusi
  • a precisione singola, con 32 bit
  • a doppia precisione, con 64 bit

Rappresentazione IEEE in singola precisione.
40
  • Linterpretazione abbastanza particolare
  • lo standard deve permettere di rappresentare non
    solo un insieme di numeri reali quanto più ampio
    possibile, con la massima precisione possibile,
  • ma anche valori speciali quali
  • NaN Not a Number risultato di operazioni
    non ammesse quali la divisione per zero,
  • 8 e -8

41
  • Interpretazione della caratteristica n
  • valore compreso tra 0 e 255 (8 bit)
  • i valori estremi (0 e 255) sono interpretati in
    una maniera speciale,
  • i valori compresi tra 1 e 254 (inclusi) sono
    interpretati come esponente del numero razionale
    sottraendo 127 al valore effettivamente
    rappresentato
  • se n131 allora lesponente del numero
    rappresentato vale 4, mentre se n125 lesponente
    vale -2. In questo modo è possibile rappresentare
    tanto esponenti positivi quanto negativi,
    interpretando il numero effettivamente
    rappresentato come un intero senza segno (cosa
    che facilita i confronti).

42
  • Interpretazione della mantissa
  • rappresentata in forma normalizzata su 23 bit
    ignorando il primo bit
  • il primo bit non può che valere 1 (come vedremo
    il valore 0 ha una sua rappresentazione
    specifica).
  • Trascurando quindi il primo bit e rappresentando
    solo la parte frazionaria della mantissa, si
    ottiene di fatto lequivalente di 24 bit.

43
  • Casi speciali
  • Il valore 0 viene rappresentato ponendo a 0 tanto
    la caratteristica quanto la mantissa (a seconda
    del valore del bit del segno è possibile
    rappresentare i valori -0 e 0).
  • Il valore 255 per la caratteristica viene
    utilizzato per rappresentare il valore infinito
    (positivo o negativo a seconda del valore del
    segno) se la mantissa vale 0, o il valore
    speciale NaN se la mantissa è diversa da 0.
  • Se la caratteristica vale 0 e la mantissa è
    diversa da 0, questultima viene interpretata
    come se si trattasse di una parte puramente
    frazionaria (primo bit uguale a 0, quindi non
    normalizzato) e lesponente viene posto per
    convenzione a -126.

44
  • Riassumendo
  • detto s il bit del segno, n la caratteristica, ed
    m la mantissa, valgono le seguenti regole per il
    calcolo del valore v rappresentato
  • se n255 e m?0 allora vNaN
  • se n255 e m0 e s0 allora v8
  • se n255 e m0 e s1 allora v-8
  • se 0ltnlt255 allora v(-1)s?2(n-127) ?1.m
  • se n0 e m?0 allora v(-1)s?2-126 ?0.m
  • se n0 e m0 e s0 allora v0
  • se n0 e m0 e s1 allora v-0
  • 1.m denota il numero binario razionale composto
    da un 1, seguito dal punto decimale, seguito dai
    bit presenti nella parte riservata alla mantissa
  • 0.m denota il numero composto da uno 0, seguito
    dal punto decimale, seguito dai bit che
    compongono la mantissa.
  • La rappresentazione in doppia precisione è del
    tutto analoga ma usa 11 bit per la caratteristica
    e 52 bit per la mantissa.

45
Un calcolatore, o meglio, un sistema informatico
  • Altro non è che un enorme tritabit
  • Solo che i bit sono organizzati in pacchetti di
    informazioni (byte, parole e via di seguito)
  • e viaggiano allinterno del sistema il quale
    sistema può essere un semplice chip o lintera
    rete Internet.
  • Cerchiamo di capire a grandissime linee come ciò
    accade per poter meglio fornire disposizioni al
    sistema (algoritmi) su come elaborare
    linformazione che esso riceve.
  • Lo studio più sistematico del sistema di calcolo
    sarà oggetto del corso successivo (Informatica 2)

46
La classica architettura -molto astratta- della
macchina di von Neumann
47
Il programma ovvero il modo con cui un algoritmo
viene comunicato a un calcolatore
  • Per comunicare (tra uomini o macchine) occorre un
    linguaggio
  • Se Maometto non va alla montagna
  • Luomo deve usare un linguaggio accessibile alla
    macchina, ossia rigoroso, preciso così non è
    il linguaggio naturale
  • Il linguaggio della macchina di von Neumann
  • Un programma è una sequenza di istruzioni
  • Unistruzione è costituita da un campo codice
    operativo (CO) e da un (eventuale) campo operando
  • Il CO dice alla macchina che operazione deve
    eseguire
  • Loperando dice a che cosa va applicata
    loperazione

48
Tanto per cominciare
  • Listruzione READ

49
Altre istruzioni trasferiscono informazioni da
un punto allaltro della macchina (sistema)
  • WRITE
  • LOAD xxx il contenuto della cella xxx viene
    trasferito nellaccumulatore
  • STORE xxx il contenuto dellaccumulatore viene
    trasferito nella cella xxx
  • Un primo programma (legge due numeri e li
    riscrive in ordine inverso)
  • READ
  • STORE 30
  • READ
  • WRITE
  • LOAD 30
  • WRITE

50
Altre istruzioni eseguono operazioni aritmetiche
(applicando opportuni algoritmi cablati
nellunità aritmetica)
  • ADD, SUB, MULT, DIV (divisione intera)
  • ADD X ACC X ---gt ACC
  • Un secondo programma (legge due numeri e ne
    stampa la somma)
  • READ
  • STORE 30
  • READ
  • ADD 30
  • WRITE

51
Altre istruzioni controllano il flusso
dellesecuzioneUna caratteristica fondamentale
degli algoritmi è la possibilità di decidere il
da farsi in funzione dei dati acquisiti (letti o
prodotti)
  • Nella macchina di von Neumann questa
    caratteristica è ottenuta mediante istruzioni di
    salto
  • BR xx la macchina salta direttamente ad
    eseguire listruzione xx-esima, indipendentemente
    dallistruzione attuale
  • BEQ xx salto condizionato la macchina salta
    direttamente ad eseguire listruzione xx-esima,
    se il contenuto dellaccumulatore è 0, altrimenti
    prosegue con listruzione successiva
  • BGE, BG, altre forme di salto condizionato
    dipendenti dal contenuto dellaccumulatore
  • Indirizzamento immediato
  • ADD 13 viene sommato il valore 13 al contenuto
    dellaccumulatore, non il contenuto della cella
    13!

52
Un terzo programma Sommatoria di n numeri
  • In primo luogo il programma legge il numero n,
    che è scritto nella prima cella del nastro di
    lettura, e lo memorizza nella cella 101 questa
    ci servirà per contare quanti numeri dobbiamo
    ancora leggere e sommare prima di terminare
    ovviamente il suo valore iniziale è proprio n.
    Inoltre si assegna il valore iniziale 0 (in gergo
    si inizializza) alla cella 102 che utilizzeremo
    per contenere il risultato della sommatoria. Si
    noti che in questo modo si definisce che la
    sommatoria di 0 elementi è 0.
  • 0 READ
  • 1 STORE 101
  • 2 LOAD 0
  • 3 STORE 102
  • A questo punto ci si domanda se il contenuto
    della cella 101 è 0.
  • 4 LOAD 101
  • 5 BEQ 13

53
Se ci sono ancora dati da leggere e sommare, si
legge il prossimo elemento del nastro di lettura
e lo si somma al contenuto della cella 102,
destinata a contenere il risultato, rimettendo
poi il risultato della somma nella stessa
cella. 6 READ 7 ADD 102 8 STORE 102 Successi
vamente si diminuisce di ununità il contenuto
della cella 101 (il contatore del numero di
operazioni lettura-somma ancora da
eseguire). 9 LOAD 101 10 SUB 1 11 STORE 101
54
A questo punto non cè che domandarsi di nuovo se
i dati da leggere sono finiti e procedere
esattamente come prima, ma il codice per fare ciò
è già stato scritto e inizia dallistruzione
numero 4 basta dunque scrivere 12 BR 4 Infine
dobbiamo pensare a scrivere il risultato e a
terminare la esecuzione, quando finalmente la
cella contatore conterrà il valore 0.
13 LOAD 102 14 WRITE 15 END
55
Riscrittura di una sequenza di numeri -diversi da
0 e chiusa da uno 0-in ordine inverso Serve
qualcosa di nuovo Indirizzamento
indiretto LOAD_at_ xxx viene trasferito in
accumulatore il contenuto della cella il cui
indirizzo è a sua volta contenuto nella cella xxx
56
Quarto programma Cella 101 contatore numeri
letti Cella 102 indirizzo celle contenenti i
numeri letti (indirizzo di partenza
110) 0 LOAD 0 1 STORE 101 inizializzazione
del contatore 2 LOAD 110 3 STORE 102 inizializ
zazione indirizzo di memorizzazione
57
Inizia la fase di lettura. Ogni dato letto, se è
diverso da 0, viene memorizzato nella cella
indicata dal valore contenuto in 102.
Successivamente il contenuto della cella 102
viene incrementato. 4 READ 5 BEQ 14 salto
alla fine del ciclo 6 STORE_at_ 102 7 LOAD 101 8
ADD 1 9 STORE 101 incremento del
contatore 10 LOAD 102 11 ADD 1 12 STORE 102
incremento dellindirizzo 13 BR 4 ritorno
allinizio del ciclo NB Al momento della
scrittura dellistruzione 5 non si conosce
lindirizzo dellistruzione cui saltare!
58
Una volta terminata la lettura, cioè dopo aver
letto il dato 0, iniziamo la fase di scrittura.
La struttura di questa parte del programma è
simile alla precedente. Questa volta il test di
controllo non è più effettuato sul valore letto,
ma sul contenuto del contatore 101 che contiene
il numero di dati da scrivere. Ogni volta che
viene scritto un numero, il contenuto di 101 deve
essere decrementato di 1 fino al valore 0. Anche
il contenuto di 102 deve essere decrementato di 1
per ogni dato scritto per permettere di accedere
al dato successivo. 14 LOAD 101 15 BEQ 25 salto
alla fine del ciclo 16 LOAD 101 17 SUB 1 18
STORE 101 decremento del contatore 19 LOAD 102
20 SUB 1 21 STORE 102 decremento
dellindirizzo 22 LOAD_at_ 102 23 WRITE 24 BR 1
4 ritorno allinizio del ciclo 25 END
59
Nulla di magico avviene nella macchina di von
Neumann guardiamoci dentro un po meglio (il
seguito al corso successivo)
60
NB
  • Noi, per intenderci, abbiamo usato una
    formulazione simbolica del codice e decimale
    degli indirizzi.
  • In realtà la memoria reale della macchina sarà
    qualcosa del genere

61
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 leggi un valore
in ingresso e ponilo nella cella numero 16
(variabile a) 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1
leggi un valore e ponilo nella cella numero 17
(variabile b) 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0
leggi un valore e ponilo nella cella numero 18
(variabile c) 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1
leggi un valore e ponilo nella cella numero 19
(variabile d) 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
carica il registro A con il contenuto della cella
16 (valore di a) 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1
carica il registro B con il contenuto della cella
17 (valore di b) 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
somma i contenuti dei registri A e B 0 0 1 0 0 0
0 0 0 0 0 1 0 1 0 0 copia il contenuto del
registro A nella cella numero 20 (risultato
parziale) 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 carica
il registro A con il contenuto della cella 18
(valore di c) 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1
carica il registro B con il contenuto della cella
19 (valore di d) 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0
somma i contenuti dei registri A e B 0 0 0 1 0 0
0 0 0 0 0 1 0 1 0 0 carica il registro B con il
contenuto della cella 20 (risultato parziale) 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 moltiplica i
contenuti dei registri A e B 0 0 1 0 0 0 0 0 0 0
0 1 0 1 0 0 copia il contenuto del registro A
nella cella numero 20 (risultato) 0 1 0 1 0 0 0
0 0 0 0 1 0 1 0 0 scrivi in output il contenuto
della cella numero 20 (risultato) 1 1 0 1 0 0 0
0 0 0 0 0 0 0 0 0 arresta lesecuzione del
programma . spazio per la variabile
a (cella 16) . spazio per la
variabile b (cella 17) . spazio per
la variabile c (cella 18) . spazio
per la variabile d (cella 19) .
spazio per il risultato (cella 20) (a)
62
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 cella numero 0
0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 cella numero 1
0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 cella numero 2
0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 cella numero 3
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 cella numero 4
0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 cella numero 5
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 6
0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 cella numero 7
0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 cella numero 8
0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 1 cella numero 9
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 10
0 0 0 1 0 0 0 0 0 0 0 1 0 1 0 0 cella numero 11
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 12
0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 cella numero 13
0 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 cella numero 14
1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 15
1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 16
riservata per la variabile a 1 1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 cella numero 17 riservata per la
variabile b 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
cella numero 18 riservata per la variabile c 1 1
0 1 0 0 0 0 0 0 0 0 0 0 0 0 cella numero 19
riservata per la variabile d 1 1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 cella numero 20 riservata per il
risultato 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
1 0 0 0 0 0 0 0 0 0 0 0 0 celle di memoria libere
1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0
(b)
63
  • E levoluzione dello stato della macchina
    qualcosa del genere

64
(No Transcript)
65
Uno sguardo panoramico allintero sistema
informatico e alle sue applicazioni
  • Un po di terminologia di largo uso (e consumo)
  • Hardware
  • CPU, Memoria centrale o RAM, memoria di massa,
    periferica
  • Terminale, stampante
  • CD-ROM, hard e floppy disk,
  • bus
  • Software
  • Software di base, sistema operativo, software
    applicativo, software di utilità personale
    (spreadsheet, word-processor, navigatori,
    database personali, e-mail,)
  • file
  • sensori e attuatori
  • Personal computer (PC)

66
  • Le reti
  • Reti locali (LAN)

67
  • Reti geografiche (WAN)

68
  • Lambiente di programmazione
  • editor
  • compilatore
  • interprete
  • linker (collegatore)
  • debugger
  • Le (innumerevoli) applicazioni dellinformatica
  • Calcolo numerico e scientifico
  • Applicazioni gestionali
  • Servizi telematici
  • Automazione industriale
  • Realtà virtuale (dai giochi ai simulatori di volo
    alla cinematografia,
  • sfruttamento della multimedialità)

69
I linguaggi di programmazione di alto
livello(ovvero sia la macchina a fare la fatica
di studiare un linguaggio più vicino alluomo,
ma sempre rigoroso!)Alcuni difetti del
linguaggio di von Neumann
Meglio questo 0 READ 1 STORE 101 2 LOAD 0 3
STORE 102 4 LOAD 101 5 BEQ 13 6 READ 7 ADD 1
02 8 STORE 102 9 LOAD 101 10 SUB 1 11 STORE 1
01 12 BR 4 13 LOAD 102 14 WRITE 15 END
70
... o questo? READ STORE CONTATORE L
OAD 0 STORE SOMMA CICLO_SOMMA
LOAD CONTATORE BEQ STAMPA_FINALE READ
ADD SOMMA STORE SOMMA LOAD CONTATORE
SUB 1 STORE CONTATORE BR CICLO_SOM
MA STAMPA_FINALE LOAD SOMMA WRITE END

71
Altri aspetti sgradevoli del linguaggio di von
Neumann
  • (ab)(cd) ----gt
  • LOAD A
  • ADD B
  • STORE TEMP
  • LOAD C
  • ADD D
  • MULT TEMP
  • RIPETI LA SEQUENZA DI OPERAZIONI FINCHE LA
    SEQUENZA DEI DATI NON E ESAURITA
  • ----gt
  • BEQ .

72
La controversa scelta del linguaggio CIl nucleo
di C
  • La macchina astratta del (nucleo) di C

73
Elementi -e terminologia- essenziali
  • Standard Input, Standard Output (vedi nastri di
    v.N.) e la memoria sono divisi in celle
    elementari, contenenti ciascuna un dato.
  • Per il momento, non poniamo limiti fisici alla
    dimensione della memoria né dei supporti di
    ingresso e uscita numero di celle illimitato e
    ogni singola cella può contenere un qualsiasi
    valore numerico (sia intero sia reale) o un
    qualsiasi carattere, il che richiede un numero
    variabile di bit
  • Stringa una successione finita di caratteri (per
    esempio Giorgio, ieri, alfa-beta. E
    immagazzinata in celle consecutive, ciascuna
    contenente un singolo carattere della stringa.
  • Le celle di memoria vengono chiamate anche
    variabili ( ? dallomonimo concetto matematico!)
  • Le variabili, le istruzioni e altri elementi del
    programma che saranno introdotti più avanti sono
    indicati tramite identificatori simbolici.

74
  • identificatore simbolico una successione di
    lettere e cifre, in cui al primo posto vi è una
    lettera. Il carattere speciale _ viene
    considerato come cifra
  • Esempi di identificatori C
  • a, x, alfa, pippo, a1, xy23, Giuseppe,
    DopoDomani.
  • le lettere maiuscole sono distinte dalle
    corrispondenti lettere minuscole (Var1, var1 e
    VAR1 sono tre diversi identificatori
  • Per evitare ambiguità non è possibile usare lo
    stesso identificatore per indicare diversi
    elementi né usare diversi identificatori per lo
    stesso elemento.
  • Alcuni identificatori sono predefiniti e
    riservati, nel senso che sono associati a priori
    a qualche elemento del linguaggio e pertanto non
    possono essere usati dal programmatore con
    significati differenti da quello predefinito.
  • Per esempio, scanf e printf indicano operazioni
    elementari di ingresso/uscita e non possono
    essere impiegate in un programma C per indicare,
    per esempio, una variabile.
  • Parola chiave parola predefinita del linguaggio
    di programmazione anchessa riservata non può
    fungere da normale identificatore.
  • Per comodità -di lettura umana, non del
    calcolatore!- le parole chiave saranno scritte in
    neretto .

75
  • Struttura sintattica di un programma C
  • Un programma C è composto da
  • unintestazione seguita da
  • una sequenza di istruzioni racchiusa tra i
    simboli e .
  • Lintestazione è costituita dallidentificatore
    predefinito main seguito da una coppia di
    parentesi ( ) (per il momento vuote)
  • Le istruzioni sono frasi del linguaggio di
    programmazione ognuna di esse termina con il
    simbolo .

76
Le principali istruzioni del C
  • 1. Istruzione di assegnamento
  • Assegna a una variabile il valore di
    unespressione
  • consiste nel simbolo preceduto
    dallidentificatore di una cella di memoria e
    seguito da unespressione che definisce un
    valore.
  • Lespressione può essere costituita da valori
    costanti, identificatori di variabili o una loro
    combinazione ottenuta mediante i normali
    operatori aritmetici (, ?, , /) e parentesi,
    come nelle consuete espressioni aritmetiche.
  • Esempi
  • x 23w 'a'y zr3 (alfa43xgg)(delta
    32ijj)x x1
  • Se la cella a contiene il valore 45 e la cella z
    il valore 5, listruzione
  • x (az)/10
  • fa sì che nella cella x venga immagazzinato il
    valore 4.
  • NB per distinguere il valore carattere a
    dallidentificatore della variabile a, il primo
    viene indicato tra apici (similmente per le
    stringhe -vedremo tra breve).

77
  • 2. Istruzioni di ingresso e uscita
  • Consistono negli identificatori predefiniti scanf
    o printf seguiti da una coppia di parentesi che
    racchiude lidentificatore di una variabile.
  • Determinano la lettura o scrittura del valore di
    una variabile dallo Standard Input o sullo
    Standard Output in modo del tutto identico alle
    corrispondenti istruzioni del linguaggio
    macchina.
  • Alcune comode abbreviazioni
  • printf((az)/10)
  • abbreviazione per
  • temp (a?z)/10 printf(temp)
  • dove temp denota una variabile non usata
    altrimenti nel programma.
  • printf("alfa")
  • abbreviazione per
  • printf('a') printf('l') printf('f')
    printf('a')
  • differenza tra listruzione printf(2) e
    listruzione printf('2')?

78
  • 3. Istruzioni composte
  • Le istruzioni composte producono effetti diversi
    a seconda che siano verificate o meno certe
    condizioni sul valore delle variabili.
  • Condizione (o espressione booleana)
    unespressione il cui valore può essere vero o
    falso. Essa è costruita mediante
  • i normali operatori aritmetici,
  • gli operatori di relazione (, !, lt, gt, lt,
    gt),
  • gli operatori logici (!, , ),
    corrispondenti, nellordine, alle operazioni
    logiche NOT, OR, AND.
  • Esempi di condizioni
  • x 0alfa gt beta x ! 3!((a b)3 gt x a
    lt c)
  • Se le variabili x, alfa, beta, a, b e c
    contengono rispettivamente i valori 0, 1, 2, 3, 4
    e 5, la valutazione delle tre condizioni
    precedenti dà come risultato, rispettivamente V,
    F e F.
  • regole di precedenza tra gli operatori logici
    per esempio, nellespressione
  • x gt 0 y 3 z gt w
  • loperatore deve essere eseguito prima
    delloperatore , (in analogia cona b c)

79
  • Tornando alle istruzioni composte esse sono di
    due tipi fondamentali
  • Istruzione condizionale
  • consente di eseguire in alternativa, durante
    lesecuzione di un programma, due diverse
    sequenze di istruzioni sulla base del valore di
    verità di una condizione.
  • è costituita dalla parola chiave if, seguita da
  • una condizione racchiusa tra parentesi tonde,
  • dalla prima sequenza di istruzioni racchiusa in
    parentesi graffe,
  • dalla parola chiave else,
  • dalla seconda sequenza di istruzioni racchiusa
    in parentesi graffe.
  • Il ramo else dellistruzione può essere
    assente.
  • Le parentesi graffe vengono in genere omesse
    quando la successione di istruzioni si riduce a
    unistruzione singola.

80
  • Esempi di istruzioni condizionali
  • if(x 0) z 5 else y z wyif(x 0) z
    5 else y z wyif ((xy)(z-2) gt
    (23v)) z x 1 y 13 xif ((x y z
    gt3) w ! y) z 5 else y z wy x z
  • istruzioni scorrette
  • if (x 0) else y z y 34if (x 0) a
    else b c
  • Esecuzione di unistruzione condizionale
  • la macchina valuta la condizione, cioè stabilisce
    se il suo valore è vero o falso
  • nel caso vero esegue solamente la prima
    sequenza di istruzioni,
  • nel caso falso esegue la seconda sequenza di
    istruzioni.
  • se manca il ramo else e la condizione è falsa, la
    macchina prosegue con listruzione successiva
    allistruzione condizionale.

81
  • Listruzione iterativa (ciclo o loop).
  • Permette la ripetizione dellesecuzione di una
    sequenza di istruzioni ogni volta che una certa
    condizione è verificata.
  • È costituita dalla parola chiave while, seguita
    dalla condizione racchiusa tra parentesi tonde,
    come per listruzione condizionale, e da una
    sequenza di istruzioni fra parentesi graffe (la
    sequenza di istruzioni è detta corpo del ciclo).
  • Esempi
  • while (x gt 0) x x 1while (z ! y) y z
    x x x3
  • Esecuzione di unistruzione iterativa
  • valutazione della condizione
  • se questa è falsa non viene eseguito il corpo del
    ciclo e si passa direttamente allistruzione
    successiva.
  • Altrimenti si esegue una prima volta il corpo del
    ciclo si valuta ancora la condizione e,
    nuovamente, si esegue il corpo del ciclo se essa
    è risultata vera. Quando la condizione risulta
    falsa si esce dal ciclo, ovvero si passa
    allistruzione successiva allistruzione
    iterativa. Il ciclo viene ripetuto finché la
    condizione rimane vera.

82
  • Alcune osservazioni importanti
  • In unistruzione ciclica, lesecuzione potrebbe
    non terminare mai!
  • Listruzione condizionale e listruzione
    iterativa sono dette istruzioni composte perché
    esse sono costruite componendo istruzioni più
    semplici contengono quindi altre istruzioni al
    proprio interno.
  • caratteristica profondamente diversa dal
    linguaggio di von Neumann
  • molto utile per la costruzione di programmi
    complessi (vedremo in seguito).
  • unistruzione composta può contenere al suo
    interno una qualsiasi altra istruzione,
    eventualmente essa stessa composta.

83
  • Le macchine reali sono però costruite sullo
    schema di von Neumann
  • Chi si occupa di colmare il gap tra la macchina
    astratta C e la macchina reale -del tipo di v.N.?
  • Il software di base. Più precisamente
  • il compilatore, o, più raramente,
  • linterprete
  • Nulla di magico neanche nella macchina C
  • Diamo una breve occhiata al compito del
    compilatore

84
Le principali funzioni del compilatore
  • Dal simbolico al binario
  • Dallaritmetica infissa allaritmetica della ALU
  • Dalle istruzioni composte al program counter
  • Successivamente
  • La gestione della memoria

85
1. Dal simbolico al binario
  • Basta qualche tabella

A 100000
B 100001
x 100010
alfa 100011
.
ciclo1 110000
etichetta 110100

LOAD 00110
STORE 00111
BR 00001
.

86
2. Dallaritmetica infissa allaritmetica della
ALU
  • (ab)(cd) ----gt
  • LOAD A
  • ADD B
  • STORE TEMP
  • LOAD C
  • ADD D
  • MULT TEMP
  • Algoritmi di traduzione non del tutto banali

87
3. Dal controllo mediante istruzioni composte al
controllo mediante salti
  • if (cond) S1 else S2
  • Istruzioni che lasciano in accumulatore il valore
    0 se cond è falsa, 1 se cond è vera
  • BEQ
  • Istruzioni che traducono S1
  • BR
  • Istruzioni che traducono S2

88
  • while (cond) S
  • Istruzioni che lasciano in accumulatore il valore
    0 se cond è falsa, 1 se cond è vera
  • BEQ
  • Istruzioni che traducono S
  • BR

NB il meccanismo può essere ripetuto
arbitrariamente in maniera annidata (istruzioni
composte che contengono altre istruzini composte)
89
  • Siamo finalmente pronti per scrivere i primi
    programmi in quasi C (lI/O dovrà ancora essere
    assestato)
  • /Programma NumeroMaggiore prima
    versione /
  • main() scanf(x) scanf(y) if (x gt y) z
    x else z y printf(z)
  • /Programma NumeroMaggiore seconda versione /
  • main() scanf(x) scanf(y) if (x gt y)
    printf(x) else printf(y)
  • NB Commenti e pretty printing

90
  • /ProgrammaCercaIlPrimoZero /
  • main() uno 1 scanf (dato) while (dato
    !0) scanf(dato) printf(uno)

91
  • Si consideri il problema di calcolare la
    sommatoria di una sequenza di numeri maggiori di
    0, terminante con uno 0. Il programma seguente
    inizializza la variabile somma a 0 quindi
    comincia a leggere i dati e, finché il numero
    letto è diverso da 0, lo addiziona al valore
    corrente della variabile somma alla fine, quando
    il valore letto è 0, stampa il valore di somma
    sullo Standard Output.
  • /ProgrammaSommaSequenza /
  • main() somma 0 scanf(numero) while
    (numero ! 0)
  • somma somma numero scanf(numero)
  • printf(somma)
  • NB spiegazione informale (commenti) affiancata
    al codice
Write a Comment
User Comments (0)
About PowerShow.com