Sei sulla pagina 1di 75

Fondamenti di Informatica

Diagrammi di flusso

Prof. E. Clementini
Sviluppo di algoritmi
Quali sono i passi elementari? Livello di programmazione ad alto livello,
quello a basso livello è molto più semplice.

Problema: Prodotto di due numeri

Algoritmo:
1. Leggi i due numeri;
2. Fai il prodotto di essi;
3. Scrivi il risultato.
24/09/2021 Fondamenti di Informatica - Prof. Clementini 2
Le variabili
• Permettono il riferimento alla
memoria del calcolatore senza
gestire direttamente gli
indirizzi A
• Sono nomi simbolici B
• Una variabile contiene un
valore
• Il valore di una variabile
appartiene a un tipo, ad
esempio numeri interi
24/09/2021 Fondamenti di Informatica - Prof. Clementini 3
Le variabili
• In una variabile possiamo inserire
un valore
• Da una variabile possiamo
prelevare un valore
• Una variabile inizialmente possiede
un valore indeterminato
• Una variabile contiene un valore
finché non sovrascritto da un altro
valore
24/09/2021 Fondamenti di Informatica - Prof. Clementini 4
Istruzione di lettura
• Consente di memorizzare in una variabile un valore
proveniente dalla tastiera

• La indichiamo con:
Leggi A
Leggi B

24/09/2021 Fondamenti di Informatica - Prof. Clementini 5


Istruzione di assegnazione
• Memorizza in una variabile un valore o il risultato di
un’espressione

• La indichiamo con:
A=B
A = C+D

24/09/2021 Fondamenti di Informatica - Prof. Clementini 6


Istruzione di scrittura
• Consente di visualizzare sul monitor un valore o il contenuto di
una variabile

• La indichiamo con:
Scrivi A
Scrivi "ciao"

24/09/2021 Fondamenti di Informatica - Prof. Clementini 7


Algoritmo per il prodotto di due numeri
1. Leggi A;
2. Leggi B;
3. C = A*B;
4. Scrivi C.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 8


Problema: Trovare il massimo tra due numeri

• Abbiamo bisogno di un’altra istruzione elementare:


• Istruzione di confronto:
– Valuta un’espressione logica e restituisce un valore vero o falso

24/09/2021 Fondamenti di Informatica - Prof. Clementini 9


Problema: Trovare il massimo tra due numeri
• Algoritmo risolutivo:

1. Leggi A;
2. Leggi B;

3. Se A>B è vero, allora MAX=A, altrimenti


MAX=B;

4. Scrivi MAX.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 10


Esprimere algoritmi
• Facciamo uso di istruzioni elementari:
– Lettura
– Scrittura
– Assegnazione
– Confronto
• Due modalità espressive: Per descrivere un algoritmo si utilizza o pseducodice o in
forma grafica:
-Con lo pseudocodice si hanno delle frasi in italiano/inglese
– Pseudocodice che descrivono le singole istruzioni elementari

– Diagrammi di flusso -Diagrammi di flusso determinano i dati di ingresso le istruzioni


e i dati in uscita in cascata in modalità grafica.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 11


Diagrammi di flusso
ingresso fine programma
A

flusso
A uscita

Ogni simbolo è utilizzato per costruire i diagrammi


di flusso
A=B assegnazione

A>B confronto

24/09/2021 Fondamenti di Informatica - Prof. Clementini 12


Prodotto di due numeri

Algoritmo con cui si progetta il prodotto A


tra due numeri

C=A*B

24/09/2021 Fondamenti di Informatica - Prof. Clementini 13


Massimo tra due numeri
A

Dal confronto si hanno B


sempre due frecce
uscenti che si etichettano
con vero o falso. Quando true A>B false
la condizione è vera si
esegue l'assegnazione MAX=A
MAX=A o B. I due rami si MAX=B
riuniscono per
proseguire nella parte
comune e si effettua la
stampa della variabile MAX
MAX e infine il termine
del programma

24/09/2021 Fondamenti di Informatica - Prof. Clementini 14


Diagrammi di flusso
• I diagrammi di flusso evidenziano percorsi diversi
nell’esecuzione di un programma
• Un percorso nel diagramma corrisponde a una sequenza di
azioni effettuate dal programma in esecuzione (al variare dei
dati in ingresso)

24/09/2021 Fondamenti di Informatica - Prof. Clementini 15


