Capitolo 1 - Home di homes.di.unimi.it

annuncio pubblicitario
Capitolo 1
Computer, algoritmi e
linguaggi
c 2005-2010 Pearson Education Italia
Capitolo 1 -
1 / 71
Informazioni sul corso
Sito del corso: pighizzini.di.unimi.it/programmazione/
Laboratorio: Prof. Carlo Mereghetti, inizio 16 ottobre
Esame: scritto + laboratorio + orale
Compitini: novembre, gennaio
Appelli: gennaio-febbraio, giugno-luglio, settembre
c 2005-2010 Pearson Education Italia
Capitolo 1 -
2 / 71
Esami – 1
Struttura dell’esame
1
L’esame di Programmazione consiste di una prova scritta, di una
prova di laboratorio e di un colloquio.
2
Nella prova scritta viene richiesta la soluzione di alcuni esercizi (sullo
stile di quelli presenti nel libro di testo e proposti nei compitini).
3
Nella prova di laboratorio viene richiesta la scrittura di codice che
soddisfi specifiche assegnate. Per partecipare alla prova di laboratorio
è necessario disporre di un account presso il SiLab.
4
Il colloquio verterà sui contenuti del corso. Oltre alla padronanza
degli argomenti, nella prova orale si verificherà la capacità di
esprimere correttamente e con termini appropriati i concetti appresi.
c 2005-2010 Pearson Education Italia
Capitolo 1 -
3 / 71
Esami – 2
Vincoli sull’ordine di svolgimento delle prove
1
La prova scritta e la prova di laboratorio possono essere sostenute in
un ordine qualsiasi e in appelli differenti. Tuttavia, visto che le due
prove riguardano, anche se da punti di vista diversi, gli stessi
contenuti, si suggerisce fortemente di sostenere le prove nello stesso
appello.
2
Si accede al colloquio dopo avere superato sia la prova scritta sia la
prova di laboratorio. Al termine del colloquio verrà formulata e
verbalizzata la valutazione finale dell’esame. Il colloquio può essere
sostenuto nello stesso appello delle altre prove, o in un appello
successivo, purché entro il limite massimo indicato sotto.
c 2005-2010 Pearson Education Italia
Capitolo 1 -
4 / 71
Esami – 3
Validità delle prove
1
L’esame deve essere completato entro l’ultimo appello previso per
l’anno accademico, cioè quello di settembre 2012. Dopo tale appello
eventuali parti d’esame superate saranno inderogabilmente annullate.
2
La partecipazione a una prova scritta annulla un’eventuale prova
scritta già superata (inclusa la prova superata mediante compitini).
3
La partecipazione a una prova di laboratorio annulla un’eventuale
prova di laboratorio già superata.
4
Il mancato superamento del colloquio implica l’annullamento della
prova scritta e dunque rende necessaria la sua ripetizione.
c 2005-2010 Pearson Education Italia
Capitolo 1 -
5 / 71
Esami – 4
Compitini
1
Sulla base dei risultati ottenuti nei compitini lo studente può essere
esonerato dalla prova scritta ed eventualmente dalla prova orale.
2
In caso di esonero dalla prova orale, il voto finale proposto sarà
comunicato dopo il superamento della prova di laboratorio.
3
È necessario che lo studente si presenti alla prova orale per la
verbalizzazione del risultato.
4
Lo studente ha comunque la facoltà di sostenere la prova orale.
c 2005-2010 Pearson Education Italia
Capitolo 1 -
6 / 71
Introduzione
1
2
3
4
Computer, algoritmi e programmi
Computer, algoritmi e programmi
Evoluzione della programmazione
Finalità del corso
Rappresentazione dell’informazione
Dal linguaggio macchina ai linguaggi ad alto livello
La macchina di Von Neumann
Componenti principali di un computer
I linguaggi ad alto livello
Java Virtual Machine (JVM)
Strumenti per la stesura dei programmi
La programmazione strutturata
Le strutture di controllo fondamentali
Variabili e assegnamenti
Sintassi e semantica
Grammatiche
Lessico del linguaggio Java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 7 / 71
Sommario: Computer, algoritmi e linguaggi
1
2
3
4
Computer, algoritmi e programmi
Computer, algoritmi e programmi
Evoluzione della programmazione
Finalità del corso
Rappresentazione dell’informazione
Dal linguaggio macchina ai linguaggi ad alto livello
La macchina di Von Neumann
Componenti principali di un computer
I linguaggi ad alto livello
Java Virtual Machine (JVM)
Strumenti per la stesura dei programmi
La programmazione strutturata
Le strutture di controllo fondamentali
Variabili e assegnamenti
Sintassi e semantica
Grammatiche
Lessico del linguaggio Java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 8 / 71
Computer e programmi
Programmazione
Codifica del procedimento risolutivo di un problema (algoritmo) in un
insieme di istruzioni (programma) destinate ad un esecutore (macchina)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71
Computer e programmi
Programmazione
Codifica del procedimento risolutivo di un problema (algoritmo) in un
insieme di istruzioni (programma) destinate ad un esecutore (macchina)
Problema dell’ordinamento (sorting)
Ordinare una sequenza di interi in modo crescente
21 5 9 10 13 2 6
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71
Computer e programmi
Programmazione
Codifica del procedimento risolutivo di un problema (algoritmo) in un
insieme di istruzioni (programma) destinate ad un esecutore (macchina)
Problema dell’ordinamento (sorting)
Ordinare una sequenza di interi in modo crescente
21 5 9 10 13 2 6
Possiamo risolvere il problema usando diversi algoritmi: mergesort,
bubblesort, quicksort
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71
Computer e programmi
Programmazione
Codifica del procedimento risolutivo di un problema (algoritmo) in un
insieme di istruzioni (programma) destinate ad un esecutore (macchina)
Problema dell’ordinamento (sorting)
Ordinare una sequenza di interi in modo crescente
21 5 9 10 13 2 6
Possiamo risolvere il problema usando diversi algoritmi: mergesort,
bubblesort, quicksort
Possiamo codificare l’algoritmo usando diversi linguaggi: c, visual
basic, java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71
Computer e programmi
Programmazione
Codifica del procedimento risolutivo di un problema (algoritmo) in un
insieme di istruzioni (programma) destinate ad un esecutore (macchina)
Problema dell’ordinamento (sorting)
Ordinare una sequenza di interi in modo crescente
21 5 9 10 13 2 6
Possiamo risolvere il problema usando diversi algoritmi: mergesort,
bubblesort, quicksort
Possiamo codificare l’algoritmo usando diversi linguaggi: c, visual
basic, java
Possiamo eseguire il programma su diversi processori: intel, amd,
motorola
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 9 / 71
Algoritmi
Algoritmo
Insieme ordinato di passi eseguibili (non manipolo oggetti infiniti) e non
ambigui che definiscono un processo terminante (no cicli infiniti).
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 10 / 71
Algoritmi
Algoritmo
Insieme ordinato di passi eseguibili (non manipolo oggetti infiniti) e non
ambigui che definiscono un processo terminante (no cicli infiniti).
La nozione di algoritmo precede quella di programmazione
Algoritmo di Euclide per calcolare il massimo comun divisore (300 AC)
Crivello di Eratostene per enumerare i numeri primi (250 AC)
Algoritmi per la moltiplicazione, divisione, estrazione di radice
quadrata. . .
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 10 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
altrimenti
prosegui con il passo successivo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
altrimenti
prosegui con il passo successivo
3. Il massimo comun divisore è uguale al valore attuale di y
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
altrimenti
prosegui con il passo successivo
3. Il massimo comun divisore è uguale al valore attuale di y
L’ intelligenza necessaria per trovare la soluzione del problema è tutta
codificata nell’algoritmo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri interi x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
altrimenti
prosegui con il passo successivo
3. Il massimo comun divisore è uguale al valore attuale di y
L’ intelligenza necessaria per trovare la soluzione del problema è tutta
codificata nell’algoritmo
Chiunque sappia comprendere ed eseguire le operazioni che
costituiscono l’algoritmo di Euclide, può calcolare l’MCD
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 11 / 71
Un esempio negativo
1. Crea un elenco di tutti i numeri primi
2. Ordina l’elenco in modo decrescente
3. Preleva il primo elemento dall’elenco risultante
È un algoritmo?
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 12 / 71
Un esempio negativo
1. Crea un elenco di tutti i numeri primi
2. Ordina l’elenco in modo decrescente
3. Preleva il primo elemento dall’elenco risultante
È un algoritmo?
Non lo è
La prima e la seconda istruzione non sono effettivamente eseguibili in
quanto richiedono la manipolazione di infiniti elementi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 12 / 71
Algoritmi e programmi
Programma
È la codifica di un algoritmo in un linguaggio che un esecutore è in grado
di eseguire su una data macchina senza bisogno di ulteriori spiegazioni
LOAD
LOAD
start DIV
MUL
LOAD
SUB
R1,
R2,
R1,
R1,
R2,
R2,
101
102
R2
R2
101
R1
c 2005-2010 Pearson Education Italia
LOAD
JZERO
STORE
STORE
JUMP
end LOAD
STORE
R1, 102
R2, end
R1, 101
R2, 102
start
R1, 102
R1, 103
Capitolo 1 - Computer, algoritmi e linguaggi 13 / 71
Evoluzione della programmazione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
1954 Nascita dei linguaggi ad alto livello e dei compilatori.
fortran (IBM)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
1954 Nascita dei linguaggi ad alto livello e dei compilatori.
fortran (IBM)
1958 Nascita dei linguaggi “multipiattaforma”. algol
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
1954 Nascita dei linguaggi ad alto livello e dei compilatori.
fortran (IBM)
1958 Nascita dei linguaggi “multipiattaforma”. algol
1970 Programmazione strutturata (Dijkstra). Blocchi, top-down,
no goto. Strutture di controllo: sequenza, selezione e ciclo.
Struttura → correttezza, manutebilità. pascal, ada
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
1954 Nascita dei linguaggi ad alto livello e dei compilatori.
fortran (IBM)
1958 Nascita dei linguaggi “multipiattaforma”. algol
1970 Programmazione strutturata (Dijkstra). Blocchi, top-down,
no goto. Strutture di controllo: sequenza, selezione e ciclo.
Struttura → correttezza, manutebilità. pascal, ada
1972 Programmazione ad oggetti. smalltalk
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione
anni ’40-’50 Programmi scritti direttamente nel linguaggio del processore
(linguaggio macchina). Difficili da scrivere e da modificare.
1954 Nascita dei linguaggi ad alto livello e dei compilatori.
fortran (IBM)
1958 Nascita dei linguaggi “multipiattaforma”. algol
1970 Programmazione strutturata (Dijkstra). Blocchi, top-down,
no goto. Strutture di controllo: sequenza, selezione e ciclo.
Struttura → correttezza, manutebilità. pascal, ada
1972 Programmazione ad oggetti. smalltalk
1991 java (Sun, acquistata da Oracle).
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 14 / 71
Evoluzione della programmazione (cont.)
Tendenza generale
Il linguaggio si astrae dalle caratteristiche della macchina
Programmazione strutturata → struttura nel codice
Programmazione ad oggetti → struttura nei dati
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 15 / 71
Evoluzione della programmazione (cont.)
Tendenza generale
Il linguaggio si astrae dalle caratteristiche della macchina
Programmazione strutturata → struttura nel codice
Programmazione ad oggetti → struttura nei dati
Programmazione ad oggetti
Idea di fondo: disegno il software attorno agli oggetti manipolati
piuttosto che attorno alle azioni eseguite sugli oggetti
Approccio giustificato perché si parte dal problema (dato) e non dalla
soluzione (algoritmo)
La rappresentazione dei dati (oggetto) è più stabile rispetto al codice
che implementa le operazioni su di esso
Posso usare oggetti semplici per costruire oggetti più complessi (riuso
del software)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 15 / 71
Finalità del corso
Acquisire le abilità necessarie per programmare usando linguaggi ad
oggetti
Non è un corso di Java: il linguaggio è uno strumento per
esemplificare i concetti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 16 / 71
Finalità del corso
Acquisire le abilità necessarie per programmare usando linguaggi ad
oggetti
Non è un corso di Java: il linguaggio è uno strumento per
esemplificare i concetti
Organizzazione del corso
Parte I: Combinazione di oggetti già esistenti (quali servono, come li
combino)
Parte II: Costruzione di classi di oggetti → costruire classi che
possono essere riusate per affrontare problemi diversi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 16 / 71
Rappresentazione dell’informazione
Nel computer, qualsiasi informazione deve esssere rappresentata in
forma digitale binaria come sequenza di bit
Bit (binary digit): una quantità astratta che può assumere soltanto
due valori distinti
Digitalizzazione: processo che traduce informazione in formato binario
(immagini, audio, video, testi, programmi)
In alcuni casi il processo di digitalizzazione comporta perdita di
informazione (data entry rispetto a campionamento)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 17 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
n=3
→
23 = 8
000 001 010 011 100 101 110 111
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
n=3
→
23 = 8
000 001 010 011 100 101 110 111
Alcuni tipi di codifiche
Caratteri alfanumerici ASCII: 8 bit per ogni carattere
(28 = 256 caratteri)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
n=3
→
23 = 8
000 001 010 011 100 101 110 111
Alcuni tipi di codifiche
Caratteri alfanumerici ASCII: 8 bit per ogni carattere
(28 = 256 caratteri)
Caratteri alfanumerici Unicode: 16 bit per ogni carattere
(216 = 65536 caratteri)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
n=3
→
23 = 8
000 001 010 011 100 101 110 111
Alcuni tipi di codifiche
Caratteri alfanumerici ASCII: 8 bit per ogni carattere
(28 = 256 caratteri)
Caratteri alfanumerici Unicode: 16 bit per ogni carattere
(216 = 65536 caratteri)
Codifica tipica numeri interi: 32 bit per ogni intero.
Rappresento il range {−231 , . . . , 0, . . . , 231 − 1}
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
Rappresentazione di numeri e caratteri
Con n bit posso rappresentare al più 2n interi distinti
n=3
→
23 = 8
000 001 010 011 100 101 110 111
Alcuni tipi di codifiche
Caratteri alfanumerici ASCII: 8 bit per ogni carattere
(28 = 256 caratteri)
Caratteri alfanumerici Unicode: 16 bit per ogni carattere
(216 = 65536 caratteri)
Codifica tipica numeri interi: 32 bit per ogni intero.
Rappresento il range {−231 , . . . , 0, . . . , 231 − 1}
Codifica tipica numeri decimali: 64 bit per ogni numero
x = m × 10e
53 bit per m e 11 bit per e
−6
Esempio: 0,000012 = 12 × 10
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 18 / 71
I multipli del bit
1 byte = 8 bit
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM
Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM
Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno
Petabyte 250 (circa 1015 ) byte. Un datacenter
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM
Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno
Petabyte 250 (circa 1015 ) byte. Un datacenter
Exabyte 260 (circa 1018 ) byte. Traffico mobile dati nel mondo al mese
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
I multipli del bit
1 byte = 8 bit
Kilobyte 210 (circa 103 ) byte. Una pagina web statica
Megabyte 220 (circa 106 ) byte. Una fotografia digitale
Gigabyte 230 (circa 109 ) byte. Un banco di memoria RAM
Terabyte 240 (circa 1012 ) byte. Un disco fisso esterno
Petabyte 250 (circa 1015 ) byte. Un datacenter
Exabyte 260 (circa 1018 ) byte. Traffico mobile dati nel mondo al mese
Zettabyte 270 (circa 1021 ) byte. Tutto il web
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 19 / 71
Sommario: Computer, algoritmi e linguaggi
1
2
3
4
Computer, algoritmi e programmi
Computer, algoritmi e programmi
Evoluzione della programmazione
Finalità del corso
Rappresentazione dell’informazione
Dal linguaggio macchina ai linguaggi ad alto livello
La macchina di Von Neumann
Componenti principali di un computer
I linguaggi ad alto livello
Java Virtual Machine (JVM)
Strumenti per la stesura dei programmi
La programmazione strutturata
Le strutture di controllo fondamentali
Variabili e assegnamenti
Sintassi e semantica
Grammatiche
Lessico del linguaggio Java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 20 / 71
Il Computer
Computer: macchina elettronica programmabile (lavatrice?)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71
Il Computer
Computer: macchina elettronica programmabile (lavatrice?)
Il computer è una macchina universale, ovvero può eseguire qualsiasi
algoritmo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71
Il Computer
Computer: macchina elettronica programmabile (lavatrice?)
Il computer è una macchina universale, ovvero può eseguire qualsiasi
algoritmo
Negli anni Trenta il
matematico inglese Alan
Turing caratterizza ciò che
può essere calcolato da un
algoritmo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71
Il Computer
Computer: macchina elettronica programmabile (lavatrice?)
Il computer è una macchina universale, ovvero può eseguire qualsiasi
algoritmo
Negli anni Trenta il
matematico inglese Alan
Turing caratterizza ciò che
può essere calcolato da un
algoritmo
Negli anni Quaranta il
matematico ungherese John
von Neumann definisce
l’architettura base di un
calcolatore universale
(stored-program computer )
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 21 / 71
La macchina di Von Neumann (1946)
I componenti fondamentali dell’hardware di un elaboratore sono:
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71
La macchina di Von Neumann (1946)
I componenti fondamentali dell’hardware di un elaboratore sono:
Memoria
Contiene il programma da eseguire e i dati da esso utilizzati.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71
La macchina di Von Neumann (1946)
I componenti fondamentali dell’hardware di un elaboratore sono:
Memoria
Contiene il programma da eseguire e i dati da esso utilizzati.
Processore
È l’esecutore del programma e opera ripetendo il ciclo
Decode
Fetch
Execute
c 2005-2010 Pearson Education Italia
1
Fetch: preleva la prossima istruzione
2
Decode: scomponi l’istruzione in
operatore e operandi
3
Execute: applica l’operatore agli
operandi
Capitolo 1 - Computer, algoritmi e linguaggi 22 / 71
Hardware
La parte fisica del computer
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71
Hardware
La parte fisica del computer
Processore o unità centrale (CPU)
Il dispositivo che esegue effettivamente l’operazione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71
Hardware
La parte fisica del computer
Processore o unità centrale (CPU)
Il dispositivo che esegue effettivamente l’operazione
Memoria centrale
Suddivisa in celle della stessa dimensione (p.es., 4 byte)
Ogni cella identificata da un indirizzo
Tempo di accesso costante (circa 10 nanosecondi = 10−8 secondi)
RAM: memoria volatile di lettura/scrittura; contiene i programmi in
esecuzione e parte dei loro dati
ROM: memoria permanente di sola lettura; contiene informazioni
necessarie all’avvio del computer (BIOS)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 23 / 71
Hardware (cont.)
Memoria di massa: Hard-disk, CD, DVD, chiavi USB
Tempo di accesso non costante (tranne per chiavi USB), tempo medio
di accesso di molto superiore a RAM
Informazione organizzata in files all’interno di un file-system
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71
Hardware (cont.)
Memoria di massa: Hard-disk, CD, DVD, chiavi USB
Tempo di accesso non costante (tranne per chiavi USB), tempo medio
di accesso di molto superiore a RAM
Informazione organizzata in files all’interno di un file-system
Periferiche
Video, tastiera, mouse, scheda rete, stampante, . . .
Permettono la comunicazione fra computer e mondo esterno
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71
Hardware (cont.)
Memoria di massa: Hard-disk, CD, DVD, chiavi USB
Tempo di accesso non costante (tranne per chiavi USB), tempo medio
di accesso di molto superiore a RAM
Informazione organizzata in files all’interno di un file-system
Periferiche
Video, tastiera, mouse, scheda rete, stampante, . . .
Permettono la comunicazione fra computer e mondo esterno
Bus: Circuiti di connessione fra componenti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 24 / 71
Software
L’insieme di tutti i programmi utilizzabili dal computer
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71
Software
L’insieme di tutti i programmi utilizzabili dal computer
Sistema operativo
Mette a disposizione e amministra le risorse del computer
Esecuzione comandi tramite shell o desktop
Accesso alle risorse (CPU, memoria e periferiche)
Condivisione ottimale delle risorse fra più processi utilizzatori
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71
Software
L’insieme di tutti i programmi utilizzabili dal computer
Sistema operativo
Mette a disposizione e amministra le risorse del computer
Esecuzione comandi tramite shell o desktop
Accesso alle risorse (CPU, memoria e periferiche)
Condivisione ottimale delle risorse fra più processi utilizzatori
Utility e SW di base
Consentono all’utente di effettuare delle attività di gestione
Copiatura e compressione file, sicurezza, sviluppo codice
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71
Software
L’insieme di tutti i programmi utilizzabili dal computer
Sistema operativo
Mette a disposizione e amministra le risorse del computer
Esecuzione comandi tramite shell o desktop
Accesso alle risorse (CPU, memoria e periferiche)
Condivisione ottimale delle risorse fra più processi utilizzatori
Utility e SW di base
Consentono all’utente di effettuare delle attività di gestione
Copiatura e compressione file, sicurezza, sviluppo codice
Programmi applicativi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 25 / 71
Linguaggio macchina e assembler
Ogni processore ha un proprio linguaggio macchina con un proprio
formato delle istruzioni
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71
Linguaggio macchina e assembler
Ogni processore ha un proprio linguaggio macchina con un proprio
formato delle istruzioni
Le istruzioni sono sequenze di bit che codificano:
l’operazione da eseguire
gli operandi su cui tale operazione deve essere eseguita
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71
Linguaggio macchina e assembler
Ogni processore ha un proprio linguaggio macchina con un proprio
formato delle istruzioni
Le istruzioni sono sequenze di bit che codificano:
l’operazione da eseguire
gli operandi su cui tale operazione deve essere eseguita
Gli operandi sono:
indirizzi di memoria RAM
registri del processore
costanti (p.es., 5)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71
Linguaggio macchina e assembler
Ogni processore ha un proprio linguaggio macchina con un proprio
formato delle istruzioni
Le istruzioni sono sequenze di bit che codificano:
l’operazione da eseguire
gli operandi su cui tale operazione deve essere eseguita
Gli operandi sono:
indirizzi di memoria RAM
registri del processore
costanti (p.es., 5)
Nota: Tutte le operazioni aritmetico-logiche vengono effettuate
soltanto su operandi contenuti in registri del processore
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71
Linguaggio macchina e assembler
Ogni processore ha un proprio linguaggio macchina con un proprio
formato delle istruzioni
Le istruzioni sono sequenze di bit che codificano:
l’operazione da eseguire
gli operandi su cui tale operazione deve essere eseguita
Gli operandi sono:
indirizzi di memoria RAM
registri del processore
costanti (p.es., 5)
Nota: Tutte le operazioni aritmetico-logiche vengono effettuate
soltanto su operandi contenuti in registri del processore
Il linguaggio assembler di un processore è la versione simbolica del
linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 26 / 71
Un assembler “giocattolo”
Istruzioni di trasferimento :
LOAD R, x
c 2005-2010 Pearson Education Italia
STORE R, y
...
Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71
Un assembler “giocattolo”
Istruzioni di trasferimento :
LOAD R, x
STORE R, y
...
Istruzioni aritmetico-logiche
ADD R1, R2
c 2005-2010 Pearson Education Italia
MUL R1, R2
...
Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71
Un assembler “giocattolo”
Istruzioni di trasferimento :
LOAD R, x
STORE R, y
...
Istruzioni aritmetico-logiche
ADD R1, R2
MUL R1, R2
...
Istruzioni di controllo e di salto
salto incondizionato
salto condizionato
JUMP alfa
...
alfa:...
c 2005-2010 Pearson Education Italia
JZERO R1, alfa
...
alfa:...
Capitolo 1 - Computer, algoritmi e linguaggi 27 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri x e y
(x ≥ y > 0)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 28 / 71
L’algoritmo di Euclide
Calcola il massimo comun divisore (MCD) fra due numeri x e y
(x ≥ y > 0)
1. Calcola il resto della divisione di x per y
2. Se il resto è diverso da zero,
ricomincia dal passo 1 utilizzando come x il valore attuale di y ,
e come y il valore del resto,
altrimenti
prosegui con il passo successivo
3. Il massimo comun divisore è uguale al valore attuale di y
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 28 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
La parte “se . . . allora” è chiaramente corretta. Verifichiamo la
correttezza della parte “altrimenti”
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
La parte “se . . . allora” è chiaramente corretta. Verifichiamo la
correttezza della parte “altrimenti”
Dato che x > y possiamo scrivere x = yk + q dove k e q sono due
interi positivi con q < y
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
La parte “se . . . allora” è chiaramente corretta. Verifichiamo la
correttezza della parte “altrimenti”
Dato che x > y possiamo scrivere x = yk + q dove k e q sono due
interi positivi con q < y
Sia g = MCD(x, y ). Allora q divide g , infatti
x
yk + q
yk
q
=
=
+
g
g
g
g
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
La parte “se . . . allora” è chiaramente corretta. Verifichiamo la
correttezza della parte “altrimenti”
Dato che x > y possiamo scrivere x = yk + q dove k e q sono due
interi positivi con q < y
Sia g = MCD(x, y ). Allora q divide g , infatti
x
yk + q
yk
q
=
=
+
g
g
g
g
Dato che (yk)/g e (yk)/g + q/g sono entrambi interi, anche q/g è
intero
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
Correttezza dell’algoritmo di Euclide
L’algoritmo di Euclide può essere riscritto come
Se x%y = 0 allora MCD(x,y) = y
altrimenti MCD(x,y) = MCD(y,x%y)
La parte “se . . . allora” è chiaramente corretta. Verifichiamo la
correttezza della parte “altrimenti”
Dato che x > y possiamo scrivere x = yk + q dove k e q sono due
interi positivi con q < y
Sia g = MCD(x, y ). Allora q divide g , infatti
x
yk + q
yk
q
=
=
+
g
g
g
g
Dato che (yk)/g e (yk)/g + q/g sono entrambi interi, anche q/g è
intero
Quindi g è anche il massimo comun divisore fra y e q = x%y
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 29 / 71
L’algoritmo di Euclide in assembler
LOAD
LOAD
start DIV
MUL
LOAD
SUB
JZERO
LOAD
STORE
STORE
JUMP
end
LOAD
STORE
R1, 101
R2, 102
R1, R2
R1, R2
R2, 101
R2, R1
R2, end
R1, 102
R1, 101
R2, 102
start
R1, 102
R1, 103
x%y = x − bx/y cy
c 2005-2010 Pearson Education Italia
R1 <- 101 (input x)
R2 <- 102 (input y)
R1 <- R1/R2 (divisione intera)
R1 <- R1*R2 (moltiplicazione)
R2 <- 101
R2 <- R2-R1 (R2 = resto div.)
IF R2=0 GOTO end
R1 <- 102
101 <- R1
102 <- R2
GOTO start
R1 <- 102
103 <- R1
Esempio:
8%3 = 8 − b8/3c3
Capitolo 1 - Computer, algoritmi e linguaggi 30 / 71
Svantaggi del linguaggio macchina
È necessario conoscere i dettagli dell’architettura del processore
utilizzato e il relativo linguaggio
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71
Svantaggi del linguaggio macchina
È necessario conoscere i dettagli dell’architettura del processore
utilizzato e il relativo linguaggio
Risulta impossibile trasportare i programmi da una macchina ad una
differente
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71
Svantaggi del linguaggio macchina
È necessario conoscere i dettagli dell’architettura del processore
utilizzato e il relativo linguaggio
Risulta impossibile trasportare i programmi da una macchina ad una
differente
Il programmatore si specializza nell’uso di “trucchi” legati alle
caratteristiche specifiche della macchina
I programmi risultano difficili da comprendere e da modificare.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71
Svantaggi del linguaggio macchina
È necessario conoscere i dettagli dell’architettura del processore
utilizzato e il relativo linguaggio
Risulta impossibile trasportare i programmi da una macchina ad una
differente
Il programmatore si specializza nell’uso di “trucchi” legati alle
caratteristiche specifiche della macchina
I programmi risultano difficili da comprendere e da modificare.
La struttura logica del programma è nascosta
Difficile comprendere il programma e correggerlo in presenza di errori
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 31 / 71
Richiamo
L’esecutore di un programma opera ripetendo il ciclo
Decode
Fetch
Execute
c 2005-2010 Pearson Education Italia
1
Fetch: preleva la prossima istruzione
2
Decode: scomponi l’istruzione in
operatore e operandi
3
Execute: applica l’operatore agli
operandi
Capitolo 1 - Computer, algoritmi e linguaggi 32 / 71
I linguaggi ad alto livello
Linguaggi di programmazione
Insiemi di regole per costruire sequenze di istruzioni (cioè programmi)
che possono essere direttamente eseguite da una macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71
I linguaggi ad alto livello
Linguaggi di programmazione
Insiemi di regole per costruire sequenze di istruzioni (cioè programmi)
che possono essere direttamente eseguite da una macchina
Macchina fisica
È il processore, cioè l’esecutore dei programmi in linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71
I linguaggi ad alto livello
Linguaggi di programmazione
Insiemi di regole per costruire sequenze di istruzioni (cioè programmi)
che possono essere direttamente eseguite da una macchina
Macchina fisica
È il processore, cioè l’esecutore dei programmi in linguaggio macchina
Macchina virtuale (per un dato linguaggio L)
È un programma (detto interprete) che svolge il ruolo di esecutore per
i programmi nel linguaggio L
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71
I linguaggi ad alto livello
Linguaggi di programmazione
Insiemi di regole per costruire sequenze di istruzioni (cioè programmi)
che possono essere direttamente eseguite da una macchina
Macchina fisica
È il processore, cioè l’esecutore dei programmi in linguaggio macchina
Macchina virtuale (per un dato linguaggio L)
È un programma (detto interprete) che svolge il ruolo di esecutore per
i programmi nel linguaggio L
Linguaggi ad alto livello
Linguaggi le cui istruzioni sono eseguibili da una macchina virtuale in
grado di effettuare operazioni più complesse rispetto alle operazioni
elementari dei processori reali
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 33 / 71
Compilatori e interpreti
Compilatore È un programma che traduce un programma del linguaggio L
in un programma equivalente nel linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71
Compilatori e interpreti
Compilatore È un programma che traduce un programma del linguaggio L
in un programma equivalente nel linguaggio macchina
Interprete È una macchina virtuale per un dato linguaggio. Opera
ripetendo il ciclo
1 Fetch: legge la prossima istruzione del programma
2 Decode: traduce l’istruzione in corrispondenti istruzioni
del linguaggio macchina
3 Execute: esegue le istruzioni del linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71
Compilatori e interpreti
Compilatore È un programma che traduce un programma del linguaggio L
in un programma equivalente nel linguaggio macchina
Interprete È una macchina virtuale per un dato linguaggio. Opera
ripetendo il ciclo
1 Fetch: legge la prossima istruzione del programma
2 Decode: traduce l’istruzione in corrispondenti istruzioni
del linguaggio macchina
3 Execute: esegue le istruzioni del linguaggio macchina
Nota
Un compilatore può anche tradurre un programma in un programma
equivalente in un linguaggio diverso dal linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 34 / 71
Interpreti
L’interprete “espande” ogni istruzione del linguaggio in una sequenza di
istruzioni in linguaggio macchina
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 35 / 71
Interpreti
L’interprete “espande” ogni istruzione del linguaggio in una sequenza di
istruzioni in linguaggio macchina
.
.
.
y <- x - (x/y)*y
.
.
.
c 2005-2010 Pearson Education Italia
LOAD R1 x
LOAD R2 y
DIV R1 R2
MUL R1 R2
LOAD R2 x
SUB R2 R1
STO R2 y
Capitolo 1 - Computer, algoritmi e linguaggi 35 / 71
Compilatori
Programma Pascal
Saluti.exe
0110010...
___________
_____
________
_______
_________
program Saluti;
_____________
_____
________
_______
_________
0110010...
Saluti
Compilatore Pascal per X
Macchina X
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 36 / 71
Portabilità del sorgente
Programma Pascal
Indipendente
dalla
piattaforma
program p (input,output);
var
x:integer;
...
Compilatore
per Windows
Compilatore
per Linux
Compilatore
per MacOs
Eseguibile
Eseguibile
Eseguibile
Windows
c 2005-2010 Pearson Education Italia
Linux
Dipendente
dalla
piattaforma
MacOS
Capitolo 1 - Computer, algoritmi e linguaggi 37 / 71
Java Virtual Machine (JVM)
Interprete
(java)
Saluti.java
_____________
_____
________
_______
_________
Compilatore
(javac)
Saluti
0110010...
Saluti.class
___________
_____
________
_______
_________
Il compilatore Java traduce il sorgente in un programma per il
linguaggio bytecode
La Java Virtual Machine è un interprete per il bytecode
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 38 / 71
Vantaggi: portabilità del bytecode
Programma Java
Indipendente
dalla
piattaforma
Compilatore
class Saluti{
...
}
bytecode
Interprete
per Windows
Interprete
per Linux
Interprete
per MacOs
Dipendente
dalla
piattaforma
Windows
c 2005-2010 Pearson Education Italia
Linux
MacOS
Capitolo 1 - Computer, algoritmi e linguaggi 39 / 71
Vantaggi: leggerezza del bytecode
Saluti.java
_____________
_____
________
_______
_________
Interprete
(java)
0110010...
Compilatore
(javac)
Network
Saluti
Saluti.class
___________
_____
________
_______
_________
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 40 / 71
Strumenti per la stesura dei programmi
errori di
compilazione
programma
sorgente
compilatore
programma
oggetto
errori
del linker
linker
eseguibile
librerie
input
output
output ed
errori di
esecuzione
c 2005-2010 Pearson Education Italia
modifiche
esecutore
Capitolo 1 - Computer, algoritmi e linguaggi 41 / 71
Sommario: Computer, algoritmi e linguaggi
1
2
3
4
Computer, algoritmi e programmi
Computer, algoritmi e programmi
Evoluzione della programmazione
Finalità del corso
Rappresentazione dell’informazione
Dal linguaggio macchina ai linguaggi ad alto livello
La macchina di Von Neumann
Componenti principali di un computer
I linguaggi ad alto livello
Java Virtual Machine (JVM)
Strumenti per la stesura dei programmi
La programmazione strutturata
Le strutture di controllo fondamentali
Variabili e assegnamenti
Sintassi e semantica
Grammatiche
Lessico del linguaggio Java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 42 / 71
Programmazione strutturata
Metodologia di programmazione introdotta agli inizi degli anni settanta.
La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è
controllata da tre strutture di controllo fondamentali:
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71
Programmazione strutturata
Metodologia di programmazione introdotta agli inizi degli anni settanta.
La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è
controllata da tre strutture di controllo fondamentali:
Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono
scritte
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71
Programmazione strutturata
Metodologia di programmazione introdotta agli inizi degli anni settanta.
La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è
controllata da tre strutture di controllo fondamentali:
Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono
scritte
Selezione permette di scegliere l’esecuzione di un blocco di istruzioni
tra due possibili in base al valore di una condizione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71
Programmazione strutturata
Metodologia di programmazione introdotta agli inizi degli anni settanta.
La sequenza di esecuzione delle istruzioni (flusso di esecuzione) è
controllata da tre strutture di controllo fondamentali:
Sequenza permette di eseguire le istruzioni secondo l’ordine in cui sono
scritte
Selezione permette di scegliere l’esecuzione di un blocco di istruzioni
tra due possibili in base al valore di una condizione
Iterazione permette di ripetere l’esecuzione di una o più istruzioni in
base al valore di una condizione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 43 / 71
Programmazione strutturata
L’impiego di queste strutture migliora la leggibilità dei programmi
Ogni struttura di controllo ha un solo punto di ingresso e un solo
punto d’uscita
Il flusso di esecuzione è evidente dalla struttura del codice
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71
Programmazione strutturata
L’impiego di queste strutture migliora la leggibilità dei programmi
Ogni struttura di controllo ha un solo punto di ingresso e un solo
punto d’uscita
Il flusso di esecuzione è evidente dalla struttura del codice
Teorema di Jacopini-Böhm (1966)
Le tre strutture di controllo fondamentali (sequenza, iterazione e
selezione) sono sufficienti per implementare qualunque algoritmo.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71
Programmazione strutturata
L’impiego di queste strutture migliora la leggibilità dei programmi
Ogni struttura di controllo ha un solo punto di ingresso e un solo
punto d’uscita
Il flusso di esecuzione è evidente dalla struttura del codice
Teorema di Jacopini-Böhm (1966)
Le tre strutture di controllo fondamentali (sequenza, iterazione e
selezione) sono sufficienti per implementare qualunque algoritmo.
Quindi una macchina virtuale per un linguaggio che comprende le tre
strutture di controllo fondamentali è un computer universale.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71
Programmazione strutturata
L’impiego di queste strutture migliora la leggibilità dei programmi
Ogni struttura di controllo ha un solo punto di ingresso e un solo
punto d’uscita
Il flusso di esecuzione è evidente dalla struttura del codice
Teorema di Jacopini-Böhm (1966)
Le tre strutture di controllo fondamentali (sequenza, iterazione e
selezione) sono sufficienti per implementare qualunque algoritmo.
Quindi una macchina virtuale per un linguaggio che comprende le tre
strutture di controllo fondamentali è un computer universale.
Descriviamo le strutture di controllo utilizzando uno pseudo-codice
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 44 / 71
Sequenza
Le istruzioni sono eseguite nello stesso ordine in cui compaiono nel
programma, cioè secondo la sequenza in cui sono scritte.
Example: Somma di due numeri
leggi i numeri a, b
calcola a + b
scrivi il risultato
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 45 / 71
Selezione
Sintassi
SE condizione
ALLORA
blocco1
ALTRIMENTI
blocco2
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71
Selezione
Sintassi
SE condizione
ALLORA
blocco1
ALTRIMENTI
blocco2
FINESE
Esecuzione
(1) Viene valutata condizione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71
Selezione
Sintassi
SE condizione
ALLORA
blocco1
ALTRIMENTI
blocco2
FINESE
Esecuzione
(1) Viene valutata condizione
se è vera vengono eseguite le istruzioni del blocco1
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71
Selezione
Sintassi
SE condizione
ALLORA
blocco1
ALTRIMENTI
blocco2
FINESE
Esecuzione
(1) Viene valutata condizione
se è vera vengono eseguite le istruzioni del blocco1
se è falsa vengono eseguite quelle del blocco2
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71
Selezione
Sintassi
SE condizione
ALLORA
blocco1
ALTRIMENTI
blocco2
FINESE
Esecuzione
(1) Viene valutata condizione
se è vera vengono eseguite le istruzioni del blocco1
se è falsa vengono eseguite quelle del blocco2
(2) L’esecuzione procede con l’istruzione che segue immediatamente la
fine del costrutto di selezione (FINESE)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 46 / 71
Selezione (senza ALTRIMENTI)
Sintassi
SE condizione
ALLORA
blocco1
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71
Selezione (senza ALTRIMENTI)
Sintassi
SE condizione
ALLORA
blocco1
FINESE
Esecuzione
Viene valutata condizione:
se è vera vengono eseguite le istruzioni del blocco1
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71
Selezione (senza ALTRIMENTI)
Sintassi
SE condizione
ALLORA
blocco1
FINESE
Esecuzione
Viene valutata condizione:
se è vera vengono eseguite le istruzioni del blocco1
quindi l’esecuzione riprende dalla prima istruzione che segue
il costrutto di selezione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71
Selezione (senza ALTRIMENTI)
Sintassi
SE condizione
ALLORA
blocco1
FINESE
Esecuzione
Viene valutata condizione:
se è vera vengono eseguite le istruzioni del blocco1
quindi l’esecuzione riprende dalla prima istruzione che segue
il costrutto di selezione
se è falsa l’esecuzione prosegue direttamente dalla prima istruzione
che segue il costrutto di selezione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 47 / 71
Esempio
Calcolo della divisione tra due numeri controllando che il divisore sia
diverso da zero:
leggi il dividendo e il divisore
SE il divisore è diverso da zero
ALLORA
calcola dividendo/divisore
scrivi il risultato
ALTRIMENTI
scrivi “errore: divisione per zero”
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 48 / 71
Esempio
Calcolo della divisione tra due numeri controllando che il divisore sia
diverso da zero:
leggi il dividendo e il divisore
SE il divisore è diverso da zero
ALLORA
calcola dividendo/divisore
scrivi il risultato
ALTRIMENTI
scrivi “errore: divisione per zero”
FINESE
Le strutture di controllo possono essere innestate
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 48 / 71
Esempio: calcolo delle radici di ax 2 + bx + c = 0
leggi i valori dei parametri a, b, c
calcola il discriminante ∆ = b 2 − 4ac
SE il discriminante è minore di zero
ALLORA
scrivi “nessuna soluzione reale”
ALTRIMENTI
SE il discriminante è uguale a zero
ALLORA
calcola −b
2a
scrivi “Due soluzioni coincidenti: ”, il risultato
ALTRIMENTI
scrivi “Due √
soluzioni: ”,
∆
calcola −b−
e scrivi il risultato
2a√
−b+ ∆
calcola
e scrivi il risultato
2a
FINESE
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 49 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
Esecuzione
(1) Viene eseguito blocco
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
Esecuzione
(1) Viene eseguito blocco
(2) Viene valutata condizione:
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
Esecuzione
(1) Viene eseguito blocco
(2) Viene valutata condizione:
se è vera si ritorna al punto (1)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
Esecuzione
(1) Viene eseguito blocco
(2) Viene valutata condizione:
se è vera si ritorna al punto (1)
se è falsa si prosegue con la prima istruzione scritta dopo il
costrutto iterativo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Iterazione (schema 1)
Sintassi
ESEGUI
blocco
QUANDO condizione
Esecuzione
(1) Viene eseguito blocco
(2) Viene valutata condizione:
se è vera si ritorna al punto (1)
se è falsa si prosegue con la prima istruzione scritta dopo il
costrutto iterativo
il blocco è eseguito almeno una volta
termina quando la condizione diventa falsa
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 50 / 71
Esempio: somma dei primi 100 numeri interi
P
Calcolo iterativo, senza utilizzare la formula di Gauss ( ni=1 i =
n(n+1)
).
2
poni il valore della somma a zero
inizia a considerare il numero 1
ESEGUI
aggiungi alla somma il numero che stai considerando
considera il numero successivo
QUANDO il numero che stai considerando non supera 100
scrivi la somma
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 51 / 71
Iterazione (schema 2)
Sintassi
QUANDO condizione ESEGUI
blocco
RIPETI
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71
Iterazione (schema 2)
Sintassi
QUANDO condizione ESEGUI
blocco
RIPETI
Esecuzione
(1) Viene valutata la condizione:
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71
Iterazione (schema 2)
Sintassi
QUANDO condizione ESEGUI
blocco
RIPETI
Esecuzione
(1) Viene valutata la condizione:
se è vera, viene eseguito blocco
quindi si torna al punto (1)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71
Iterazione (schema 2)
Sintassi
QUANDO condizione ESEGUI
blocco
RIPETI
Esecuzione
(1) Viene valutata la condizione:
se è vera, viene eseguito blocco
quindi si torna al punto (1)
se è falsa, l’esecuzione riprende dalla prima l’istruzione che segue il
costrutto iterativo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71
Iterazione (schema 2)
Sintassi
QUANDO condizione ESEGUI
blocco
RIPETI
Esecuzione
(1) Viene valutata la condizione:
se è vera, viene eseguito blocco
quindi si torna al punto (1)
se è falsa, l’esecuzione riprende dalla prima l’istruzione che segue il
costrutto iterativo
il blocco può essere eseguito anche zero volte
termina quando la condizione diventa falsa
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 52 / 71
Simulazione
Il comportamento dello schema QUANDO...RIPETI può essere simulato
combinando ESEGUI...QUANDO... e selezione:
SE condizione
ALLORA
ESEGUI
blocco
QUANDO condizione
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 53 / 71
Variabili e assegnamenti
Una variabile è un area di memoria che contiene un dato
Il nome di una variabile è detto identificatore
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71
Variabili e assegnamenti
Una variabile è un area di memoria che contiene un dato
Il nome di una variabile è detto identificatore
Istruzione di assegnamento
variabile ← espressione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71
Variabili e assegnamenti
Una variabile è un area di memoria che contiene un dato
Il nome di una variabile è detto identificatore
Istruzione di assegnamento
variabile ← espressione
Esecuzione
(1) Viene calcolato il valore dell’espressione scritta a destra del simbolo ←
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71
Variabili e assegnamenti
Una variabile è un area di memoria che contiene un dato
Il nome di una variabile è detto identificatore
Istruzione di assegnamento
variabile ← espressione
Esecuzione
(1) Viene calcolato il valore dell’espressione scritta a destra del simbolo ←
(2) Il risultato ottenuto è assegnato alla variabile (ovvero salvato nell’area
di memoria corrispondente) il cui nome è scritto a sinistra del simbolo
←, eliminando l’eventuale valore precedentemente contenuto.
Osservazione
Molti linguaggi, tra cui anche Java, utilizzano per l’assegnamento il
simbolo =, usato comunemente per indicare l’uguaglianza.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 54 / 71
Esempio
z
y
x
3
5
2
x←y + z
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71
Esempio
z
y
x
3
5
2
x←y + z
1
si valuta l’espressione y+z, recuperando i valori presenti in y e z e
facendone la somma
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71
Esempio
z
y
x
3
2
5
x←y + z
1
si valuta l’espressione y+z, recuperando i valori presenti in y e z e
facendone la somma
2
si pone il risultato nel contenitore di cui x è il nome dopo avere
eliminato il valore precedentemente presente
7
c 2005-2010 Pearson Education Italia
z
y
x
5
2
Capitolo 1 - Computer, algoritmi e linguaggi 55 / 71
Esempio
k
3
k←k + 1
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71
Esempio
k
3
k←k + 1
1
si valuta l’espressione k+1, recuperando il valore di k (3) e
sommandogli 1
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71
Esempio
k
3
k←k + 1
1
si valuta l’espressione k+1, recuperando il valore di k (3) e
sommandogli 1
2
si pone il risultato nel contenitore di cui k è il nome dopo avere
eliminato il valore precedentemente presente
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71
Esempio
k
3
k←k + 1
1
si valuta l’espressione k+1, recuperando il valore di k (3) e
sommandogli 1
2
si pone il risultato nel contenitore di cui k è il nome dopo avere
eliminato il valore precedentemente presente
k
4
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 56 / 71
Tipo
Il tipo di una variabile specifica
la classe di valori che questa può assumere
l’insieme delle operazioni che possono essere effettuate su di essa.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71
Tipo
Il tipo di una variabile specifica
la classe di valori che questa può assumere
l’insieme delle operazioni che possono essere effettuate su di essa.
Ad esempio una variabile x di tipo intero
può assumere come valori solo numeri interi
su di essa possono essere effettuate soltanto le operazioni consentite
per i numeri interi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71
Tipo
Il tipo di una variabile specifica
la classe di valori che questa può assumere
l’insieme delle operazioni che possono essere effettuate su di essa.
Ad esempio una variabile x di tipo intero
può assumere come valori solo numeri interi
su di essa possono essere effettuate soltanto le operazioni consentite
per i numeri interi
Il tipo è utile per
allocare spazio sufficiente a memorizzare il valore di una variabile
verificare in fase di compilazione la correttezza di un programma
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 57 / 71
Astrazioni
Variabili
Il concetto di variabile è un’astrazione del concetto di locazione di
memoria
L’assegnamento di un valore a una variabile è un’astrazione
dell’istruzione STORE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 58 / 71
Astrazioni
Variabili
Il concetto di variabile è un’astrazione del concetto di locazione di
memoria
L’assegnamento di un valore a una variabile è un’astrazione
dell’istruzione STORE
Tipi
Sebbene tutte le variabili siano rappresentate nella memoria come
sequenze di bit, tali sequenze possono essere interpretate
diversamente in base ai tipi
La nozione di tipo fornisce un’astrazione rispetto alla
rappresentazione effettiva dei dati
Il programmatore può utilizzare variabili di tipi differenti, senza
necessità di conoscerne l’effettiva rappresentazione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 58 / 71
Dichiarazione delle variabili
Molti linguaggi richiedono di dichiarare le variabili utilizzate nel
programma indicandone il tipo.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 59 / 71
Dichiarazione delle variabili
Molti linguaggi richiedono di dichiarare le variabili utilizzate nel
programma indicandone il tipo.
Vantaggi:
accresce la leggibilità dei programmi
diminuisce la possibilità di errori
facilita la realizzazione di compilatori efficienti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 59 / 71
Esempio: calcolo delle radici di ax 2 + bx + c = 0
variabili a, b, c, D, x, x1, x2: numeri reali
leggi a, b, c
D ← b2 - 4 * a * c
SE D < 0
ALLORA
scrivi “nessuna soluzione reale”
ALTRIMENTI
SE D == 0
ALLORA
x ← - b / (2 * a)
scrivi “Due soluzioni coincidenti: ”, x
ALTRIMENTI
√
x1 ← (- b - √D) / (2 * a)
x2 ← (- b +
D) / (2 * a)
scrivi “Due soluzioni: ”, x1, x2
FINESE
FINESE
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 60 / 71
Sommario: Computer, algoritmi e linguaggi
1
2
3
4
Computer, algoritmi e programmi
Computer, algoritmi e programmi
Evoluzione della programmazione
Finalità del corso
Rappresentazione dell’informazione
Dal linguaggio macchina ai linguaggi ad alto livello
La macchina di Von Neumann
Componenti principali di un computer
I linguaggi ad alto livello
Java Virtual Machine (JVM)
Strumenti per la stesura dei programmi
La programmazione strutturata
Le strutture di controllo fondamentali
Variabili e assegnamenti
Sintassi e semantica
Grammatiche
Lessico del linguaggio Java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 61 / 71
Linguaggi di programmazione
Sintassi
Fornisce delle regole per la scrittura di programmi
Esistono vari formalismi per descrivere la sintassi di un linguaggio
(forme di Backus-Naur, carte sintattiche, . . . )
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71
Linguaggi di programmazione
Sintassi
Fornisce delle regole per la scrittura di programmi
Esistono vari formalismi per descrivere la sintassi di un linguaggio
(forme di Backus-Naur, carte sintattiche, . . . )
Semantica
Determina il significato di un programma
Ovvero, le operazioni attuate dalla macchina che esegue il programma
(semantica operazionale)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71
Linguaggi di programmazione
Sintassi
Fornisce delle regole per la scrittura di programmi
Esistono vari formalismi per descrivere la sintassi di un linguaggio
(forme di Backus-Naur, carte sintattiche, . . . )
Semantica
Determina il significato di un programma
Ovvero, le operazioni attuate dalla macchina che esegue il programma
(semantica operazionale)
Solo i programmi sintatticamente corretti hanno una semantica, cioè
possono essere eseguiti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71
Linguaggi di programmazione
Sintassi
Fornisce delle regole per la scrittura di programmi
Esistono vari formalismi per descrivere la sintassi di un linguaggio
(forme di Backus-Naur, carte sintattiche, . . . )
Semantica
Determina il significato di un programma
Ovvero, le operazioni attuate dalla macchina che esegue il programma
(semantica operazionale)
Solo i programmi sintatticamente corretti hanno una semantica, cioè
possono essere eseguiti
Quando il compilatore (o l’interprete) incontra un errore di sintassi nel
codice si arresta segnalando il problema
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 62 / 71
Programmi e algoritmi
PROGRAMMI
PROGRAMMI CORRETTI
PROGRAMMI TERMINANTI
ALGORITMI
Per codificare tutti gli algoritmi è necessario utilizzare i cicli
La presenza dei cicli rende possibile scrivere programmi non terminanti
(contenenti cicli infiniti), che quindi non codificano nessun algoritmo
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 63 / 71
Sintassi e semantica
In astratto, la sintassi è definita da una grammatica
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71
Sintassi e semantica
In astratto, la sintassi è definita da una grammatica
La grammatica è un modello generativo di tutti e soli i programmi
sintatticamente corretti
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71
Sintassi e semantica
In astratto, la sintassi è definita da una grammatica
La grammatica è un modello generativo di tutti e soli i programmi
sintatticamente corretti
Sintassi dei numeri reali (ad esempio 3.14...)
<reale> ::= <sequenza_cifre> . <sequenza_cifre>
<sequenza_cifre> ::= <cifra> | <cifra> <sequenza_cifre>
<cifra> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 64 / 71
Grammatica
G = (T , N, P, S)
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Grammatica
G = (T , N, P, S)
T insieme finito dei simboli terminali, cioè dei simboli che
costituiranno i programmi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Grammatica
G = (T , N, P, S)
T insieme finito dei simboli terminali, cioè dei simboli che
costituiranno i programmi
N insieme finito dei simboli non terminali, o metasimboli,
utilizzati nella costruzione dei programmi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Grammatica
G = (T , N, P, S)
T insieme finito dei simboli terminali, cioè dei simboli che
costituiranno i programmi
N insieme finito dei simboli non terminali, o metasimboli,
utilizzati nella costruzione dei programmi
P insieme finito delle regole di produzione
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Grammatica
G = (T , N, P, S)
T insieme finito dei simboli terminali, cioè dei simboli che
costituiranno i programmi
N insieme finito dei simboli non terminali, o metasimboli,
utilizzati nella costruzione dei programmi
P insieme finito delle regole di produzione
S simbolo iniziale, S ∈ N ed è il punto di partenza nella
costruzione dei programmi
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Grammatica
G = (T , N, P, S)
T insieme finito dei simboli terminali, cioè dei simboli che
costituiranno i programmi
N insieme finito dei simboli non terminali, o metasimboli,
utilizzati nella costruzione dei programmi
P insieme finito delle regole di produzione
S simbolo iniziale, S ∈ N ed è il punto di partenza nella
costruzione dei programmi
Linguaggio generato da G
L’insieme di tutte le sequenze di simboli terminali ottenibili applicando le
regole di produzione dell’insieme P, a partire dal simbolo iniziale S.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 65 / 71
Esempio
(1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,}
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71
Esempio
(1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,}
(2) N = {frase, soggetto, verbo, complemento, articolo, nome}
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71
Esempio
(1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,}
(2) N = {frase, soggetto, verbo, complemento, articolo, nome}
(3) P, regole espresse in BNF (forma di Backus-Naur):
frase ::= soggetto verbo complemento
soggetto ::= articolo nome
articolo ::= il | la | lo
nome ::= cane | mela | gatto
verbo ::= mangia | graffia
complemento ::= articolo nome | articolo nome , complemento
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71
Esempio
(1) T = {il, lo, la, cane, mela, gatto, mangia, graffia, ,}
(2) N = {frase, soggetto, verbo, complemento, articolo, nome}
(3) P, regole espresse in BNF (forma di Backus-Naur):
frase ::= soggetto verbo complemento
soggetto ::= articolo nome
articolo ::= il | la | lo
nome ::= cane | mela | gatto
verbo ::= mangia | graffia
complemento ::= articolo nome | articolo nome , complemento
(4) S = frase.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 66 / 71
Esempio di produzione
frase
soggetto
Q
Q
Q
Q
complemento
verbo
@
@
articolo
@
nome graffia articolo
Q
AA @
@ QQ
A @ Q
nome
,
complemento
@
@
lo
mela
c 2005-2010 Pearson Education Italia
lo
gatto
@
articolo
nome
il
cane
Capitolo 1 - Computer, algoritmi e linguaggi 67 / 71
Linguaggio Java: il lessico
Alfabeto
L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è
un insieme di caratteri rappresentati su 16 bit.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71
Linguaggio Java: il lessico
Alfabeto
L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è
un insieme di caratteri rappresentati su 16 bit.
Parole riservate (o parole chiave)
Sono parole che nel linguaggio hanno un significato predeterminato.
Non possono essere utilizzate diversamente e non possono essere
ridefinite.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71
Linguaggio Java: il lessico
Alfabeto
L’alfabeto utilizzato per scrivere i programmi si chiama Unicode, ed è
un insieme di caratteri rappresentati su 16 bit.
Parole riservate (o parole chiave)
Sono parole che nel linguaggio hanno un significato predeterminato.
Non possono essere utilizzate diversamente e non possono essere
ridefinite.
abstract
catch
do
finally
import
new
short
this
volatile
assert
char
double
float
instanceof
package
static
throw
while
c 2005-2010 Pearson Education Italia
boolean
class
else
for
int
private
strictfp
throws
break
const
enum
goto
interface
protected
super
transient
byte
continue
extends
if
long
public
switch
try
case
default
final
implements
native
return
synchronized
void
Capitolo 1 - Computer, algoritmi e linguaggi 68 / 71
Linguaggio Java: il lessico (2)
Identificatori
Sono nomi impiegati all’interno del programma per indicare variabili,
classi, riferimenti a oggetti, e cosı̀ via.
Un identificatore è costituito da una sequenza di lettere e cifre che
inizia con una lettera
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71
Linguaggio Java: il lessico (2)
Identificatori
Sono nomi impiegati all’interno del programma per indicare variabili,
classi, riferimenti a oggetti, e cosı̀ via.
Un identificatore è costituito da una sequenza di lettere e cifre che
inizia con una lettera
Separatori
Sono caratteri che permettono di separare o raggruppare parti di
codice.
(
)
{
}
[
]
c 2005-2010 Pearson Education Italia
;
,
.
Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71
Linguaggio Java: il lessico (2)
Identificatori
Sono nomi impiegati all’interno del programma per indicare variabili,
classi, riferimenti a oggetti, e cosı̀ via.
Un identificatore è costituito da una sequenza di lettere e cifre che
inizia con una lettera
Separatori
Sono caratteri che permettono di separare o raggruppare parti di
codice.
(
)
{
}
[
]
;
,
.
Operatori
Sono simboli o sequenze di simboli che denotano alcune operazioni.
=
==
+
+=
>
<=
-=
<
>=
*
*=
!
!=
/
/=
~
&&
&
&=
?
||
|
|=
c 2005-2010 Pearson Education Italia
:
++
^
^=
-%
%=
<<
<<=
>>
>>=
>>>
>>>=
Capitolo 1 - Computer, algoritmi e linguaggi 69 / 71
Linguaggio Java: il lessico (3)
Letterali
Sequenze di caratteri utilizzate all’interno dei programmi per
rappresentare valori di tipi primitivi e stringhe.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71
Linguaggio Java: il lessico (3)
Letterali
Sequenze di caratteri utilizzate all’interno dei programmi per
rappresentare valori di tipi primitivi e stringhe.
Commenti
/*. . . */
il compilatore ignora tutto il testo compreso tra questi caratteri;
possono estendersi per più righe
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71
Linguaggio Java: il lessico (3)
Letterali
Sequenze di caratteri utilizzate all’interno dei programmi per
rappresentare valori di tipi primitivi e stringhe.
Commenti
/*. . . */
il compilatore ignora tutto il testo compreso tra questi caratteri;
possono estendersi per più righe
/**. . . */
il compilatore ignora tutto il testo compreso tra questi caratteri;
possono estendersi per più righe. Sono chiamati commenti di
documentazione, vengono interpretati da javadoc
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71
Linguaggio Java: il lessico (3)
Letterali
Sequenze di caratteri utilizzate all’interno dei programmi per
rappresentare valori di tipi primitivi e stringhe.
Commenti
/*. . . */
il compilatore ignora tutto il testo compreso tra questi caratteri;
possono estendersi per più righe
/**. . . */
il compilatore ignora tutto il testo compreso tra questi caratteri;
possono estendersi per più righe. Sono chiamati commenti di
documentazione, vengono interpretati da javadoc
commenti a fine riga
si aprono con la coppia di caratteri // e si chiudono alla fine della riga;
il compilatore ignora il testo che inizia dai caratteri // fino alla fine
della riga.
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 70 / 71
Il primo programma Java
/* Il nostro primo programma */
class BuonInizio {
// il metodo main
public static void main(String[] args) {
System.out.println("Ti auguro una buona giornata!");
}
}
Nota
In Java, ogni istruzione deve trovarsi all’interno di una classe
In ogni programma Java deve essere definito un metodo main (e non più
di uno) che indica alla JVM dove iniziare la computazione
BuonInizio.java
c 2005-2010 Pearson Education Italia
Capitolo 1 - Computer, algoritmi e linguaggi 71 / 71
Scarica