Corso JAVA
Lezione n° 01
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
Come si risolve un problema?
Ogni qualvolta vi viene presentato un problema, la prima
domanda da porsi è: Quali sono i dati che il testo del
problema mi fornisce (Dati di input)?
Mentre la seconda cosa da chiedersi è: Quali solo i dati, o in
generale le informazioni, che si deve fornire come risultato
(Dati di output)?
Una volta risposto a queste due domande occorre definire un
procedimento di risoluzione (algoritmo), ovvero un insieme
di operazioni che vi permetteranno, a partire da i dati in
input, di ottenere i dati di output.
2
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
Esempio (1)
Problema: Dati 100 dipendenti di un’azienda, si vuole sapere
qual è il nome ed il cognome del dipendente con lo stipendio
più alto.
Dati in input:
Il numero dei dipendenti dell’azienda (100).
Il nome, il cognome e lo stipendio di ogni
dipendente.
Dati in output: Il nome ed il cognome del dipendente che
ha lo stipendio più alto.
3
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
Esempio (2)
Se dovreste risolvere questo problema con carta e penna, quale sarebbe il
procedimento (algoritmo) che usereste?
Le operazioni da fare sarebbero li seguenti:
1) Prendo il primo dipendente e scrivo sul foglio il suo nome, il suo
cognome ed il suo stipendio.
2) Prendo il secondo dipendente e controllo se il suo stipendio è più alto
o più basso dello stipendio che dipendente che ho scritto sul foglio.
3) In caso affermativo cancello i dati del primo dipendente e li
sostituisco con quelli del secondo, altrimenti passo al dipendente
successivo.
Continuo fino a quando non ho controllato anche il 100° dipendente.
4
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
I Diagrammi di Flusso
Utilizzare i diagrammi di flusso non significa altro che trasformare quello
che abbiamo scritto a parole nella diapositiva precedente in uno schema
composto da vari simboli:
 L’ellisse: indica l’inizio e la fine del nostro algoritmo.
Inizio

Il parallelogramma: indica dati in input o dati in output.
Input:
5
Fine
n° dip. azienda
Istituto Statale di Istruzione Superiore “F. Enriques”
Output:
Nome e cognome dip.
Corso di Programmazione in Java – Lezione n° 01
I Diagrammi di Flusso (2)

Il rettangolo: indica operazioni generiche
scrivi sul foglio il nome,
Cognome e stip. del dip.