Sequenze esecutive
• La sequenza esecutiva è una particolare sequenza di azioni in
corrispondenza di un fissato insieme di dati di ingresso

24/09/2021 Fondamenti di Informatica - Prof. Clementini 16


Sequenze esecutive
• Prodotto di due numeri
– 1 sola sequenza esecutiva

istruzione A B C
A
Leggi A
B Leggi B
C=A*B
C=A*B
Scrivi C
C

24/09/2021 Fondamenti di Informatica - Prof. Clementini 17


Sequenze esecutive
• Massimo tra due numeri
– 2 sequenze esecutive

– Prima sequenza: istruzione A B MAX


Leggi A
A
Leggi B
B
A>B
MAX=A
true A>B false

MAX=A MAX=B

Scrivi MAX
MAX

24/09/2021 Fondamenti di Informatica - Prof. Clementini 18


Sequenze esecutive
• Massimo tra due numeri

– Seconda sequenza istruzione A B MAX


Leggi A
A

Leggi B
B

true A>B false


A>B
MAX=A MAX=B
MAX=B
Scrivi MAX
MAX

24/09/2021 Fondamenti di Informatica - Prof. Clementini 19


Generalizzazione della somma
Problema: Fare la somma di tre numeri.
Algoritmo:
1. Leggi A;
2. Leggi B;
3. Leggi C;
4. S=A+B+C;
5. Scrivi S.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 20


Generalizzazione della somma
All’aumentare dei numeri da sommare, con questo approccio
dobbiamo variare ogni volta il programma

Proviamo a costruire un programma abbastanza generale in


grado di sommare n numeri per qualsiasi n

24/09/2021 Fondamenti di Informatica - Prof. Clementini 21


Procedimento iterativo Il flusso della freccia
intende che si ripete

• Somma di n numeri
• la somma di n numeri può
essere ottenuta X
aggiungendo ogni volta un
nuovo numero ad una
somma parziale S=S+X
• Istruzioni da ripetere:
I. Leggi X; Si somma il contenuto della variabile S alla variabile X sovrascrivendo il
II. S=S+X; valore. Quando si effettua la sovrascrizione si perdono i valori precedenti
ma non ci interessano. Ripetendo queste istruzioni si ottiene il risultato che
si vuole, si iterano queste istruzioni n volte perchè n sono i numeri da
sommare
24/09/2021 Fondamenti di Informatica - Prof. Clementini 22
Somma di n numeri
• Come contiamo le iterazioni?
• Con una variabile “contatore”
• La chiamiamo I
• Aggiungiamo una variabile che indica
quanti numeri si devono sommare in
totale
• La chiamiamo N

24/09/2021 Fondamenti di Informatica - Prof. Clementini 23


Somma di n numeri
• Consideriamo il
confronto I<=N I<=N false
• Realizziamo un true
ciclo
X

S=S+X

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 24


Somma di n numeri
• Aggiungiamo N
l’inizializzazione di I=1
variabili
S=0
• e la stampa del
risultato I<=N false
true S
X
X rappresenta il valore che l'utente deve inserire per
S=S+X
sommare all'interno del ciclo
I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 25


Sequenze esecutive
• Sequenza esecutiva n. 1 (per N=0):

istruzione N I S X
Leggi N 0
I=1 1
S=0 0
I<=N false
Scrivi S

24/09/2021 Fondamenti di Informatica - Prof. Clementini 26


Sequenze esecutive
istruzione N I S X
• Sequenza
Leggi N 1
esecutiva n. 2 I=1 1
(per N=1): S=0 0
I<=N true
N

I=1
Leggi X 24
S=0 S=S+X 24
I<=N false I=I+1 2
true
X
S
I<=N
S=S+X
false
I=I+1
Scrivi S
24/09/2021 Fondamenti di Informatica - Prof. Clementini 27
Sequenze esecutive
• Sequenza istruzione
Leggi N
N
2
I S X

esecutiva n. 3 I=1 1
S=0 0
(per N=2): I<=N true
Leggi X 24
N S=S+X 24
I=1 I=I+1 2
S=0 I<=N true
I<=N false
Leggi X 7
true S
S=S+X 31
X I=I+1 3
S=S+X I<=N false
I=I+1 Scrivi S

24/09/2021 Fondamenti di Informatica - Prof. Clementini 28


