Tipo1. Analisi e descrizione dell` algoritmo Esempio1. Dato in input i

TIPO1. Analisi e descrizione dell’ algoritmo
Esempio1. Dato in input i secondi dare in output ore, minuti e secondi.
Input 3725
Output: 1h, 2 min, 5 sec
SOLUZIONE:
ANALISI.
Poiché
1h =3600 sec e
1 min= 60 sec,
per trovare ore, min e sec occorre fare
Ore = Sec/3600
Resto = Sec – Ore*3600 (oppure Resto = Sec % 3600)
Min = Resto/60
Sec= Resto – Min*60 (oppure Sec = Resto%60)
Specifiche concettuali.
Dai di input: i secondi
Dati di output: Ore, Min Sec
Modello dei dati.
Nome
variabile
Sec
Tipo di
dato
Intero pos
Ore
Min
Resto
Intero pos
Intero pos
Intero pos
Descrizione
Var di input che memorizza i secondi iniziali e output che
memorizza i secondi residui.
Var di output che contiene le ore
Var di output che contiene i minuti
Var di lavoro che contiene i minuti residui delle ore
SPECIFICHE PER IL TESTING
Nessuna.
ALGORITMO.
INIZIO
Min <-- Resto / 60
R Sec
Sec <-- Resto % 60
Ore <-- Sec / 3600
W ore, min, sec
Resto <-- Sec % 3600
FINE
1
Esempio2. Un rappresentante può scegliere di essere pagato nei seguenti modi:
a) 0.5 € /km;
b)250 € fissi più il rimborso della benzina.
Conoscendo i chilometri percorsi e sapendo che la sua auto percorre 15 km con un litro di benzina e
che la benzina costa2 € /lt, determinare se gli conviene il pagamento a o b.
Input 600
Output: soluz_a = 300; soluz_b 330; Più conveniente soluz_b: 330
SOLUZIONE1
ANALISI.
Si calcola il rimborso per le due soluzioni e poi si prende il massimo
a) Rimborso_a = 0,5 * KmPercorsi
b) Rimborso_b = 250 + LitriTotali*2, dove LitriTot = KmPercorsi/15
Specifiche concettuali.
Dai di input: KmPercorsi
Dati di output: Rimborso_a, Rimborso_b, Massimo
Modello dei dati.
Nome variabile
KmPercorsi
Rimborso_a
Rimborso_b
Massimo
LitriTot
Tipo di
dato
Intero pos
Reale
Reale
Reale
Reale
Descrizione
Var di input che memorizza i Km percorsi dal rappresentante
Var di output che contiene il rimborso per la soluzione a
Var di output che contiene il rimborso per la soluzione b
Var di output che contiene il rimborso più conveniente
Var di lavoro (opzionale) che contiene i litri consumati
SPECIFICHE PER IL TESTING. Nessuna.
2
ALGORITMO.
INIZIO
R KmPercorsi
Rimborso_a <-- 0,5 * KmPercorsi
LitriTot <-- KmPercorsi / 15
Rimborso_b <-- 250,00 + LitriTot * 2,00
W Rimborso_a, Rimborso_b
massimo <-- Rimborso_b
falso
Rimborso_a
>
Rimborso_b
W "Più conveniente b"
massimo <-- Rimborso_a
vero
W "Più conveniente a"
W massimo
FINE
3
SOLUZIONE2 (Uso di costanti)
Nella soluzione degli esercizi si preferisce sempre utilizzare nomi invece che numeri. Lì dove ci sono delle
quantità numeriche fisse si usa un nome identificatore simbolico (un nome) invece del numero stesso.
Chiamiamo questi identificatori COSTANTI e li definiamo nella tabella dei dati (Vedi tabella dei dati
successiva). Successivamente nel flow chart uso i nomi invece dei numeri. Il diagramma risulta più
comprensibile.
ANALISI.
Si calcola il rimborso per le due soluzioni e poi si prende il massimo
a) Rimborso_a = 0,5 * KmPercorsi
b) Rimborso_b = 250 + LitriTotali* 2 ,
dove LitriTot = KmPercorsi/15
Ricorda di andare a sostituire ogni numero con una costante
Specifiche concettuali.
Dai di input: KmPercorsi
Dati di output: Rimborso_a, Rimborso_b, Massimo
Modello dei dati.
Nome variabile
Rimborso_a
Tipo di
dato
Intero
pos
Reale
Rimborso_b
Reale
Massimo
Reale
LitriTot
Reale
RIMBORSO_AL_KM
KM_CON_UN_LT
FISSO
COSTO_AL_LT
Intero
Intero
Intero
Reale
KmPercorsi
Cost (val) Descrizione
/ Var
Var
Var di input che memorizza i Km percorsi dal
rappresentante
Var
Var di output che contiene il rimborso per la
soluzione a
Var
Var di output che contiene il rimborso per la
soluzione b
Var
Var di output che contiene il rimborso più
conveniente
Var
Var di lavoro (opzionale) che contiene i litri
consumati
Cost 0,5
Rimborso per ogni km
Cost 15
Consumo dell’automobile
Cost 250 Rimborso fisso
Cost 2
Costo della benzina al litro
SPECIFICHE PER IL TESTING. Nessuna.
4
ALGORITMO.
INIZIO
R KmPercorsi
Rimborso_a <-- RIMBORSO_AL_KM * KmPercorsi
LitriTot <-- KmPercorsi / KM_CON_UN_LT
Rimborso_b <-- FISSO + LitriTot * COSTO_AL_LT
W Rimborso_a, Rimborso_b
massimo <-- Rimborso_b
falso
Rimborso_a
>
Rimborso_b
W "Più conveniente b"
massimo <-- Rimborso_a
vero
W "Più conveniente a"
W massimo
FINE
5
SOLUZIONE3 (generalizzazione su consumo automobile e costo benzina)
Per rendere più generale l’algoritmo si riformula la traccia per rendere l’algoritmo utilizzabile per un
qualsiasi rappresentante con un qualsiasi auto e costo variabile della benzina. E’ abbastanza ovvio che il
costo della benzina è variabile e anche i rappresentanti abbiano auto diverse.
FORMULAZIONE GENERALE DEL PROBLEMA.
Un rappresentante può scegliere di essere pagato nei seguenti modi:
a) 1.5 € /km
b)100 € fissi più il rimborso della benzina.
Conoscendo i chilometri percorsi, il consumo al litro dell’ auto del rappresentante, e il costo al litro
della benzina, scrivere un algoritmo che determina se è più conveniente il pagamento a o b.
In questa formulazione più generale il costo della benziona e il consumo dell’auto sono dati di input
e non più costanti.
ANALISI.
Si calcola il rimborso per le due soluzioni e poi si prende il massimo
a) Rimborso_a = 1,5 * KmPercorsi
b) Rimborso_b = 100 + LitriTotali*COSTO_AL_LT,
dove LitriTot = KmPercors i /KM_CON_UN_LT
Specifiche concettuali.
Dai di input: KmPercorsi
Dati di output: Rimborso_a, Rimborso_b, Massimo
Modello dei dati.
Nome variabile
Rimborso_a
Tipo di
dato
Intero
pos
Reale
Rimborso_b
Reale
Massimo
Reale
LitriTot
Reale
RIMBORSO_AL_KM
KmConUnLt
FISSO
CostoAlLt
Intero
Intero
Intero
Reale
KmPercorsi
Cost (val) Descrizione
/ Var
Var
Var di input che memorizza i Km percorsi dal
rappresentante
Var
Var di output che contiene il rimborso per la
soluzione a
Var
Var di output che contiene il rimborso per la
soluzione b
Var
Var di output che contiene il rimborso più
conveniente
Var
Var di lavoro (opzionale) che contiene i litri
consumati
Cost 1,5
Rimborso per ogni km
Var
Var di input consumo dell’automobile
Cost 100 Rimborso fisso
var
Var di input costo della benzina al litro
SPECIFICHE PER IL TESTING. Nessuna.
ALGORITMO. Per esercizio.
6
Esempio3. . In un certo giorno dell’anno nella classe 3° Ainf sono presenti 25 allievi su 30. Determinare la
percentuale dei presenti e quella degli assenti.
FORMULAZIONE GENERALE DEL PROBLEMA.
Calcolare la percentuale degli allievi presenti e quella degli assenti in una classe in un certo giorno,
dati il totale degli allievi e il numero degli assenti.
ANALISI.
Occorre eseguire le seguenti operazioni
PercentualePresenti = Presenti/TotaleAllievi * 100
PercentualeAssenti = 100- PercentualePresenti
Specifiche concettuali.
Dai di input: il totale degli allievi ed il numero di presenti
Dati di output: la percentuale di allievi presenti e la percentuale di allievi assenti
Modello dei dati.
Nome variabile
TotaleAllievi
Presenti
PercentualePresenti
PercentualeAssenti
Tipo di
dato
Intero
Intero
Reale
Reale
Descrizione
Var di input che memorizza il totale degli allievi
Var di input che contiene il numero di allievi presenti
Var di output che rappresenta la percentuale degli allievi presenti
Var di output che rappresenta la percentuale degli allievi assenti
SPECIFICHE PER IL TESTING.
Occorre verificare che il numero totale di allievi sia >0. Nel caso il numero di allievi è negativo
ovviamente il programma produrrà un calcolo che non ha senso. Nel caso invece sia uguale a zero il
programma va in errore poiché non posso fare un divisione per zero.
ALGORITMO.
INIZIO
R
TotaleAllievi, Presenti
TotaleAllievi > 0
falso
vero
PercentualePresenti <-- (Presenti/TotaleAllievi) * 100
W
"Errore TotaleAllievi deve essere > 0"
PercentualeAssenti <-- TotaleAllievi - PercentualePresenti
W
PercentualeAssenti, PercentualePresenti
FINE
7
Esempio4. Stampa dei primi n numeri natural parii, con n intero positivo letto da input.
ANALISI.
IL procedimento risolutivo è il seguente: occorre un ciclo iterativo in cui ad ogni passo si esegue una
singola azione: la stampa del numero. L’azione va iterata per n volte. Per contare usiamo un
contatore.
Specifiche concettuali.
Dai di input: n (quanti numeri si vogliono stampare)
Dati di output: stampa di a ( dove a è il numero naturale al passo attuale)
Modello dei dati.
Nome variabile
n
Cont
a
Tipo di
Descrizione
dato
Intero pos Var di input che memorizza quanti numeri stampare
Intero pos Var contatore che memorizza un numero che va avanti in modo
progressivo
Intero pos Var di output , numero naturale da stampare
SPECIFICHE PER IL TESTING. Nessuna
ALGORITMO.
INIZIO
Rn
cont <-- 0
a <-- 0
vero
cont < n
falso
Wa
FINE
a <-- a + 2
cont <-- cont +1
8
Esempio5. Data l’equazione 2x+1= 0 trovare la soluzione.
SOLUZIONE (da completare)
FORMULAZIONE GENERALE DEL PROBLEMA.
Riformula il problema in modo generale, cioè l’algoritmo deve risolvere tutti i problemi di questa classe.
ANALISI.
Descrivi qui il procedimento a parole
Specifiche concettuali.
Descrivi input e output
Modello dei dati.
Descrivi le variabili e le costati che utilizzi nel tuo algoritmo
Nome variabile
Tipo di
dato
Cost (val) Descrizione
/ Var
SPECIFICHE PER IL TESTING.
Occorre indicare qui eventuali verifiche da fare sulle variabili affinché l’algoritmo non produca
risultati errati oppure termini in modo anomalo. Il comportamento dell’algoritmo anche
quando i valori di ingresso sono ‘critici’ o ‘ai limiti’ è fondamentale. L’algoritmo deve in
ogni caso produrre risultati attendibili.
ALGORITMO.
INIZIO
1
R a, b
2
falso
vero
a = 0
5
3
6
x <-- b / a
7
W "La soluzio è: ", x
W " Impossibile"
FINE
9
4
vero
falso
b = 0
W " Indeterminata"
Esempio6. Dati tre numeri interi a, b, c ordinarli in ordine crescente
SOLUZIONE (da completare)
FORMULAZIONE GENERALE DEL PROBLEMA.
Riformula il problema in modo generale, cioè l’algoritmo deve risolvere tutti i problemi di questa classe.
ANALISI.
Descrivi qui il procedimento a parole
Specifiche concettuali.
Descrivi input e output
Modello dei dati.
Descrivi le variabili e le costati che utilizzi nel tuo algoritmo
Nome variabile
Tipo di
dato
Cost (val) Descrizione
/ Var
SPECIFICHE PER IL TESTING.
Occorre indicare qui eventuali verifiche da fare sulle variabili affinché l’algoritmo non produca
risultati errati oppure termini in modo anomalo. Il comportamento dell’algoritmo anche
quando i valori di ingresso sono ‘critici’ o ‘ai limiti’ è fondamentale. L’algoritmo deve in
ogni caso produrre risultati attendibili.
10
ALGORITMO.
INIZIO
1
R a, b, c
2
falso
vero
a<b
3
8
falso
vero
falso
a<c
10
9
falso
4
5
falso
vero
b<c
vero
b<c
vero
W a, b, c
a<c
W b, a, c
7
12
6
11
W c, a, b
W c, b, a
W a, c, b
W b, c, a
FINE
Esercizi Proposti (Tipo1).
1. Trovare le soluzioni di una equazione di secondo grado. L’algoritmo fornisce le seguenti risposte:
 “Equazione di primo grado” se il termine di secondo grado è nullo
 “Due soluzioni reali e coincidenti uguali a ……” se è un quadrato perfetto
 “Due soluzioni reali e distinte x1=……, x2=
” (se il delta è positivo)
 “Non ci sono soluzioni reali” (se il delta è negativo)
2.
3.
4.
5.
6.
7.
8.
9.
10.
Ordinare tre numeri interi a, b, c in ordine decrescente
Trovare il massimo tra tre numeri interi
Dati tre lati di un triangolo, dire se è equilatero, isoscele o scaleno.
Scrivere un algoritmo che legge in input una sequenza di numeri interi positivi chiusa dallo zero e
stampa la percentuale dei pari e dei dispari
Scrivere un algoritmo che stampa la tabellina del 9.
Scrivere un algoritmo che stampa le potenze di 2 fino a 210 . (Usare l’operatore ^ nel flow chart)
Scrivere un algoritmo che dato in input un numero intero n, stampa le potenze di 2 fino a 2n.
Dato un numero n, stampare tutti i suoi fattori
Leggere da input una terna di numeri interi positivi a,b, c fino a quando non si ottiene una terna
pitagorica.
11
TIPO2. Tabella di traccia
Esempio1. Calcolo del prodotto di due numeri interi letti da input con il metodo delle somme
successive
INIZIO
1
R a, b
2
p <-- 0
3
cont <-- 0
4
cont < b
cont <-- cont +1
6
p <-- p + a
5
vero
falso
7
W p
FINE
In questo FLOW CHART sono stati aggiunti i numeri dei blocchi in modo da facilitare la stesura
della ‘tavola di traccia’ che è uno strumento grazie al quale si può esaminare il flusso di
elaborazione dell’algoritmo e verificarne la correttezza.
Si tratta di una tabella in cui si indicano nelle colonne i nomi delle variabili (almeno le più
importanti e significative per l’elaborazione) e nelle righe i passi dell’algoritmo che via via si
svolgono partendo da valori di input scelti a piacere; può essere utile inserire anche una
colonna in cui si indica il valore di verità della condizione da cui dipende l’esecuzione
dell’iterazione.
Quando si esegue la tavola di traccia si deve avere l’accortezza di esaminare il comportamento
dell’algoritmo anche quando i valori di ingresso sono ‘critici’ o ‘ai limiti’; nel caso del prodotto
avremo tale situazione per a uguale a zero, b uguale a zero o entrambi uguali a zero.
Vediamo una prima tavola di traccia del nostro algoritmo scegliendo due valori «normali» delle
variabili, ad esempio a=5, b=3:
12
Il valore di output è, correttamente, 15.
Adesso compiliamo la tavola di traccia di uno dei casi critici, ad esempio con a=7 e b=0:
Il valore di output è, correttamente, 0.
Infine vediamo un altro caso abbastanza particolare con a=8 e b=1:
13
TIPO3. Equivalenza tra algoritmi
Dati due algoritmi dire se sono equivalenti.
INIZIO
R a, b, c
1
3
2
falso
(a = 0)
AND
(b = 0)
vero
W " Indeterminata"
4
falso
5
(a = 0)
AND
(b ! = 0)
vero
W " Impossibile"
6
falso
vero
a ! = 0
x <-- b / a
7
W "La soluzio è: ", x
8
FINE
INIZIO
1
R a, b, c
3
2
(a = 0)
AND
(b = 0)
falso
4
falso
6
x <-- b / a
7
W "La soluzio è: ", x
(a = 0)
AND
(b ! = 0)
vero
W " Indeterminata"
5
vero
W " Impossibile"
FINE
14
TIPO4. Programmazione non strutturata
Esempi di programmazione non strutturata
15