Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la...

155
1 Lezione I Lu 2 Ott. 2006 Introduzione

Transcript of Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la...

Page 1: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

1

Lezione ILu 2 Ott. 2006

Introduzione

Page 2: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

2

Cos’è un computer?Oggi si usano quotidianamente computer

lavorosvago

Sul lavoro, i computer sono ottimi per svolgereoperazioni ripetitive o noiose, come effettuare calcoli o impaginare testioperazioni complicate e veloci, come controllare macchine utensili

Nel gioco, i computer sono ottimi per coinvolgere al massimo l’utente-giocatore, perché possono riprodurre con estremo realismo suoni e sequenze di immaginiIn realtà, tutto questo non è merito propriamente del computer, ma dei programmi che vengono eseguiti

Page 3: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

3

Cos’è un computer?Un computer è in generale una macchina che

elabora dati (numeri, parole, immagini, suoni...)interagisce con dispositivi (schermo, tastiera, mouse...)esegue programmi

Ogni programma svolge una diversa funzione, anche complessa

impaginare testigiocare a scacchi

I programmi sonosequenze di istruzioni che il computer eseguedecisioni che il computer prende per svolgere una certa attività

Page 4: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

4

Cos’è un computer?Il computer è una macchina versatile, progettata per eseguire programmi, di natura eterogenea, ciascuno dei quali sviluppato per svolgere una specifica attività.

Differisce dalle altre macchine, che generalmente sono pensate per svolgere un’unica attività:

auto trasportotelefono comunicazione oraletrapano foratura materiali solidi

L’elevato numero di istruzioni presenti in un programma e la loro esecuzione ad alta velocità – se paragonata alla velocità di reazione umana - garantisce all’utente l’impressione di un’interazione fluida.

Page 5: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

5

Cos’è un programma?Nonostante i programmi siano generalmente sofisticati e svolgano funzioni complesse, le istruzioni di cui sono composti sono elementari, ad esempio

estrarre un numero da una posizione della memoriasommare due numeriinviare la lettera A alla stampante (istruzione)disegnare un punto rosso in una data posizione dello schermose un dato è negativo, proseguire il programma da una certa istruzione anziché dalla successiva (decisione)

Page 6: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

6

Cos’è la programmazione?Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari per svolgere un particolare compito

L’attività di progettare e realizzare un programma è detta programmazione

Scopo di questo corso è fornire la competenza per scrivere semplici programmi usando il linguaggio di programmazione Java

Page 7: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

7

Cos’è la programmazione?Usare un computer non richiede alcuna attività di programmazione. Si usano programmi codificati da altri

giochibrowser, posta elettronica, instant messagingvideoscrittura, publishing, grafica

Al contrario, un informatico professionista solitamente svolge attività di programmazione, anche se la programmazione non è l’unica competenza che deve avere

La programmazione è una parte importante dell’informatica

Page 8: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

8

Cos’è un algoritmo?Con il computer si elaborano dati e risolvono problemi.

Quale tipo di problemi è possibile risolvere con un computer?

Dato un insieme di fotografie di paesaggi, qual è il paesaggio più rilassante?Avendo depositato ventimila euro in un conto bancario che produce il 5% di interessi all’anno, capitalizzati annualmente, quanti anni occorrono affinché il saldo del conto arrivi al doppio della cifra iniziale?

Il primo problema non può essere risolto dal computer. Perché?

Page 9: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

9

Cos’è un algoritmo?Il primo problema è ambiguo. Non può essere risolto dal computer, a meno che non sia data una definizione di paesaggio rilassante che possa essere usata per confrontare in modo univoco due paesaggi diversi

Un computer può risolvere soltanto problemi che potrebbero essere risolti anche manualmente

è solo più veloce, non fa erroriIl secondo problema è certamente risolvibile manualmente, facendo un po’ di calcoli...

Page 10: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

10

Cos’è un algoritmo? Al-Khuwarizmi IX sec. d.c.

Si dice algoritmo la descrizione di un metodo di soluzione di un problema che

sia eseguibile (sequenza di istruzioni eseguibili)sia priva di ambiguitàarrivi a una conclusione in un tempo finito

Un computer può risolvere soltanto quei problemi per i quali sia noto un algoritmo

Page 11: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

11

Un esempio di algoritmo

Problema: Avendo depositato ventimila euro in un conto bancario che produce il 5% di interessi all’anno, versati annualmente, quanti anni occorrono affinché il saldo del conto arrivi al doppio della cifra iniziale?

anni saldo0 20.000,001 21.000,002 22.050,003 23.152,504 24.310,135 25.525,636 26.801,917 28.142,018 29.549,119 31.026,56

10 32.577,8911 34.206,7912 35.917,1313 37.712,9814 39.598,6315 41.578,56

Page 12: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

12

Un esempio di algoritmoAlgoritmo:

A. L’anno attuale è 0 e il saldo attuale è 20000 €

B. Ripetere i successivi passi C e D finché il saldo è minore di 40000 €, altrimenti passare al punto E

C. Aggiungere 1 al valore dell’anno attuale

D. Calcolare il nuovo saldo che è pari al valore del saldo attuale moltiplicato per 1.05 (cioè aggiungiamo il 5%)

E. Il risultato è il valore dell’anno attuale

Page 13: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

13

Diagramma di flusso (flow chart)Semplici algoritmi sono spesso rappresentati graficamente per mezzo di diagrammi di flusso.Simboli usati:

inizio/fine dell’algoritmo

passo

decisionevero falso

?

arco di flusso del controllo

Page 14: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

14

Diagramma di flusso

anno = 0saldo = 20000

saldo > 40000?

incrementa anno

incrementa saldo

falso vero

Il risultato è il valore dell’anno

fine

A

B

C

D

inizio

E

Page 15: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

15

Un esempio di algoritmoIl metodo di soluzione proposto

non è ambiguo, perché fornisce precise istruzioni su cosa bisogna fare a ogni passaggio e su quale deve essere il passaggio successivo

è eseguibile, perché ciascun passaggio può essere eseguito concretamente (se, ad esempio, il metodo di soluzione dicesse che il tasso di interesse da usare al punto 4 è variabile in dipendenza da fattori economici futuri, il metodo non sarebbe eseguibile…)

arriva a conclusione in un tempo finito, perché ad ogni passo il saldo aumenta di almeno mille euro, quindi al massimo in 20 passi arriva al termine

Page 16: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

16

Altro esempio di algoritmoProblema: determinare i numeri interi primi ≤ n, | n>2Algoritmo: CRIVELLO DI ERATOSTENE (~276-196 a.C.)

A Elencare in sequenza i numeri da 2 a n in ordine crescente e porre la variabile k = 2

B Finché k*k è inferiore o uguale a n, eseguire i seguenti passi C e D, altrimenti eseguire il passo E (l’algoritmo e’ finito)

C Cancellare dall’elenco tutti i multipli di k (2k, 3k, ...)D Scegliere dall’elenco il successivo a k fra i numeri non

cancellati e assegnarlo a kE Fine dell’algoritmo: i numeri primi sono quelli che non sono

stati cancellati

Esempio: sia n = 11A: 2 3 4 5 6 7 8 9 10 11, k = 2B: k*k = 4 < n C: 2 3 4 5 6 7 8 9 10 11 D: k = 3B: k*k = 9 < n C: 2 3 4 5 6 7 8 9 10 11 D: k = 5B: k*k = 25 > n E: 2 3 5 7 11

Page 17: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

17

Diagramma di flusso

Elencare numerik = 2

k*k > n?

Cancella multipli di n

k = successivo

falso vero

I numeri non cancellati sono

primi

fine

A

B

C

D

inizio

E

Page 18: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

18

A cosa servono gli algoritmi?L’identificazione di un algoritmo è un requisito indispensabile per risolvere un problema (con il computer o senza)

La scrittura di un programma per risolvere un problema consiste, in genere, nella traduzione di un algoritmo in un qualche linguaggio di programmazione

Prima di scrivere un programma, è necessario individuare e descrivere un algoritmo!

La definizione di algoritmi e la misura della loro efficienza è una parte importante dell’informatica (e anche di questo corso).

Page 19: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

19

Lezione IIMa 3 Ott. 2006

Architettura di un eleboratore

Il modello di von Neumann

Page 20: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

20

Il modello di von NeumannNel 1945-46 Janos von Neumann elaborò un modello teorico dell’architettura di un elaboratore che è tuttora valido e molto utilizzato (EDVAC, Electronic Discrete Variable Automatic Computer)La grande maggioranza degli elaboratori odierni ha un’architettura che può essere ricondotta al modello di von Neumann (più o meno facilmente)

le eccezioni più importanti sono alcune macchine ad elaborazione parallela

Il modello è importante in quanto schematizza in modo omogeneo situazioni diverse

lo presentiamo in una versione un po’ modificata

Page 21: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

21

CPU

Il modello di von Neumann

Bus

Memoriaprincipale