Sequenze istruzione N I S X
esecutive Leggi N
I=1
3
1
S=0 0
• Sequenza I<=N true
esecutiva n. 4 Leggi X 24
S=S+X 24
(per N=3): I=I+1 2
I<=N true
Leggi X 7
N
S=S+X 31
I=1
I=I+1 3
S=0
I<=N true
I<=N false Leggi X 10
true S S=S+X 41
X
I=I+1 4
S=S+X
I<=N false
I=I+1
Scrivi S
24/09/2021 Fondamenti di Informatica - Prof. Clementini 29
Strutture di controllo
• Le istruzioni elementari sono combinate tra loro con le
strutture di controllo:
– “Se… allora… altrimenti…” (selezione binaria)
– “Finché… esegui…” (ciclo con pre-condizione)

24/09/2021 Fondamenti di Informatica - Prof. Clementini 30


Somma di n numeri
1.Leggi N;
2.I=1;
3.S=0;
4.Finché I<=N esegui:
4.1. Leggi X;
4.2. S=S+X;
4.3. I=I+1;
5.Scrivi S.
24/09/2021 Fondamenti di Informatica - Prof. Clementini 31
Strutture di controllo

true false false

true

24/09/2021 Fondamenti di Informatica - Prof. Clementini 32


Altri esempi sui cicli
• Problema: somma di numeri con
terminazione del ciclo identificata
da un particolare valore in
ingresso (per esempio uno zero)

24/09/2021 Fondamenti di Informatica - Prof. Clementini 33


Altri esempi sui cicli

• Somma con terminazione pari a zero

24/09/2021 Fondamenti di Informatica - Prof. Clementini 34


Altri esempi sui cicli
• Somma con terminazione pari a zero

X=1
Fino a quando X!=0 si ha che il ciclo continua a
S=0 fare la somma, in questo caso per entrare nel
ciclo per entrare nel ciclo si effettua un "
trucchetto" inizializzando X=1 per entrare nel
ciclo.
X!=0 false
Quando si hanno le letture, è il momento di
true S interazione con l'utente. Ovviamente per
terminare il programma con 0 il programmatore
X deve inserire un avviso in cui esplicita il fatto che
per finire il programma bisogna inserire 0.
S=S+X

24/09/2021 Fondamenti di Informatica - Prof. Clementini 35


Soluzione alternativa
• Anticipiamo prima del ciclo la prima lettura
del numero

24/09/2021 Fondamenti di Informatica - Prof. Clementini 36


Soluzione alternativa

S=0

X!=0 false
true S
S=S+X

24/09/2021 Fondamenti di Informatica - Prof. Clementini 37


Massimo tra n numeri
• Nucleo per formare il ciclo:

i) leggi x;
ii)se x > max allora max=x
altrimenti max=max

24/09/2021 Fondamenti di Informatica - Prof. Clementini 38


Massimo tra n numeri
N rappresenta quanti numeri sono presenti nella
N sequenza.
Si inserisce MAX= a un numero minore dei più
I=1 piccoli della sequenza (trucchetto) per verificare il
true sulla combinazione binaria
MAX=-1000000

I<=N false
true MAX
X

true X>MAX false

MAX=X MAX=MAX

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 39


Seconda soluzione
• portare fuori dal ciclo la prima lettura ed utilizzare tale valore
per inizializzare max

24/09/2021 Fondamenti di Informatica - Prof. Clementini 40


Seconda N

soluzione X

MAX=X

Si ha che il ciclo è rimasto lo stesso I=2


però in si hanno N-1 valori da leggere,
bisogna che il ciclo venga eseguito una
volta in meno perchè la prima lettura si I<=N false
effettua fuori dal ciclo, per cui il true MAX
contatore lo si fa partire da 2 (perchè N
=1 già si è contato). Si inizializza MAX X
=X perchè è quello che determina il
primo valore della sequenza di numeri true X>MAX false
per cui non ci sono altri max parziali
precedenti MAX=X MAX=MAX

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 41


Esaminare un triangolo
• trovare il tipo di triangolo (equilatero, isoscele, o scaleno) date
le tre lunghezze dei lati

24/09/2021 Fondamenti di Informatica - Prof. Clementini 42


Esaminare un triangolo
A

(A=B) AND
true (B=C) false

"equilatero" (A=B)
OR (B=C) OR
true (A=C) false

"isoscele" "scaleno"

24/09/2021 Fondamenti di Informatica - Prof. Clementini 43