Il rombo: indica una selezione (una scelta).
Nota Bene: La scelte possibili devono essere solo 2 e disgiunte.
Si
6
A=B+C
Oggi piove
No
Istituto Statale di Istruzione Superiore “F. Enriques”
Si
N° dip. = 100
No
Corso di Programmazione in Java – Lezione n° 01
Rivediamo il problema di prima
Per prima cosa
l’inizio …
Inizio
num. dipen. = 100
Nome, cognome e
stipendio del 1° dip.
Scrivi il nome, cognome e
stip. del 1° dip. sul foglio
7
Istituto Statale di Istruzione Superiore “F. Enriques”
… poi dobbiamo indicare,
con il parallelogramma, che
abbiamo dei dati in input.
… ogni operazione
elementare deve essere
indicata con il rettangolo
Corso di Programmazione in Java – Lezione n° 01
Rivediamo il problema di prima (2)
…adesso ci serve un
altro dato in input
Nome, cognome e
stipendio del 2° dip.
Confronto stip. 1° dip.
con stip. del 2° dip.
… poi devo
fare una scelta
8
si
stip. 1° dip. è >
dello stip. 2° dip.
Istituto Statale di Istruzione Superiore “F. Enriques”
… si confrontano i
due stipendi per
vedere qual è il più
grande …
no
Supponiamo che
stip. 2° dip. sia
maggiore dello
stip. 1 dip.
Corso di Programmazione in Java – Lezione n° 01
Rivediamo il problema di prima (3)
si
no
Cancella il nome, cognome e
stip. del 1° dip. sul foglio
Scrivi il nome, cognome e
stip. del 2° dip. sul foglio
9
L’operazione di cancellazione dei dati del
1° dip. e scrittura dei dati sul foglio del 2°
dip. si effettua solo nel ramo no, ovvero se
lo stip. del 2° dip. è > dello stip. del 1°
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
Rivediamo il problema di prima (4)
Nome, cognome e
stipendio del 3° dip.
Confronto stip. 2° dip.
con stip. del 3° dip.
vero
10
stip. 2° dip. è >
dello stip. 3° dip.
Istituto Statale di Istruzione Superiore “F. Enriques”
Si effettua lo stesso
procedimento con il
3° dip. ed il 2° dip. e
così via fino a
raggiungere i 100
dipendenti.
falso
Corso di Programmazione in Java – Lezione n° 01
Rivediamo il problema di prima (5)
si
no
Cancella il nome, cognome e
stip. del x° dip. sul foglio
Scrivi il nome, cognome e
stip. del 100° dip. sul foglio
Nome, cognome e
scritti sul foglio
11
Istituto Statale di Istruzione Superiore “F. Enriques”
fine
Corso di Programmazione in Java – Lezione n° 01
Un solo problema …
Molti diagrammi di flusso
Il diagramma di flusso appena visto è solo uno dei possibili che si possono
creare per risolvere il problema di partenza. L’inconveniente del
diagramma presentato è l’eccessiva lunghezza che si traduce in scarsa
leggibilità.
Nella prossima diapositiva vedremo come si può semplificare il diagramma
utilizzando un contatore e la ricorsione, ottenendone uno equivalente.
Nota bene: La condizione della selezione (quella nel rombo per intendersi)
deve avere solo due risposte possibili …
Rosso
12
Di che colore
è il semaforo
Istituto Statale di Istruzione Superiore “F. Enriques”
Verde
E se il semaforo è giallo?
La domanda corretta da porsi
sarebbe: Il semaforo è rosso?
Vero/Falso
Corso di Programmazione in Java – Lezione n° 01
I Contatori e la Ricorsione
Il rombo, ovvero la selezione, può essere utilizzato sia per fare una scelta
si/no, sia per ripetere un insieme di operazioni fino a quando non si
verifica una determinata condizione.
Si introduce una variabile i; una variabile è una locazione di memoria
contenente dati che possono essere modificati nel corso del programma, a
cui viene associato una lettera o un nome.
Esempio: Si vogliono stampare i numeri da 0 a 100.
inizio
i=0
Stampa i
i=i+1
13
Istituto Statale di Istruzione Superiore “F. Enriques”
falso
i > 100
vero
fine
Corso di Programmazione in Java – Lezione n° 01
Diagramma semplificato
Inizio
num. dipen. = 100
Nome = nome i° dip
Cognome = cognome i° dip
Stip. = stipendio i° dip.
vero
stipendio i° dip.
> Stip.
falso
falso
Nome, cognome e
stipendio del i° dip.
14
i = 0, Nome = /, Cognome = /, Stip. = 0
Istituto Statale di Istruzione Superiore “F. Enriques”
i = num.
dipen.
vero
Nome e
Cognome
i = i +1
fine
Corso di Programmazione in Java – Lezione n° 01
Esercizio – M.C.D.
(Massimo Comun Divisore)
Scrivere il diagramma di flusso per il seguente problema:
Dati due numeri interi A e B si vuole trovare il Massimo
Comun Divisore, ovvero quel numero intero X per cui non
esiste nessun altro numero intero più grande che permette di
dividere A e B ottenendo come resto 0.
Es.: Il Massimo Comun Divisore tra 12 e 8 ?
12 è divisibile per 1, 2, 4, 6, 12
8 è divisibile per 1, 2, 4, 8
Qual è l’elemento in comune? 4 che è proprio il M.C.D.
15
Istituto Statale di Istruzione Superiore “F. Enriques”
Corso di Programmazione in Java – Lezione n° 01
Soluzione Esercizio M.C.D.
Inizio
i=i+1
A, B
restoA = 0, restoB = 0
x=0
restoA = A % i
i=0
x=i
restoB = B % i
vero
16
Istituto Statale di Istruzione Superiore “F. Enriques”
restoA = 0 e
restoB = 0
falso
Questo
diagramma di
flusso è
corretto?
Ovviamente no.
Il diagramma di
flusso non ha
termine.
Manca un ramo
che ci conduca
alla “fine”.
Corso di Programmazione in Java – Lezione n° 01
Soluzione Esercizio M.C.D. (2)
Inizio
i=i+1
A, B
falso
restoA = 0, restoB = 0
x=0
vero
restoA = A % i
i=0
i=Ao
i=B
x=i
Fine
restoB = B % i
Ora è OK?
vero
17
Istituto Statale di Istruzione Superiore “F. Enriques”
restoA = 0 e
restoB = 0
falso
No!! Manca l’output!!
Corso di Programmazione in Java – Lezione n° 01
Soluzione Esercizio M.C.D. (3)
Inizio
i=i+1
A, B
falso
restoA = 0, restoB = 0
i=Ao
i=B
x=0
vero
restoA = A % i
i=0
x
x=i
restoB = B % i
Fine
vero
18
Istituto Statale di Istruzione Superiore “F. Enriques”
restoA = 0 e
restoB = 0
falso
Adesso ci siamo!!!
Corso di Programmazione in Java – Lezione n° 01
La Selezione in cascata
Abbiamo detto in precedenza che il test che scriviamo all’interno della
selezione (il rombo), deve avere due sole risposte possibili.
Riprendiamo il caso del semaforo: Poniamo il caso che in base al colore del
semaforo si debba decidere un’azione diversa, esempio:
Rosso – Devo Frenare, Verde – Posso passare, Giallo – Accelero / Freno
Rosso
Di che colore
è il semaforo
Freno
Non rosso
Giallo
Accelero / Freno
19
Istituto Statale di Istruzione Superiore “F. Enriques”
Di che colore
è il semaforo
Verde
Posso passare
Corso di Programmazione in Java – Lezione n° 01
Relazione Diagrammi di flusso e
programmazione.
Perché utilizzare un diagramma di flusso relativo ad un problema posto e
non scrivere direttamente il programma in linguaggio Java che risolve
tale problema?
Il motivo principale è che si può progettare un programma con un
diagramma a blocchi indipendentemente dal linguaggio usato e quindi
dalla sua sintassi.
Una volta terminato il diagramma a blocchi è possibile convertire parti dello
stesso in un linguaggio di programmazione come vedremo
prossimamente.
Prima di vedere come si effettua tale conversione però è necessario
introdurre un argomento base della programmazione: i tipi fondamentali
dei dati; argomenti iniziale della prossima lezione.
20
Istituto Statale di Istruzione Superiore “F. Enriques”
Scarica

Lezione n° 01