Memoriasecondaria

Dispositividi Input edi Output

L’architettura di von Neumann è composta da quattro blocchi comunicanti tra loro per mezzo di un canale di scambio di informazioni, detto bus,

Page 22: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

22

Unità di elaborazione centraleL’unità centrale di elaborazione

CPU, Central Processing Unitha il compito di elaborare i dati

individua ed esegue le istruzioni del programmaeffettua elaborazioni aritmetiche e logiche con la sua unità logico-aritmeticaacquisisce i dati dalla memoria primaria e secondaria e da altri dispositivi di input/output e ve li rispedisce dopo averli elaborati

Fisicamente è costituita da uno o più chip (microprocessori)

Page 23: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

23

Il chip della CPUUn chip, o circuito integrato, è un componente elettronico con connettori metallici esterni (pin) e collegamenti interni (wire), costituito principalmente di silicio e alloggiato in un contenitore plastico o ceramico (package)I collegamenti interni di un chip sono molto complicati; ad esempio, il chip Pentium 4 di Intelè costituito da più di 50 milioni di transistori tra loro interconnessi

Page 24: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

24

L’unità centrale di elaborazioneDal punto di vista logico, la CPU è costituita da tre parti principali:

l’unità logico-aritmetica (ALU)l’unità di controllo, che ne governa il funzionamentoun insieme limitato di registri, che sono locazioni di memoria ad accesso veloce per la memorizzazione temporanea dei dati

Il funzionamento della CPU è di tipo ciclico e il periodo di tale ciclo viene scandito dall’orologio di sistema (clock), che produce un segnale periodico

Page 25: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

25

L’unità centrale di elaborazione

La frequenza del clock, costituisce una delle caratteristiche tecniche più importanti della CPU

si misura in cicli al secondo o Hzes. 3 GHz, 3x109 = 3 miliardi di cicli al secondo

f = 1/τ τ si dice periodosegnale periodico: f(t) = f(t + τ)

τ

Page 26: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

26

Ciclo di funzionamento della CPUIl ciclo di funzionamento è composto da tre fasi

accesso (fetch):• caricamento dell’istruzione da eseguire dalla memoria primaria e sua

memorizzazione nel Registro Istruzione• incremento del Registro Contatore di Programma

decodifica (decode):• decodifica dell’istruzione da eseguire

esecuzione (execute):• esecuzione dell’istruzione

Si parla di ciclo fetch-decode-executeL’indirizzo in memoria centrale dell’istruzione da caricare durante la fase di fetch è contenuto in un registro speciale detto contatore di programma (program counter, PC)

viene incrementato di un’unità a ogni ciclo alla fine della fasedi accesso, in modo da eseguire istruzioni in sequenza

Page 27: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

27

Ciclo di funzionamento della CPU

Esempio di funzionamento ciclico della CPU durante

l’esecuzione di un programma

finito?

fetchincremento PC

decode

falso vero

fine

inizio

execute

PC <- indirizzo della prima istruzione (entry point)

Page 28: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

28

Unità Centrale di Elaborazione

Page 29: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

29

La memoriaLa memoria serve a immagazzinare dati e programmiall’interno del computer

È suddivisa in celle o locazioni di memoria, ognuna delle quali ha un indirizzo (numero progressivo)

Ogni cella contiene un numero predefinito di bit, solitamente uguale a otto

bit è un dato elementare che può assumere due valori, convenzionalmentechiamati zero e unoun insieme di otto bit si chiama byte ed è l’unità di misura della capacità di memoria

• es. 512 MByte = 512 * 220 bytes• nelle unita’ di memoria k = 210 = 1024, M = k * k = 220 = 1048576

Ci sono due tipi di memoriaprimaria e secondaria

Page 30: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

30

La memoria primaria (o centrale)La memoria primaria è veloce ma costosaÈ costituita da chip di memoria realizzati con la stessa tecnologia (al silicio) utilizzata per la CPU

memoria di sola lettura (ROM, Read-Only Memory)memoria ad accesso casuale(RAM, Random Access Memory)

• dovrebbe chiamarsi memoria di lettura e scrittura, perché in realtà anche la ROM è ad accesso casuale, mentre ciò che le distingue è la possibilità di scrivervi

• accesso casuale significa che il tempo per accedere a un dato non dipende dalla sua posizione nella memoria

Page 31: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

31

Indirizzo di una cella di memoria

Indirizzo a 16 bit Celle di memoria(esadecimale) a 8 bit (byte)

$ 0000 |_|_|_|_|_|_|_|_|$ 0001 |_|_|_|_|_|_|_|_|$ 0002 |_|_|_|_|_|_|_|_|... ...$ FFFF |_|_|_|_|_|_|_|_|

Esempio di Memoria Primaria organizzata a bytecon indirizzo a 16 bit (216 = 65 356 celle)

216 = 26*210 = 64 kByte (210 = 1024 = 1 kByte)

A ciascuna cella di memoria e’ associato un numero progressivo a partire da zero, generalmente espresso in formato esadecimale.

Questo numero e’ detto indirizzo della cella di memoria

Page 32: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

32

La memoria ROMROM: memoria di sola lettura

conserva i dati ed i programmi memorizzati anche quando il computer viene spento

• è una memoria non volatile

contiene i programmi necessari all’avvio del computer, programmi che devono essere sempre disponibili

• nei PC, tali programmi prendono il nome di BIOS(Basic Input/Output System)

Page 33: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

33

La memoria RAMRAM: memoria ad accesso casuale

è una memoria che consente la lettura e la scrittura dei dati e dei programmi in essa contenuti

contiene dati in fase di modifica e programmi che devono essere sempre disponibili

perde i dati quando si spegne il computer (è un supporto volatile)

Page 34: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

34

La memoria secondaria(o di massa)

La memoria secondaria (o di massa) è un supporto non volatile e meno costoso della memoria primaria per unità di memoria (circa cento volte)

programmi e dati risiedono sul disco rigido e vengono caricati nella RAM quando necessario, per poi tornarvi aggiornati se e quando necessario

E’ di solito un disco rigido (o disco fisso, hard disk)

Un disco rigido è formato da piatti rotanti rivestiti di materiale magnetico, con testine di lettura/scrittura

Page 35: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

35

La memoria secondariaSono molto diffusi anche altri tipi di memoria secondaria a tecnologia magnetica

floppy disk (dischetto flessibile), di capacità limitata (1.4 Mbyte) ma con il vantaggio di poter essere agevolmente rimosso dal sistema e trasferito ad un altro sistema (dispositivo di memoria esterno)flash memory, memoria permanente riscrivibile;

• allo stato solido (non presenta parti in movimento)

tape (nastri per dati), di capacità elevatissima, molto economici, ma molto lenti, perché l’accesso ai dati èsequenziale anziché casuale (bisogna avvolgere o svolgere un nastro invece che spostare la testina di lettura sulla superficie di un disco)

Page 36: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

36

La memoria secondariaSono molto diffusi anche altri tipi di memoria secondaria a tecnologia ottica

CD-ROM (Compact Disc Read-Only Memory), viene letto da un dispositivo laser, esattamente come un CD audio; ha una elevata capacità ed è molto economico e affidabile; è un supporto di sola lettura, utilizzato per distribuire programmi e informazioni (750 Mbyte)CD-R (Compact Disc Recordable), utilizza una tecnologia simile al CD-ROM ma può essere scritto dall’utente (una sola volta; più volte se CD-RW)

DVD (Digital Versatile Disc), elevata capacità (Gbyte)

Page 37: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

37

Dispositivi periferici di interazioneL’interazione fra l’utente umano ed il computer avviene mediante i cosiddetti dispositivi periferici di Input/Output (dispositivi di I/O)Tipici dispositivi di input sono la tastiera,il mouse (dispositivo di puntamento),il microfono (per impartire comandi vocali),il joystick (per i giochi), lo scanner (per la scansione digitale di documenti e immagini)Tipici dispositivi di output sono lo schermo (monitor), le stampanti, gli altoparlanti

Page 38: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

38

Il bus è in realtà costituito da tre componenti distinti

bus dei datibus degli indirizzibus dei segnali di controllo

Sul bus dei dati viaggiano dati da e verso la CPUSugli altri bus viaggiano indirizzi e segnali di controllo che provengono di norma dalla CPU

Il bus nel modello di von Neumann

CPU

Bus

Memoriaprincipale

Memoriasecondaria

Dispositividi Input edi Output

Page 39: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

39

L’architettura di un computerPer capire i meccanismi di base della programmazione è necessario conoscere gli elementi hardware che costituiscono un computer

Prendiamo in esame il Personal Computer(PC), ma anche i computer più potenti hanno un’architetturamolto simile

Page 40: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

40

Diagramma schematico di un personal computer

Page 41: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

41

La scheda madre di un PCAll’interno del PC si trova la scheda madre(mother-board), che contiene la CPU, la memoria primaria, il bus e gli alloggiamenti (slot) di espansione per il controllo delle periferiche