calcolo della potenza
• calcolo della potenza
con esponente intero
positivo o nullo.
• Il controllo dei dati in
ingresso caso di
esponente negativo
• caso della forma
indefinita 0 elevato a
0

24/09/2021 Fondamenti di Informatica - Prof. Clementini 44


calcolo della potenza
• Soluzione:
• Ciclo basato su

potenza = potenza * base


i=i+1

Si ripete finché i < esponente

24/09/2021 Fondamenti di Informatica - Prof. Clementini 45


base
PARTE DI CONTROLLO DEL

soluzione esponente CICLO affinchè l'utente inserisca


i corretti valori da elaborare.
esponente <
false
true 0

"errore" base==0 and


false
true esponente==0
i=0
"errore" potenza=1

i< esponente

true false
potenza =
potenza * base
potenza

i=i+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 46


Conversione da base qualsiasi a base 10

• approccio semplificato 1:
– l’ingresso di ogni cifra avviene in ordine inverso rispetto al numero
dato, in modo da evitare il calcolo diretto della potenza

n −1
 i )
( c  b i

i =0

24/09/2021 Fondamenti di Informatica - Prof. Clementini 47


soluzione
N

base

I=1

potenza=1

valore=0

I<=N false
true
valore
cifra
valore=valore+
cifra*potenza
potenza=
potenza*base

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 48


soluzione
N

base

I=1

potenza=1

valore=0

I<=N false
true
valore
cifra
valore=valore+
cifra*potenza
potenza=
potenza*base

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 49


Conversione da base qualsiasi a base 10

• approccio semplificato 2:
– l’ingresso di ogni cifra avviene nello stesso ordine rispetto al numero
dato, utilizzando la formula di Horner

V ( X ) = cn−1  b n−1 + cn−2  b n−2 + + c1  b1 + c0  b0


= c0 + b  (c1 + c2  b +  + cn −1  b n − 2 )
= c0 + b  (c1 + b  (c2 + c3  b +  + cn −1  b n −3 ))
= c0 + b  (c1 +  + b(cn − 2 + cn −1  b))))

24/09/2021 Fondamenti di Informatica - Prof. Clementini 50


soluzione
N

base

valore=0

I=1

I<=N false
true valore
cifra
valore=valore*
base+cifra

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 51


soluzione
N

base

valore=0

I=1

I<=N false
true valore
cifra
valore=valore*
base+cifra

I=I+1

24/09/2021 Fondamenti di Informatica - Prof. Clementini 52


Conversione da base 10 a base qualsiasi

• algoritmo delle divisioni successive


– Dato un numero in base 10 e la
base di conversione,
– si divide il numero per la base,
ottenendo un resto e un quoziente;
– finché il quoziente è diverso da
zero si continua a dividere il
quoziente per la base;
– il risultato della conversione è dato
da tutti i resti trovati presi in ordine
inverso.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 53


Conversione da base 10 a base qualsiasi

operatore div mi da il quoziente intero numero


della divisione (5div2=2), mentre mod è il
resto dlla divisione intera (5mod2=1) base
quoziente=
numero

quoziente
false
!=0
true
resto=
quoziente MOD base

resto

quoziente=
quoziente DIV base

24/09/2021 Fondamenti di Informatica - Prof. Clementini 54


Conversione da base 10 a base qualsiasi

numero

base
quoziente=
numero

quoziente
false
!=0
true
resto=
quoziente MOD base

resto

quoziente=
quoziente DIV base

24/09/2021 Fondamenti di Informatica - Prof. Clementini 55


Conversione da base 10 a base qualsiasi di
numeri frazionari (moltiplicazioni successive)

• Moltiplicazioni successive:
– Si moltiplica la parte frazionaria data
per la base, ottenendo un numero
frazionario, di cui si considera parte
intera e parte frazionaria
– Si continua a moltiplicare la parte
frazionaria per la base ottenendo L'operatore int(x) restituisce la parte intera,
sempre una parte frazionaria e una mnetre frac(x) la parte frazionaria
intera. Ci si arresta quando la parte
frazionaria è zero oppure si raggiunge
la precisione voluta.
– Il risultato è la sequenza di parti intere
ottenuta

24/09/2021 Fondamenti di Informatica - Prof. Clementini 56


Conversione da base 10 a base qualsiasi di
numeri frazionari (moltiplicazioni successive)