La CPU, la memoria primaria (RAM e ROM) e i circuiti elettronici che controllano il disco rigido e altri dispositivi periferici sono interconnessi mediante un insieme di linee elettriche che formano il busI dati transitano lungo il bus, dalla memoria e dai dispositivi periferici verso la CPU, e viceversa

Page 42: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

42

La scheda madre di un PC CPU

RAM

slot

Page 43: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

43

Programmare incodice macchina

Page 44: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

44

Le istruzioni macchinaLe istruzioni elementari eseguite da un computer (cioè dalla sua CPU) si chiamano

istruzioni macchinaL’insieme di istruzioni macchina (instruction set) è specifico di una particolare CPU: quello di un Intel Pentium è diverso da quello di un MotorolaPowerPCUna particolare CPU è la cosiddetta macchina virtuale Java (JVM, Java Virtual Machine)

la JVM non è una vera CPU… ma per il momento possiamo considerarla tale…

Page 45: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

45

Le istruzioni macchinaLa codifica delle istruzioni macchina avviene sotto forma di configurazioni di bit conservate in memoria(che possono essere interpretate come numeri interi)Esempio di alcune istruzioni macchina:

carica in un registro il valore contenuto nella posizione di memoria $40: codifica: 21 40carica in un altro registro il valore 100: cod. 16 100se il primo valore è maggiore del secondo, prosegui con l’istruzione contenuta nella posizione di memoria 240, altrimenti con l’istruzione che segue quella attuale

• cod. 163 240Le precedenti istruzioni per la JVM diventano quindi 21 40 16 100 163 240

Page 46: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

46

Le istruzioni macchinaIn tutte le CPU, le istruzioni macchina si possono suddividere nelle seguenti categorie(i nomi delle istruzioni sono solo degli esempi)

trasferimento dati, tra i registri e la memoria principale• LOAD (verso un registro), STORE (verso la memoria)

operazioni aritmetiche e logiche, eseguite dalla ALU• aritmetiche: ADD, SUB, MUL, DIV• logiche: AND, OR, NOT

salti, per alterare il flusso di esecuzione sequenziale (viene modificato il Program Counter)

• incondizionato (JUMP): salta in ogni caso• condizionato: salta solo se un certo valore è zero (JZ) o se è

maggiore di zero (JGZ)

Page 47: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

47

Le istruzioni macchinaPer eseguire un programma in un computer è necessario scrivere all’interno della memoria primaria le configurazioni di bit corrispondenti alle istruzioni macchina del programmaPer fare ciò è necessario conoscere tutti i codici numerici delle istruzioni macchina 21 40 16 100 163 240 ...

Questa operazione lunga e noiosa (che veniva eseguita manualmente agli albori dell’informatica) è stata presto automatizzata da un programma in esecuzione sul computer stesso, detto assemblatore (assembler)

Page 48: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

48

Le istruzioni macchina

La CPU è un interprete dell’insieme di istruzioni della CPU stessa.

Significa che la CPU è una macchina capace di eseguire le istruzioni macchina definite nell’insieme delle istruzioni della CPU stessa.

Page 49: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

49

Programmazione in linguaggio Assembly

Page 50: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

50

L’assemblatoreUtilizzando l’assemblatore, il programmatore scrive il programma mediante dei nomi abbreviati(codici mnemonici ) per le istruzioni macchina, molto più facili da ricordare

esempio precedente per la JVM

L’uso di nomi abbreviati è assai più agevole, e il programma assemblatore si occupa poi di tradurreil programma in configurazioni di bitTali linguaggi con codici mnemonici si dicono linguaggi assembly (uno diverso per ogni CPU)

iload 40bipush 100if_icmpgt 240

Page 51: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

51

L’assemblatoreUn’altra caratteristica molto utile dell’assemblatore è quella di poter assegnare dei nomi agli indirizzi di memoria e ai valori numerici e di usarli nelle istruzioni

In questo modo il programma è molto più leggibile, perché viene evidenziato il significatodegli indirizzi di memoria e dei valori numerici

Corrispondenza biunivoca fra insieme di istruzioni assembly e instruction set del processore

iload ratebipush maxRateif_icmpgt tooMuch

Page 52: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

52

L’assemblatore

programmaassemblatore

codiceassembly

(file)

codiceeseguibile

(file)

programmaassemblatore

...iload ratebipush maxRateif_icmpgt tooMuch...

...21 40 16 100 163 240 ...

Il programma assemblatore traduce istruzioni assembly in istruzioni macchina (corrispondenza biunivoca)Il programma assemblatore riceve in ingresso un filecontenente codice in linguaggio assembly e produce in uscita un file contenente istruzioni macchina.Per ora un file sia una collezione di dati, memorizzata nella memoria secondaria e identificata con un nome

Page 53: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

53

I linguaggi assemblyVantaggio: rappresentarono un grosso passo avanti rispetto alla programmazione in linguaggio macchinaProblema: occorrono molte istruzioni per eseguire anche le operazioni più sempliciProblema: ciascuna CPU ha il proprio linguaggio Assembly quindi la sequenza di istruzioni di uno stesso programma cambia al cambiare della CPU è molto costoso scrivere programmi che

possano funzionare su diverse CPU, perché praticamente bisogna riscriverli completamente

Page 54: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

54

Lezione IIIMe 4 Ott. 2006

Linguaggi di programmazionead alto livello

Page 55: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

55

Linguaggi ad alto livelloNegli anni ‘50 furono inventati i primi linguaggi di programmazione ad alto livello

FORTRAN: primo “vero” linguaggio• BASIC, COBOL

Anni ‘60 e ‘70: programmazione strutturata• Pascal (Niklaus Wirth, 1968)• C ( Brian Kernigham e Dennis Ritchie, 1970-75)

Anni ‘80 e ‘90, programmazione orientata agli oggetti• C++ ( Bjarne Stroustrup, 1979)• Java (James Gosling e Patrick Naughton, 1991)

Il programmatore esprime la sequenza di operazioni da compiere, senza scendere al livello di dettaglio delle istruzioni macchina

if (rate > 100) System.out.print("Troppo");

Page 56: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

56

CompilatoreUn programma, detto compilatore, legge il programma in linguaggio ad alto livello e genera il corrispondente programma nel linguaggio macchina di una specifica CPUI linguaggi ad alto livello sono indipendenti dalla CPU

ma il prodotto della compilazione (codice eseguibile), non è indipendente dalla CPU

occorre compilare il programma con un diverso compilatore per ogni CPU sulla quale si vuole eseguire il programma stesso

Si dice codice sorgente il codice scritto in un linguaggio ad alto livelloSi dice codice eseguibile il codice scritto nel linguaggio macchina

Page 57: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

57

Compilatore

Il compilatore traduce codice in linguaggio ad alto livello in codice eseguibile di uno specifico processorericeve in ingresso un file contenente codice in linguaggio ad alto livello e produce in uscita un file contenente codice eseguibile di uno specifico compilatoreLo stesso codice sorgente può essere tradotto in codice eseguibile di processori diversi usando compilatori diversi

programmacompilatore perCPU di tipo A

codice sorgente(file)

codice eseguibileper la CPU di tipo A

(file)

codice eseguibileper la CPU di tipo B

(file)

programmacompilatore perCPU di tipo B

Page 58: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

58

Linguaggi ad alto livelloEsistono molti linguaggi di programmazione ad alto livello, così come esistono molte lingue

L’esempio seguente è in linguaggio Java

e questo è l’equivalente in linguaggio Pascal

La sintassi di un linguaggio viene scelta dai progettisti del linguaggio stesso, come compromesso fra leggibilità, facilità di compilazione e coerenza con altri linguaggi

if (rate > 100) System.out.print("Troppo");

if rate > 100 then write ('Troppo');

Page 59: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

59

Linguaggi ad alto livelloI linguaggi di programmazione, creati dall’uomo, hanno una sintassi molto più rigida di quella dei linguaggi naturali, per agevolare il compilatoreIl compilatore segnala gli errori di sintassi

e non tenta di capire, come farebbe un utente umano, perché sarebbe molto difficile verificare le intuizioni del compilatore meglio la segnalazione di errori!

if (rate > 100)) System.out.print("Troppo");

parentesi di troppo

Page 60: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

60

Il linguaggio JavaNato nel 1991 in Sun Microsystems, da un gruppo di progettisti guidato da Gosling e NaughtonProgettato per essere semplice e indipendente dalla CPU(o, come anche si dice, dall’hardware, dalla piattaforma o dall’architettura)

Il primo prodotto del progetto Java fu un browser(programma per navigare in internet) , HotJava, presentato nel 1994, che poteva scaricare programmi (detti applet) da un server ed eseguirli sul computer dell’utente, indipendentemente dalla sua piattaforma

Page 61: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

61

Il linguaggio JavaIl linguaggio Java è stato adottato da moltissimi programmatori perché

è più semplice del suo diretto concorrente, C++consente di scrivere e compilare una volta ed eseguire dovunque (cioè su tutte le piattaforme)“compile once, execute everywhere”ha una ricchissima libreria che mette a disposizione dei programmatori un insieme vastissimo di funzionalità standard, indipendenti dal sistema operativo

Page 62: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

62

Il linguaggio Java per gli studentiDato che Java non è stato progettato per la didattica

non è così semplice scrivere programmi Java molto semplici!

Anche per scrivere programmi molto semplici è necessario conoscere parecchi dettagli “tecnici”, un potenziale problema nelle prime lezioniAdotteremo lo stile didattico di usare alcuni costrutti sintattici senza spiegarli o approfondirli, rimandando tali fasi al seguito

Page 63: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

63

Il nostro primo programma JavaTradizionalmente, il primo programma che si scrive quando si impara un linguaggio di programmazione ha il compito di visualizzare sullo schermo un semplice saluto

Scriviamo il programma nel file Hello.java

usando un editor di testi editor di testi = programma per scrivere testi

Non si deve usare un programma di videoscrittura!

Hello, World!

Page 64: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

64

Editor e programmi di videoscritturaEntrambi sono programmi per scrivere testi, ma...un editor memorizza solo caratteri, niente altrocaro amico (anche lo spazio è un carattere!)es: MS notepad (blocco note), linux gedit e kwrite, context (Ms e linux)

un programma di videoscrittura memorizza oltre i caratteri anche informazioni aggiuntive quali, ad esempio, tipo di carattere (font), dimensione, stile (grassetto, italico, sottolineato), allineamento, colore, ...

caro amico caro amicoes.: MS Word e OpenOffice Writer (linux, free) sono programmi di videoscrittura!

Page 65: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

65

Occorre fare attenzione

il testo va inserito esattamente come è presentato

• per il momento…

maiuscole e minuscole sono considerate distinte

il testo va inserito in un file che deve chiamarsi Hello.java

public class Hello{public static void main(String[] args){System.out.println("Hello, World!");

}}

Primo programma Java

Page 66: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

66

A questo punto compiliamo il programma

e il compilatore genera il file Hello.classOra eseguiamo il programma

ottenendo la visualizzazione del messaggio di saluto sullo schermo

javac Hello.java

java Hello

Hello, World!

Il nostro primo programma Java

Page 67: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

67

Diversamente da altri linguaggi (es. FORTRAN) il linguaggio Java consente una disposizione del testo a formato libero: gli spazi e le interruzioni di riga (“andare a capo”) non sono importanti, tranne che per separare paroleSarebbe quindi possibile scrivere

Bisogna però fare attenzione alla leggibilità!

public class Hello{public static voidmain (String[] args) { System.out.

println("Hello, World!") ;}}

Una nota stilistica

Page 68: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

68

Analisi del primo programmaLa prima riga

definisce una nuova classe, la classe HelloLe classi sono fabbriche di oggetti e rappresentano un concetto fondamentale in Java, che è un linguaggio di programmazione orientato agli oggetti (OOP, Object-Oriented Programming)Per il momento, consideriamo gli oggetti come elementi da manipolare in un programma JavaUn programma (detto anche applicazione) Java e’ costituito da una o piu’ classi (generalmente molte)

public class Hello

Page 69: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

69

Analisi del primo programmaLa parola chiave public indica che la classe Hellopuò essere utilizzata da tutti

Una parola chiave è una parola riservata del linguaggio che va scritta esattamente così com’èe che non può essere usata per altri scopiLa parola chiave class indica che inizia la definizione di una classeCiascun file sorgente (parte di un programma Java) può contenere una sola classe pubblica, il cui nome deve coincidere con il nome del file

public class Hello

Page 70: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

70

Analisi del primo programmaLe classi oltre a essere fabbriche di oggetti, sono anche contenitori di metodiUn metodo definisce una sequenza di istruzioni o enunciati che descrive come svolgere un determinato compito (in altri linguaggi i metodi si chiamano funzioni o procedure)Un metodo deve essere inserito in una classe, quindi le classi rappresentano il contenitore per l’organizzazione dei programmi

Page 71: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

71

Analisi del primo programmaLa costruzione

definisce il metodo main ( ) (principale)Un’applicazione Java deve avere un metodo main() da cui inizia l’esecuzione del programmaAnche qui, public significa utilizzabile da tuttistatic, void, String[] args per intanto lasciamoli senza commento. Vedremo piu’ avanti

public static void main(String[] args){ ...}

Page 72: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

72

Programma sempliceSintassi:

Scopo: eseguire un programma semplice, descritto da enunciati e contenuto nel file NomeClasse.javaNota: la parte in blu viene per ora considerata una infrastruttura necessaria, approfondita in seguito

public class NomeClasse{ public static void main(String[] args)

{ enunciati}

}

Page 73: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

73

Analisi del primo programmaGli enunciati del corpo di un metodo (gli enunciati contenuti tra le parentesi graffe) vengono eseguiti uno alla volta nella sequenza in cui sono scrittiOgni enunciato termina con il carattere Il metodo main() del nostro esempio ha un solo enunciato, che visualizza una riga di testo

Ma dove la visualizza? Un programma può inserire testo in una finestra, scriverlo in un file o anche inviarlo ad un altro computer attraverso Internet...

System.out.println("Hello, World!");

;

Page 74: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

74

Nel nostro caso la destinazione è l’outputstandard, una proprietà di ciascun programma che dipende dal sistema operativo del computerIn Java, l’output standard è rappresentato da un oggetto di nome out

come ogni metodo, anche gli oggetti devono essere inseriti in classi: out è inserito nella classe Systemdella libreria standard, che contiene oggetti e metodi da utilizzare per accedere alle risorse di sistemaper usare l’oggetto out della classe System si scrive

Analisi del primo programmaSystem.out.println("Hello, World!");

System.out

Page 75: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

75

Quando si usa un oggetto, bisogna specificare cosa si vuol fare con l’oggetto stesso

in questo caso vogliamo usare un metodo dell’oggetto out, il metodo println(), che stampa una riga di testoper usare il metodo println() dell’oggetto System.outsi scrivela coppia di parentesi tonde racchiude le informazioni necessarie per l’esecuzione del metodo (parametri)

A volte il carattere punto significa “usa un oggetto di una classe”, altre volte “usa un metodo di un oggetto”: dipende dal contesto...

Analisi del primo programmaSystem.out.println("Hello, World!");

System.out.println(parametri)

Page 76: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

76

System e’ una classe della libreria standard che e’ una collezione di classi pronte per essere usate, fornite insieme al linguaggio JavaSystem.out e’ un oggetto definito nella classe System di classe PrintStreamPrintStream è un’altra classe della libreria standardL’ambiente java fornisce una documentazione esaustiva della libreria standard

javadoc in formato htmlSystem.out.print( ) e’ un altro metodo dell’oggetto out che puo’ essere usato a inviare una stringa a standard output

a differenza di println() non va a nuova riga

Analisi del primo programmaSystem.out.println("Hello, World!");

Page 77: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

77

Lezione IVGi 5 Ott. 2006

Linguaggio javaErrori sintattici e logici

Page 78: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

78

Errori di programmazione

L’attività di programmazione, come ogni altra attività di progettazione, è soggetta ad errori di vario tipo

errori di sintassi o di compilazione

errori logici o di esecuzione

System.aut.println("Hello, World!");