24/09/2021 Fondamenti di Informatica - Prof. Clementini 57


Uso di variabili booleane
• esempio: l’utente deve indovinare un numero intero scelto dal programmatore avendo a disposizione
un numero fissato di tentativi.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 58


soluzione 1. Si pone trovato = false
2.Si inizializza I=1
3. Finchè I=<MAXTENT AND NOT
trovato
3.1 Leggi numero
3.2 Se il numero = numero nascosto
3.3 trovato

24/09/2021 Fondamenti di Informatica - Prof. Clementini 59


24/09/2021 Fondamenti di Informatica - Prof. Clementini 60
soluzione
1. trovato = false
2. i = 1
3. Finché i < MAXTENT and not trovato
1. Leggi numero
2. Se numero == NUMERONASCOSTO
1. trovato = true
3. i = i + 1
4. Se trovato
1. Stampa “numero trovato”
Altrimenti
1. Stampa “numero non trovato”

24/09/2021 Fondamenti di Informatica - Prof. Clementini 61


La programmazione strutturata
Nell’esempio, la variabile booleana ci ha aiutato ad imporre una
struttura ciclica ben determinata (ciclo con precondizione),
evitando l’uso di strutture cicliche di forma diversa

La programmazione strutturata restringe i cicli ad alcune forme


possibili

24/09/2021 Fondamenti di Informatica - Prof. Clementini 62


Programma non strutturato

I<=N
false
true
X

X==0 true
false
S=S+X

I=I+1

Il ciclo non è strutturato perché ha due uscite


24/09/2021 Fondamenti di Informatica - Prof. Clementini 63
La programmazione strutturata
• La programmazione strutturata è
una filosofia di programmazione true false
che restringe le forme possibili di
diagramma a quelle
fondamentali (e una loro
combinazione)
1. composizione
2. selezione binaria
3. ciclo con precondizione false
true

24/09/2021 Fondamenti di Informatica - Prof. Clementini 64


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice relativo ai seguenti
problemi:

1. Risolvere un’equazione di secondo grado, considerando tutti i sottocasi


possibili.
2. Data una successione di valori interi letti da tastiera, contare quanti sono i
numeri dispari.
3. Fare la media aritmetica di n valori letti da tastiera.
4. Calcolo della potenza con esponente negativo.
5. Calcolo del fattoriale di un numero
6. Conversione da base qualsiasi a base 10. Approccio semplificato: l’ingresso di
ogni cifra avviene in ordine inverso rispetto al numero dato, in modo da evitare
il calcolo diretto della potenza; basi di partenza inferiori a 10.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 65


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice relativo ai
seguenti problemi:

7. Conversione da base qualsiasi a base 10. Approccio semplificato:


l’ingresso di ogni cifra avviene nello stesso ordine rispetto al numero
dato, utilizzando la formula di Horner; basi di partenza inferiori a 10.
8. Conversione da base 10 a base qualsiasi (divisioni successive).
Approccio semplificato: i resti visualizzati sul monitor sono da
considerarsi in ordine inverso; basi di partenza inferiori a 10.
9. Fare le conversioni di base con basi maggiori di 10.
10. Conversione da base 10 a base qualsiasi di numeri frazionari
(moltiplicazioni successive).

24/09/2021 Fondamenti di Informatica - Prof. Clementini 66


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice relativo ai
seguenti problemi:

11. Calcolare il valore di un numero romano.


12. Calcolare il numero di vocali e di consonanti in una sequenza di
lettere.
13. Fare la divisione tra due numeri con l’algoritmo delle sottrazioni
successive. Spiegazione: Si continua a sottrarre il divisore dal
dividendo finché l’ultimo resto ottenuto non sia minore del divisore;
l’ultimo resto corrisponde proprio al resto della divisione, mentre il
numero di sottrazioni eseguite corrisponde al quoziente.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 67


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice
relativo ai seguenti problemi:

14. Dato un numero e una cifra, vedere se la cifra fa parte del


numero. Esempio: la cifra 4 fa parte del numero 23481.
15. Trovare la lunghezza delle sottosequenze più lunghe di soli 0 e
soli 1 all’interno di una sequenza di 0 e 1.
16. Trovare la sottosequenza più lunga di cifre consecutive in una
sequenza di cifre. Spiegazione: per sottosequenza di cifre
consecutive si intende ad esempio ‘5678’; inoltre, la cifra ‘0’ va
intesa come consecutiva di ‘9’.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 68


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice
relativo ai seguenti problemi:

17. Calcolo dei numeri primi.


18. Calcolare i divisori di un numero intero.
19. Eseguire la scomposizione in fattori primi di un numero intero.
20. Stampa dei primi n numeri di Fibonacci. Spiegazione: I numeri
di Fibonacci sono definiti come f0 = 1, f1 = 1, fn = fn-1 + fn-2,
n>1. La serie inizia quindi con i numeri: 1, 1, 2, 3, 5, 8, 13, ….

24/09/2021 Fondamenti di Informatica - Prof. Clementini 69


Esercizi
• Disegnare il diagramma di flusso e scrivere lo pseudocodice relativo ai
seguenti problemi:

21. Calcolare la radice quadrata di x tramite l’algoritmo di Newton: la radice di


x al passo n+1 è data da xn+1 = (xn +x/xn)/2, in cui xn è la radice al passo n-
esimo. Il valore iniziale di xn è una prima stima della radice di x, per
esempio x/2. Interrompere il calcolo quando il valore assoluto della
differenza xn+1 –xn diventa minore di una certa costante piccola, per
esempio 1.0e–6.
22. Calcolare la costante e di Nepero (base dei logaritmi naturali) con la
formula: e = 1/0! + 1/1! + 1/2! + 1/3! + …… (arrestare la somma quando il
miglioramento della precisione non supera, per esempio, 1.0e–6). Nello
scrivere la funzione, fare in modo di non calcolare per ogni termine il
fattoriale, ma di costruirlo in modo incrementale.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 70


Esercizi
• Disegnare il diagramma di flusso e scrivere lo
pseudocodice relativo ai seguenti problemi:

23.Scrivere un algoritmo che calcoli il valore di π con la


seguente formula:
𝜋 1 1 1 1
=1− + − + −…
4 3 5 7 9
Interrompere il calcolo quando sono state raggiunte 8 cifre
significative

24/09/2021 Fondamenti di Informatica - Prof. Clementini 71


Esercizi
Scrivere un algoritmo per calcolare la Pasqua
Grazie al matematico Gauss abbiamo un metodo relativamente semplice per calcolare la data della
Pasqua:
- Fissato l’anno con “Y” si calcolano 3 parametri usando l’operatore modulo (MOD):
A = Y MOD 19
B = Y MOD 4
C = Y MOD 7
- Successivamente ulteriori due parametri:
D = ((19 * A) + 24) MOD 30
E = ((2 * B) + (4 * C ) + (6 * D) + 5 ) MOD 7
- Ma ora arriva il casino perché non si usano più formule matematiche ma un algoritmo:
• se (D + E) < 10, allora la Pasqua cade di marzo il giorno (D + E + 22)
• altrimenti sarà di aprile nel giorno (D + E − 9)
- In deroga alla regola di cui sopra ci sono due date particolari:
• se il risultato precedente è il 26 aprile, allora la Pasqua sarà invece il giorno 19 aprile;
• se il risultato precedente è il 25 aprile e anche D=28, E=6 e A>10, allora Pasqua sarà il 18 aprile

24/09/2021 Fondamenti di Informatica - Prof. Clementini 72


Esercizi
• Scrivere un algoritmo che a partire da una data, determina la
stagione (primavera, estate, autunno, inverno)

24/09/2021 Fondamenti di Informatica - Prof. Clementini 73


Esercizi
Data una lettera e un numero
che rappresentano una casella
nella scacchiera (per es. g5),
scrivere un algoritmo che
determina se una casella è
bianca o nera.

24/09/2021 Fondamenti di Informatica - Prof. Clementini 74


Esercizio
• Fare la conversione da base 10 a base qualsiasi di un numero con
parte intera e parte decimale.
• Esempio: 237,31
– 237 va convertito con l'algoritmo delle divisioni successive
– 0,31 va convertito con l'algoritmo delle moltiplicazioni successive
• Inoltre, bisogna far funzionare il codice anche con base di arrivo 16
• Poi scrivere un programma per la conversione da base qualsiasi a
base 10 (con parte intera e decimale)
• Infine scrivere un programma che fa la conversione da base
qualsiasi a base qualsiasi

24/09/2021 Fondamenti di Informatica - Prof. Clementini 75

Potrebbero piacerti anche