System.out.println("Hello, World!);

System.out.println("Hell, World!");

System.out.println("Hello, World!");

Page 79: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

79

Errori di sintassiIn questo caso il compilatore riesce agevolmente ad individuare e segnalare l’errore di sintassi, perché identifica il nome di un oggetto (simbolo) che non è stato definito (aut) e sul quale non è in grado di “decidere”

System.aut.println("Hello, World!");

C:\>javac Hello.javaHello.java:5: cannot resolve symbolsymbol : variable autlocation: class java.lang.SystemSystem.aut.println("Hello, World!");

^1 error

posizione (numero di riga)

posizione (nella riga)

diagnosi

Page 80: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

80

Errori di sintassiQuesto è invece un caso molto più complesso: viene giustamente segnalato il primo errore, una stringa non terminata, e viene evidenziato il punto dove inizia la stringa

System.out.println("Hello, World!);

C:\>javac Hello.javaHello.java:5: unclosed string literalSystem.out.println("Hello, World!);

^Hello.java:5: ')' expectedSystem.out.println("Hello, World!);

^2 errors

virgolette mancanti

Page 81: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

81

Errori di sintassiViene però segnalato anche un secondo errore

il compilatore si aspetta di trovare una parentesi tonda chiusa, in corrispondenza di quella apertala parentesi in realtà c’è, ma il compilatore l’ha inserita all’interno della stringa, cioè ha prolungato la stringa fino al termine della riga

C:\>javac Hello.javaHello.java:5: unclosed string literalSystem.out.println("Hello, World!);

^Hello.java:5: ')' expectedSystem.out.println("Hello, World!);

^2 errors

Page 82: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

82

Errori logiciQuesto errore, invece, non viene segnalato dal compilatore, che non può sapere che cosa il programmatore abbia intenzione di far scrivere al programma sull’output standard

la compilazione va a buon finesi ha un errore durante l’esecuzione del programma, perché viene prodotto un output diverso dal previsto

System.out.println("Hell, World!");

C:\>java HelloHell, World!

manca un carattere

Page 83: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

83

Errori logiciSono molto più insidiosi degli errori di sintassi

il programma viene compilato correttamente, ma non fa quello che dovrebbe fare

L’eliminazione degli errori logici richiede molta pazienza, eseguendo il programma e osservando con attenzione i risultati prodotti

è necessario collaudare i programmi, come qualsiasi altro prodotto dell’ingegneria

Si usano programmi specifici (debugger) per trovare gli errori logici (bug) in un programma

Page 84: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

84

Fasi della Programmazione

Page 85: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

85

Le fasi della programmazioneL’attività di programmazione si esegue in tre fasi

scrittura del programma (codice sorgente)compilazione del codice sorgente

• creazione del codice eseguibile (codice macchina)

esecuzione del programmaPer scrivere il codice sorgente si usa un editor ditesto, salvando (memorizzando) il codice in un file Hello.java

Page 86: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

86

Individuare il compilatore JavaIl modo di utilizzo del compilatore Java dipende dal sistema operativo

si seleziona con il mouse un’icona sullo schermosi seleziona una voce in un menu di comandisi compone il nome di un comando sulla tastierasi utilizza un ambiente integrato per lo sviluppo software (IDE, Integrated Development Environment)

Nel nostro corso useremo i comandi da tastiera del JDK (Java Development Kit) di Sun Microsystems

Page 87: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

87

La compilazione del sorgenteCompilando il codice sorgente di un programma in Java (gli enunciati in linguaggio Java) si ottiene un particolare formato di codice eseguibile, detto bytecode, che è codice macchina per la Java VirtualMachine (JVM) javac Hello.java genera Hello.class

Quindi il bytecode non è codice direttamente eseguibile dalla CPU reale, dato che la JVM non è una CPU fisica…e il bytecode e’ codice macchina della Java Virtual Machine

Page 88: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

88

L’esecuzione del programmaPer eseguire un programma si usa l’interpreteJava, un programma eseguibile sul computer dell’utente che

carica in RAM il bytecode del programma (della classe Hello)avvia il programma eseguendo il metodo main di tale classecarica successivamente i file di bytecode di altre classi che sono necessarie durante l’esecuzione (ad esempio, la classe System)traduce “al volo” le istruzioni del bytecode in istruzioni macchina della CPU reale (che esegue il codice)

java Hello scrive Hello, World! sullo standard output

Page 89: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

89

La Java Virtual Machine

CPUreale

InterpreteJava

CPU virtuale (JVM)

bytecodecodice

macchina

Page 90: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

90

La libreria di classi standardPer scrivere sullo standard output è necessario interagire con il sistema operativo, un’operazione di basso livello che richiede conoscenze specificheQueste operazioni, per chi utilizza il linguaggio Java, sono state già realizzate dagli autori del linguaggio (Sun Microsystems), che hanno scritto delle classi apposite (ad esempio, System)Il bytecode di queste classi si trova all’interno di librerie standard, che sono raccolte di classiNon è necessario avere a disposizione il codice sorgente di queste classi, né capirlo! Comodo...

Page 91: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

91

Il processo di programmazione in Java

codicesorgente

file di bytecode librerie

interprete

programma in esecuzione

JDK - Java Development Kit

E se qualcosa non funziona?

compilatoreeditor

Page 92: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

92

eventualmente usa debugger

jdb Hello

fine

errori di logica?

errori di sintassi?

Modifica-Compila-Collaudainizio

Si

Si

No

No

crea o modificaprogramma

edit Hello.java

compilaprogramma

javac Hello.java

collaudaprogrammajava Hello

Page 93: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

93

Compilatore e/o interpretePer passare dalla scrittura del file sorgente in linguaggio Java all’esecuzione del programma su una particolare CPU, si usano il compilatore e l’interpreteCon la maggior parte degli altri linguaggi di programmazione ad alto livello, invece, si usa soltanto il compilatore oppure soltanto l’interprete

con linguaggi compilati come Pascal, C e C++, si usa il compilatore per creare un file eseguibile, contenente codice macchina, a partire da file sorgenti (con l’eventuale ausilio di un caricatore, loader, che interagisce con una libreria)con linguaggi interpretati come BASIC e PERL, l’interprete traduce “al volo” il file sorgente in codice eseguibile e lo esegue, senza creare un file eseguibile

Page 94: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

94

Il processo di programmazione

compilatore (caricatore)

codice sorgente librerie

programma in esecuzione

file eseguibile

linguaggicompilati

Linguaggio Java

codicesorgente

interprete

programma in esecuzione

compilatore

file di bytecode

librerie

codice sorgente librerie

interprete

programma in esecuzione

linguaggiinterpretati

Page 95: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

95

Compilatore e/o interpreteIl fatto che un linguaggio sia compilato o interpretato influisce fortemente su quanto è

facile eseguire lo stesso programma su computer aventi diverse CPU (portabilità)veloce l’esecuzione di un programma (efficienza)

Entrambi questi aspetti sono molto importanti nella fase di scelta di un linguaggio di programmazione da utilizzare in un progettoIl linguaggio Java, da questo punto di vista, è un linguaggio misto, essendo sia compilato sia interpretato, in fasi diverse

Page 96: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

96

PortabilitàI programmi scritti in un linguaggio interpretatosono portabiliI programmi scritti in un linguaggio compilato

sono portabili a livello di file sorgente, ma è necessario compilare il programma su ogni diversa CPUnon sono portabili a livello di file eseguibile, perché esso contiene codice macchina per una particolare CPU

I programmi scritti in linguaggio Java sono portabili, oltre che a livello di file sorgente, anche ad un livello intermedio, il livello del bytecode

possono essere compilati una sola volta ed eseguiti da interpreti diversi su diverse CPU“compile once, execute everywhere!”

Page 97: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

97

EfficienzaI programmi scritti in un linguaggio interpretatosono poco efficienti

l’intero processo di traduzione in linguaggio macchina deve essere svolto ad ogni esecuzione

I programmi scritti in un linguaggio compilatosono molto efficienti

l’intero processo di traduzione in linguaggio macchina viene svolto prima dell’esecuzione, una volta per tutte

I programmi scritti in linguaggio Java hanno un’efficienza intermedia

parte del processo di traduzione viene svolto una volta per tutte (dal compilatore) e parte viene svolto ad ogni esecuzione (dall’interprete)

Page 98: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

98

Portabilità ed efficienzaSe si vuole soltanto la portabilità, i linguaggi interpretati sono la scelta migliore

Se si vuole soltanto l’efficienza, i linguaggi compilati sono la scelta migliore

Se si vogliono perseguire entrambi gli obiettivi, come quasi sempre succede, il linguaggio Java può essere la scelta vincente

Page 99: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

99

Portabilità ed efficienzaSe si vuole soltanto la portabilità, i linguaggi interpretati sono la scelta migliore

Se si vuole soltanto l’efficienza, i linguaggi compilati sono la scelta migliore

Se si vogliono perseguire entrambi gli obiettivi, come quasi sempre succede, il linguaggio Java può essere la scelta vincente

Page 100: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

100

GrammaticheJava è un linguaggio formale definito da un grammaticanon contestuale (o quasi)La grammatica può essere divisa in due parti che descrivono rispettivamente le regole lessicali e la sintassiche governano la costruzione di unità compilabili sintatticamente corrette

sintassi: studio delle regole che governano il modo in cui le parole si combinano per formare frasi e le frasi per formare periodi.

Dal punto di vista lessicale un programma Java è composto da righe (stringhe di caratteri terminate da un fineriga) a loro volta composte da unità elementari dette token (in italiano lessemi)I token devono essere separati da spazi e/o da commentiquando non ci sia un separatore o un operatore che marchi la fine del token

Page 101: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

101

TokenI lessemi o token (le unità lessicali con cui si costruisce una unità compilabile) possono essere del tipo:

Parola chiave (keyword): stringhe di caratteri il cui uso è riservato e predefinito dal linguaggio Java

• Esempio public nella classe HelloIdentificatore (identifier): una stringa di caratteri alfanumerici con il primo carattere alfabetico (anche ‘_’ e’ ammesso come primo carattere), definiti dal programmatore

• Esempio Hello, System, out, println nella classe HelloCostante (literal): un valore costanteSeparatore: caratteri di interpunzioneOperatore: simboli che indicano un’operazione fra variabili e/o costanti

Page 102: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

102

Le parole chiave di Java

whilesupernativefloatconstvolatilestrictfplongfinallyclassvoidstaticinterfacefinalchartryshortintextendscatchtransientreturninstanceofenumcasethrowspublicimportelsebytethrowprotectedimplementsdoublebreakthisprivategotodobooleansynchronizedpackageifdefaultassertswitchnewforcontinueabstract

Page 103: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

103

IdentificatoriSequenza di caratteri alfabetici e cifre numeriche di lunghezza arbitrariaIl primo carattere deve essere alfabetico

Hello e’ un identificatore validomain e’ un identificatore valido7Wonder e ?why non sono identificatori validi

Il primo carattere puo’ essere anche il carattere _ (underscore)

_nome e’ un identificatore validoNon si possono adoperare come identificatori

le parole chiave di Javale costanti “booleane” true e falsela costante speciale null

Page 104: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

104

Costanti (Literals)Numeri interi:

1, 2, 100, 567 …Numeri in formato a virgola mobile:

15.17, 1.23e-5 …Costanti booleane:

false, trueCaratteri

‘a’ ‘B’ ‘π’ ‘?’Stringhe

“Hello, World!”Costante speciale

null

Page 105: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

105

Separatori e operatoriI seguenti 9 caratteri sono utilizzati come separatori (caratteri di interpunzione)( ) { } [ ] ; , .

I seguenti 37 caratteri o token sono utilizzati nelle espressioni come operatori= > < ! ~ ? :

== <= >= != && || ++ --

+ - * / & | ^ % << >> >>>

+= -= *= /= &= |= ^= %= <<= >>= >>>=

Page 106: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

106

Tipi di dati fondamentali

Page 107: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

107

Un programma che elabora numeripublic class Coins1{

public static void main(String[] args){

int lit = 15000; // lire italianedouble euro = 2.35; // euro

// calcola il valore totaledouble totalEuro = euro + lit / 1936.27;

// stampa il valore totaleSystem.out.print("Valore totale in euro ");System.out.println(totalEuro);

}}

Page 108: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

108

Un programma che elabora numeriQuesto programma elabora due tipi di numeri

numeri interi per le lire italiane, che non prevedono l’uso di decimi e centesimi e quindi non hanno bisogno di una parte frazionarianumeri frazionari (“in virgola mobile”) per gli euro, che prevedono l’uso di decimi e centesimi e assumono valori con il separatore decimale

I numeri interi (positivi e negativi) si rappresentano in Java con il tipo di dati intI numeri in virgola mobile (positivi e negativi, a precisione doppia) si rappresentano in Java con il tipo di dati double(IEEE 754 doppia precisione)

Page 109: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

109

Perché usare due tipi di numeri?In realtà sarebbe possibile usare numeri in virgola mobile anche per rappresentare i numeri interi, ma ecco due buoni motivi per non farlo

“pratica”: i numeri interi rappresentati come tipo di dati int sono più efficienti, perché occupano meno spazio in memoria e sono elaborati più velocemente“filosofia”: indicando esplicitamente che per le lire italiane usiamo un numero intero, rendiamo evidente il fatto che non esistono i decimali per le lire italiane

• è importante rendere comprensibili i programmi!

Page 110: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

110

I commentiNel programma sono presenti anche dei commenti, che vengono ignorati dal compilatore, ma che rendono il programma molto più comprensibileUn commento inizia con una doppia barra // e termina alla fine della rigaNel commento si può scrivere qualsiasi cosaSe il commento si deve estendere per più righe, è molto scomodo usare tante volte la sequenza //Si può iniziare un commento con /* e terminarlo con */

// lire italiane

/*questo e’ un commentolungo, inutile...ma piu’ comodo*/

// questo e’ un commento// lungo,inutile... // ... e anche scomodo

Page 111: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

111

Alcune note sintatticheL’operatore che indica la divisione è /, quello che indica la moltiplicazione è *Quando si scrivono numeri in virgola mobile, bisogna usare il punto come separatore decimale, invece della virgola (uso anglosassone)Quando si scrivono numeri, non bisogna indicare il punto separatore delle migliaiaI numeri in virgola mobile si possono anche esprimere in notazione esponenziale

lit / 1936.27

1936.27

15000

1.93627E3 // vale 1.93627 × 103

Page 112: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

112

System.out.println ()Il metodo System.out.print() invia una stringa all’output standard come System.out.println() ma non va a capo alla fine della stringa stampataSystem.out.println(parametro)

Come parametro possiamo avere una stringa• System.out.println(“Hello, World!”);

Il parametro puo’ essere un numero o una variabilenumerica• System.out.println(7+5);• System.out.println(totalEuro);

out è un oggetto di classe PrintStream definito nella classeSystem della libreria standard. Consultare la documentazione della classe System e della classePrintStream (javadoc)

Page 113: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

113

Uso delle variabili

Page 114: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

114

L’uso delle variabiliIl programma fa uso di variabili di tipo numerico

lit di tipo int, euro e totalEuro di tipo doubleLe variabili sono spazi di memoria, identificati da un identificatore (nome), che possono conservare valori di un determinato tipoCiascuna variabile deve essere definita, indicandone il tipo ed il nomeUna variabile può contenere soltanto valori del suo stesso tipoNella definizione di una variabile, è possibile assegnare un valore iniziale

int lit;

int lit = 15000;

Page 115: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

115

L’uso delle variabiliIl programma poteva risolvere lo stesso problema anche senza fare uso di variabili

ma sarebbe stato molto meno comprensibile e modificabile con difficoltà

public class Coins2{ public static void main(String[] args){ System.out.print("Valore totale in euro ");

System.out.println(2.35 + 15000 / 1936.27);}

}

Page 116: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

116

I nomi delle variabiliLa scelta dei nomi per le variabili è molto importante, ed è bene scegliere nomi che descrivano adeguatamente la funzione della variabileIn Java, un nome (di variabile, di metodo, di classe…) può essere composto da lettere, da numeri e dal carattere di sottolineatura, ma

deve iniziare con una lettera (anche _ va bene)non può essere una parola chiave del linguaggionon può contenere spazi

Le lettere maiuscole sono diverse dalle minuscole! Ma è buona norma non usare nello stesso programma nomi di variabili che differiscano soltanto per una maiuscola

Page 117: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

117

Definizione di variabiliSintassi:

Scopo: definire la nuova variabile nomeVariabile, di tipo nomeTipo, ed eventualmente assegnarle il valore iniziale espressioneDi solito in Java si usano le seguenti convenzioni

i nomi di variabili e di metodi iniziano con una lettera minuscolai nomi di classi iniziano con una lettera maiuscolai nomi composti, in entrambi i casi, si ottengono attaccando le parole successive alla prima con la maiuscola

nomeTipo nomeVariabile;

nomeTipo nomeVariabile = espressione;

lit

MoveRectangletotalEuro

mainCoins1

println

Page 118: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

118

Lezione VVe 6 Ott. 2006

Linguaggio javaAssegnazioni

Page 119: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

119

L’uso delle variabiliAbbiamo visto come i programmi usino le variabili per memorizzare i valori da elaborare e i risultati dell’elaborazioneLe variabili sono posizioni in memoria che possono conservare valori di un determinato tipoIl valore memorizzato in una variabile può essere modificato, non soltanto inizializzato…Il cambiamento del valore di una variabile si ottiene con un enunciato di assegnazione

Page 120: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

120

L’uso delle variabilipublic class Coins2{ public static void main(String[] args)

{ int lit = 15000; // lire italianedouble euro = 2.35; // eurodouble dollars = 3.05; // dollari// calcola il valore totale// sommando successivamente i contributidouble totalEuro = lit / 1936.27;totalEuro = totalEuro + euro;totalEuro = totalEuro + dollars * 0.93;System.out.print("Valore totale in euro ");System.out.println(totalEuro);

}}

Page 121: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

121

In questo caso il valore della variabile totalEurocambia durante l’esecuzione del programma

per prima cosa la variabile viene inizializzatacontestualmente alla sua definizione

poi la variabile viene incrementata, due volte

mediante enunciati di assegnazione

L’uso delle variabili

double totalEuro = lit / 1936.27;

totalEuro = totalEuro + euro;totalEuro = totalEuro + dollars * 0.93;

Page 122: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

122

Analizziamo l’enunciato di assegnazione

Cosa significa? Non certo che totalEuro è ugualea se stessa più qualcos’altro…L’enunciato di assegnazione significa Calcola il valore dell’espressione a destra del

segno = e scrivi il risultato nella posizione di memoria assegnata alla variabile indicata a sinistra del segno =

L’assegnazione

totalEuro = totalEuro + euro;

Page 123: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

123

L’assegnazione

euro

totalEuro

2.35

7.746853486342298

totalEuro + euro

10.096853486342297

LEGGI

LEGGI

SCRIVI

CALCOLA

Page 124: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

124

Assegnazione o definizione?Attenzione a non confondere la definizione di una variabile con un enunciato di assegnazione!

La definizione di una variabile inizia specificando il tipodella variabile, l’assegnazione noUna variabile può essere definita una volta sola in una sezione di codice, mentre le si può assegnare un valore molte volteIl compilatore segnala come errore il tentativo di definire una variabile una seconda volta

double totalEuro = lit / 1936.27;totalEuro = totalEuro + euro;

double euro = 2;double euro = euro + 3;

euro is already defined

Page 125: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

125

AssegnazioneSintassi:

Scopo: assegnare il nuovo valore espressione alla variabile nomeVariabileNota: purtroppo Java (come C e C++) utilizza il segno = per indicare l’assegnazione, creando confusione con l’operatore di uguaglianza (che vedremo essere un doppio segno =, cioè ==); altri linguaggi usano simboli diversi per l’assegnazione (ad esempio, il linguaggio Pascal usa :=)

nomeVariabile = espressione;

Page 126: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

126

Costanti

Page 127: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

127

L’uso delle costantiUn programma per il cambio di valuta

Chi legge il programma potrebbe legittimamente chiedersi quale sia il significato del “numero magico” 0.84 usato nel programma per convertire i dollari in euro...

public class Convert1{

public static void main(String[] args){

double dollars = 2.35;double euro = dollars * 0.84;

}}

Page 128: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

128

L’uso delle costantiCosì come si usano nomi simbolici descrittivi per le variabili, è opportuno assegnare nomi simbolicianche alle costanti utilizzate nei programmi

Un primo vantaggio molto importante aumenta la leggibilità

public class Convert2{ public static void main(String[] args)

{final double EURO_PER_DOLLAR = 0.84;double dollars = 2.35;double euro = dollars * EURO_PER_DOLLAR;

}}

Page 129: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

129

L’uso delle costantiUn altro vantaggio: se il valore della costante deve cambiare (nel nostro caso, perché varia il tasso di cambio euro/dollaro), la modifica va fatta in un solo punto del codice!

public class Convert3{

public static void main(String[] args){ final double EURO_PER_DOLLAR = 0.84;

double dollars1 = 2.35;double euro1 = dollars1 * EURO_PER_DOLLAR;double dollars2 = 3.45;double euro2 = dollars2 * EURO_PER_DOLLAR;

}}

Page 130: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

130

Definizione di costanteSintassi:

Scopo: definire la costante NOME_COSTANTE di tipo nomeTipo, assegnandole il valore espressione, che non potrà più essere modificatoNota: il compilatore segnala come errore semantico il tentativo di assegnare un nuovo valore a una costante, dopo la sua inizializzazioneDi solito in Java si usa la seguente convenzione

i nomi di costanti sono formati da lettere maiuscole• i nomi composti si ottengono attaccando le parole

successive alla prima con un carattere di sottolineatura

final nomeTipo NOME_COSTANTE = espressione;

Page 131: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

131

Rappresentazionedell’Informazione

(Horstmann appendice H)

Page 132: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

132

Rappresentazione dell’InformazioneL’informazione che l’uomo elabora è varia:

testi, numeri, immagini, suoni

Per memorizzare ed elaborare queste informazioni in un sistema informatico (computer) è necessario definire una codifica che consenta di esprimerle in formato adatto all’elaboratoreVediamo come si codifica l’informazione relativa a:

numeritestiimmagini

Page 133: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

133

Notazione posizionale in base decimaleI numeri naturali sono definiti dal seguente insieme

I numeri naturali che siamo abituati a utilizzare sono espressi nella notazione posizionale in base decimale

base decimale: usiamo dieci cifre diverse (da 0 a 9)notazione posizionale: cifre uguali in posizioni diverse hanno significato diverso (si dice anche che hanno peso diverso, cioè pesano diversamente nella determinazione del valore del numero espresso)

il peso di una cifra è uguale alla base del sistema di numerazione (10, in questo caso), elevata alla potenza uguale alla posizione della cifra nel numero, posizione che si incrementa da destra a sinistra a partire da 0

{ },...2,1,0=N

434 = 4·102 + 3·101 + 4·100

Page 134: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

134

Notazione posizionale in base decimalein generale con n cifre

Anche i numeri razionali (frazioni) si possono esprimere con notazione posizionale in base decimalela parte frazionaria, a destra del simbolo separatore, si valuta con potenze negative

4,34 = 4·100 + 3·10-1 + 4·10-2

{ }1,...,1,0

9,...,1,0,10...1010... 00

22

11021

−=∈+++= −

−−

−−−

nkaaaaaaa k

nn

nnnn

Page 135: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

135

Numeri Naturali in Notazione BinariaI computer usano invece numeri binari, cioè numeri rappresentati con notazione posizionale in base binaria

la base binaria usa solo due cifre diverse, 0 e 1la conversione da base binaria a decimale è semplice

I numeri binari sono più facili da manipolare per i sistemi elettronici, perché è meno complicato costruire circuiti logici che distinguono tra due stati (“acceso” e “spento”), piuttosto che fra dieci livelli diversi di tensione

11012 = (1·23 + 1·22 + 0·21 + 1·20)10 = 13101,1012 = (1·20 + 1·2-1 + 0·2-2 + 1·2-3)10 = 1,62510

base 2base 10

Page 136: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

136

La conversione di un numero da base decimale a base binaria è, invece, più complessaInnanzitutto, la parte intera del numero va elaborata indipendentemente dalla eventuale parte frazionaria

la parte intera del numero decimale viene convertita nella parte intera del numero binariola parte frazionaria del numero decimale viene convertita nella parte frazionaria del numero binariola posizione del punto separatore rimane invariata

Numeri naturali in notazione binaria

Page 137: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

137

Per convertire la sola parte intera, si divide il numero per 2, eliminando l’eventuale resto e continuando a dividere per 2 il quoziente ottenuto fino a quando non si ottiene quoziente uguale a 0Il numero binario si ottiene scrivendo la serie dei restidelle divisioni, iniziando dall’ultimo resto ottenutoAttenzione: non fermarsi quando si ottiene quoziente 1, ma proseguire fino a 0

100 / 2 = 50 resto 050 / 2 = 25 resto 025 / 2 = 12 resto 112 / 2 = 6 resto 06 / 2 = 3 resto 03 / 2 = 1 resto 11 / 2 = 0 resto 1

10010 = 11001002

Numeri naturali in notazione binaria

Page 138: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

138

Numeri razionali binari in notazione a virgola fissa

Per convertire la sola parte frazionaria, si moltiplica il numero per 2, sottraendo 1 dal prodotto se è maggiore di 1 e continuando a moltiplicare per 2 il risultato così ottenuto fino a quando non si ottiene un risultato uguale a 0 oppure un risultato già ottenuto in precedenza

Il numero binario si ottiene scrivendo la serie delle parti intere dei prodottiottenuti, iniziando dal primoSe si ottiene un risultato già ottenuto in precedenza, il numero sarà periodico, anche se non lo era in base decimale

0,35 · 2 = 0,70,7 · 2 = 1,40,4 · 2 = 0,80,8 · 2 = 1,60,6 · 2 = 1,20,2 · 2 = 0,4

0,3510 = 0,0101102

Page 139: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

139

Numeri Naturali

Con 8 cifre binarie (o come si dice 8 bit) in binario si possono rappresentare 28 disposizioni, pari a 256 numeri diversi (disposizione con ripetizione di due simboli ):

010 = 0000 00002

110 = 0000 00012

210 = 0000 00102

310 = 0000 00112

410 = 0000 01002

...25410 = 1111 11102

25510 = 1111 11112=

Con n bit si rappresentano 2n

numeri interi- 28 => 256 numeri- 216 => 65 536 numeri- 232 => 4 294 967 296 numeri

01234567 22222222 +++++++

Page 140: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

140

Numeri Interi Binariin Formato Modulo e Segno

Si puo’ usare un bit per esprimere l’informazione del segno+ 12710 = 0|11111112+ 12610 = 0|11111102... = ...+ 110 = 00000012+ 010 = 00000002 DUE RAPPRESENTAZIONI- 010 = 10000002 DELLO ZERO- 110 = 10000012

... = ...- 12610 = 111111102- 12710 = 111111112

In pratica questa rappresentazione non viene usata

Bit di segno +(bit piu’ significativo)

Bit di segno -(bit piu’ significativo)

{ },...2,1,0,1,2..., ++−−=Z

Page 141: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

141

In complemento a due la sequenza di n cifre binariean-1an-2 ...a1 a0 significa -an-1 2n-1 + an-2 2n-2 +...+ a1 21 + a0 20

+ 12710 = 011111112+ 12610 = 011111102... = ...+ 110 = 000000012

010 = 000000002

- 110 = 111111112... = .- 12710 = 100000012- 12810 = 100000002

Numeri Interiin Formato complemento a due

0 quando il numero è non negativo

1 quando il numero è negativo

Rappresentazione unica dello zero

Con n = 8 bit si rappresentano numeri da –128 a +127Con n bit (cifre binarie) si rappresentano numeri da -2n-1 a +2n-1-1

Il bit piu’ significativo indicaancora il segno

Page 142: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

142

Operazioni in Complemento a dueSomma algebrica

Somma con le regole della somma in colonna0 + 0 = 0 0 + 1 = 1 + 0 = 1 1 + 1 = 0 con riporto di 1

Esempi con rappresentazione a 8 bit0000 0101 + +5 + 0000 0101 + +5 +0000 0010 +2 1111 1110 -2 0000 0111 +7 1|0000 0011 +3

Un riporto a sinistra della cifra piu’ significativa puo’ essere ignorato a patto che si ottenga come risultato un numero che puo’ essere rappresentato con il numero di bit a disposizione

Con rappresentazione a 8 bit0111 1111 +127+ 1000 0000 -128

0000 0001 1 1111 1111 -11000 0000 -128!! 1|0111 1111 +127!!

11111

Esempi di Errore di Overflow (trabocco)

Page 143: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

143

Regola per l’errore di OverflowErrore di Overflow: quando si ha superamento dei limiti di rappresentazione con i bit a disposizioneAnalizzando la due cifre piu’ significative del risultato si puo’ determinare se e’ avvenuta una condizione di overflowASSENZA DI OVERFLOW

Nessun riporto nelle due cifre piu’ significativeRiporto in entrambe le cifre piu’ significative

PRESENZA DI OVERFLOWRiporto in una sola delle due cifre piu’ significative

In un numero si dicono cifre più significative quelle cheoccupano le posizioni più a sinistra, meno significativequelle che occupano le posizioni più a destra

Es. Nel numero 102, 1 e 2 sono le cifre è più e meno significative, rispettivamente.

Page 144: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

144

InversioneLa rappresentazione in complemento a due dei numeri interi e’ adottata in tutti i computer per la semplicità della realizzazione della procedura di somma algebrica.Inverso di un numero (Cambio segno)

+7 -700000111 11111001

Complemento a 1 11111000 00000110Incremento di 1 00000001 00000001- 11111001 00000111

-7 +7

Complemento a 1: 0 diventa 1, 1 diventa 0

Page 145: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

145

Rappresentazione EsadecimaleE’ la rappresentazione in base 16

Si usano 16 cifre: (0,1,..., 9, A, B, C, D, E, F)A = 1010, B = 1110, C = 1210, D = 1310, E = 1410, F =1510

Viene usata dall’uomo per rappresentare numeri naturali (senza segno) binari o sequenze di bit in modo piùcompattoPer convertire un numero binario in esadecimale si raggruppano i bit a gruppi di quattro partendo da destra verso sinistraEsempio a 8 bit (byte)

011111112=> 0111 | 11112

=> 7 F16

Esempio a 32 bit: 1111000110101110001001111000010121111|0001|1010|1110|0010|0111|1000|0101

F| 1| A| E| 2| 7| 8| 5F1AE 278516

Page 146: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

146

Conversioni EsadecimaliPer convertire un numero da esadecimale a binario si convertono le sue singole cifre:

Per convertire un numero da esadecimale a decimale o viceversa si applica la definizione di notazione posizionale in base 16

Per convertire da decimale a esadecimale si puo’ anche convertire in base 2 e poi da base 2 a base 16

100010 / 16 = 6210 resto 86210 / 16 = 310 resto E (1410)310 / 16 = 010 resto 3

100010 = 3E816

3F16 = 3 x 161 + 15 x 160 = 6310

100010= 11111010002= 0011 1110 10002= 3E816

3F16 = 0011 111123 F

Page 147: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

147

Numeri Razionali e RealiI numeri reali devono essere rappresentati necessariamente in modo approssimatoInfatti con n bit possiamo rappresentare 2n numeri, mentre sappiamo che in ogni intervallo reale ci sono infiniti numeri realiSi utilizza una notazione a mantissa ed esponente, come nel calcolo scientifico:

1024.3 viene rappresentato come 1.0243*103

1.0243 è la mantissa3 è l’esponente

Nella rappresentazione binaria dei numeri reali la mantissa e l’esponente sono espressi in binarioLa base è 2 anziché 10

Page 148: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

148

Numeri RealiIl motivo della base 2 e’ che e’ facile dividere e moltiplicare per 2 i numeri binari, semplicemente spostando a sinistra o a destra la posizione della virgola (virgola mobile)

1101 = 1.101*23

0.0010 = 1.0*2-3

In passato sono stati usati vari formati per rappresentare i numeri realiUna convenzione si e’ imposta sulle altre

Standard IEEE 754

Page 149: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

149

Standard IEEE 754Due formati: a 32 e 64 bit (singola e doppia precisione)Descriviamo il formato a 32 bit (singola precisione)

|S|EEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM||1| 8bit | 23bit || 32 bit |

Il numero viene normalizzato in modo che il bit piùsignificativo della mantissa si trovi immediatamente a sinistra della virgola

1011.11 viene normalizzato in 1.01111*23

S un bit di segno della mantissa (bit piu’ significativo)

E 8 bit per esprimere l’esponente

M 23 bit per esprimere la mantissa

Page 150: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

150

Standard IEEE754 singola precisioneEffettuata la normalizzazione si memorizza

Il segno della mantissa ( S )La parte frazionaria della mantissa (M...M); la parte intera è sempre uguale a 1 e quindi non si memorizza!L’esponente in eccesso 127 ovvero il numero viene incrementato di 127 prima di essere convertito in binario

• quindi si rappresentano i numeri tra –127 e + 128Rappresentazione dello zero:

Il numero con esponente –127 e mantissa tutta a zero viene usato per rappresentare lo 0Zero: 0 00000000 00000000000000000000000

L’esponente +128 viene usato per rappresentare NaN (Nota Number) simbolo speciale per indicare condizioni d’errore: ad esempio il risultato dell’operazione 0 / 0

NaN: 0 11111111 00000000000000000000000

Page 151: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

151

Standard IEEE754 singola precisioneIl numero più piccolo positivo rappresentabile è

1.000000000000000000000002*2-126 ~ 1.8 * 10-38

Il numero più grande rappresentabile è:1.11111111111111111111111*2+127 ~ 3.4 * 10+38

La distanza fra due numeri reali successivi rappresentabili in questo formato dipende dal valore dell’esponente, infatti i numeri più vicini differiranno per il valore del bit meno significativo della mantissa e perciò la loro distanza sarà

∆ = 2-23* 2E dove E e’ il valore dell’esponente

Page 152: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

152

Ad esempio si consideri il numero binarioa = 1.00000000000000000000000*25 = 25 = 3210

Il numero successivo rappresentabile e’:b = 1.00000000000000000000001*25 = (1+ 2-23)*25

La distanza fra i due numeri:δ = b – a = 2-23 25 = 2-18

La distanza dei numeri rappresentabili cresce al crescere del loro valore assoluto (ovvero la densitàdei numeri rappresentabili diminuisce)Di questi fatto si deve tener conto quando si sommano numeri reali in questo formato

Standard IEEE754 singola precisione

Page 153: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

153

Densità dei numeri rappresentabili in virgola mobile

Esempio in formato IEEE754 Singola Precisione (mantissa a 23 bit)

0

δ1 = 12-23 * 2e

e = 23

δ2 = 162-23 * 2e = 16

e = 27

(1.0 + 2 -23)*223

8 388 609

1.0*223

8 388 608(1.0 + 2 -23)*227

1342177441.0*227

134217728

δ1 δ2

Page 154: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

154

Standard IEEE754Si consideri la somma 10.5 + 0.125Esprimiamo i numeri in binario e normalizziamo

10.510 = 1010.12 = 1.01012 * 23

0.12510 = 0.0012 = 1.0 * 2-3

Per eseguire la somma bisogna riportare entrambi i termini allo stesso esponente:

10.5 + 0.125 = 1.0101* 23 + 0.000001* 23 = 1.010101 * 23

Si osservi che se il numero di bit destinati alla mantissa fosse inferiore a 6, l’operazione darebbe per risultato

10.5 + 0.125 = 10.5 !!!!! (si perde l’ultimo bit!)

A causa della necessaria approssimazione introdotta dalla rappresentazione

Page 155: Lezione I Lu 2 Ott. 2006 Introduzioneluchetta/67/slides/bn1/Settimana1Bn1.pdf · Cos’è la programmazione? ... videoscrittura, publishing, grafica

155

Standard IEEE754 doppia precisione

E’ analogo al formato a singola precisione ma usa in totale 64 bit:

1 bit per il segno della mantissa11 bit per l’esponente espresso in eccesso +102352 bit per la mantissa (senza 1 della parte intera).

|S|EEEEEEEEEEE|MMMMMMMMMMMMMMMMMMMMMMM.. M|

|1| 11bit | 52bit || 64 bit |