Quindi: - il pseudocodice è molto più vicino ad agevolare il passaggio da algoritmo a
programma
- il diagramma di flusso è molto più comprensibile se dobbiamo invece spiegare
l’algoritmo a qualcuno che di programmazione non ne capisce nulla
PSEUDOCODICE DIAGRAMMA DI FLUSSO(flow chart)
• è quasi una traduzione testuale dei concetti • Rappresentazione grafica della sequenza di
utilizzati nello sviluppo di un programma. operazioni necessarie alla risoluzione di un
problema
• è possibile il libero inserimento di parti testuali, • Sono facilmente intuibili e comprensibili, anche
mentre il successivo utilizzo di primitive e simboli per chi non ha competenze informatiche
consente di dare una forma completa
all'algoritmo
DIAGRAMMA DI FLUSSO(flow chart)
Nel diagramma di flusso abbiamo dei blocchi fondamentali che sono:
• Blocchi di inizio e fine→ Questi
rappresentano rispettivamente in che
punto inizia e in che punto finisce
l’algoritmo. Notiamo ,quindi, che il blocco
di inizio è dotato di una freccia uscente e
nessuna freccia entrante e il blocco di
fine invece è dotato di una freccia entrante e nessuna freccia uscente.
• Blocchi di elaborazione→ In genere vengono rappresentati con dei
rettangoli, hanno una freccia entrante e una freccia uscente(il ché vuol
dire che è un passo generico del mio algoritmo) dove ci saranno delle
istruzioni con operazioni tendenzialmente aritmetico-logiche come ad
esempio: la somma, la differenza…
o anche la descrizione di un’operazione un po’ complicata
• Blocchi di Input/output→ In questo caso vengono rappresentati con
questi parallelogrammi e vengono utilizzati proprio per far risaltare agli
occhi immediatamente quali sono i punti dell’algoritmo in cui è richiesta
un’interazione con l’utente. Anche qui possiamo avere sia frecce entranti che uscenti. Il fatto che
siano storte serve proprio a definire che in questo punto c’è un’interazione con l’utente e viene chiesto
o di leggere qualcosa (quindi input) o di scrivere qualcosa (quindi output)
• Blocco di decisione→ In questo caso abbiamo un
rombo in cui entra una freccia entro nel rombo dove
→
io devo scrivere qual è la condizione cui escono
→da
due frecce: VERA e FALSA
Notiamo che a parte i blocchi di inizio e fine, gli altri rappresentano le primitive (vedi sopra):
in/out read/write; Istruzioni→ assign; Condizione→ if…then…else
→
Notiamo però che non vediamo la primitiva di ripetizione, quindi il ciclo while. (Dopo vedremo il
perché)
RICERCA DI UN ALGORITMO
Esistono diverse strategie per ricercare un algoritmo:
• Strategie elementari (trial-&-error, generate-&-test, guess-&-check): Considerare/costruire una
possibile soluzione e verificare solo a posteriori se rispetta tutti i vincoli→ significa che io posso
generare più o meno casualmente delle soluzioni e poi verificare se la soluzione è corretta o meno.
Questo, quindi, è un modo con cui un algoritmo potrebbe essere creato (non progettato ma creato)
[detto in parole semplici: faccio tante prove fino a quando non riesco a generare delle soluzioni che
effettivamente risultano corrette] Questa strategia in realtà non è molto considerata dagli
→
informatici
• Strategie top-down: Scomposizione in sottoproblemi buona leggibilità Questa è una strategia
→ →
di progettazione Ho un problema molto complicato ma viene comodo pensare di risolverlo come
→
se fossero tanti sottoproblemi→ da questo il nome top-down. Quando approccio la progettazione di
un algoritmo in strategia top-down in genere l’algoritmo che ne risulta è ben leggibile perché
tendenzialmente io ho la visione d’insieme del mio problema generale e poi la definizione dei vari
sottoblocchi
• Strategie bottom-up: Opposte a quelle top-down, pongono una maggiore attenzione ai dati e a
funzioni che operino su di essi, per poi combinarle al fine di risolvere il problema di più "alto" livello →
In questo caso si parte dai dati e si da una maggiore rilevanza alle operazioni di base che lavorano su
quei dati e a come comporle per arrivare ad un problema generale.
ESEMPIO TRIAL-&-ERROR
Problema: Ordinare alfabeticamente i tre cognomi: "ROSSI", "BIANCHI" e "VERDI"
COME FACCIO A REALIZZARE UN ALGORITMO CHE RISOLVA QUESTO PROBLEMA?
Drunk man sort! (aka stupid sort, …) {L’ordinamento dell’ubriaco→perché in realtà sta cercando di
ordinare queste cose senza la minima logica , ci prova fino a quando qualcuno gli dice ok! li hai
messi in ordine }→ Questo algoritmo genera casualmente una permutazione dei 3 cognomi fino a
quando la permutazione non risulti ordinata correttamente .
Il problema è che non si sa quando terminerà→ perché finché il verificatore non gli dice okay hai
generato la soluzione corretta non finirà mai, o meglio potrebbe non finire in tempo ragionevole.
-
Difese primitive
-
Primitive e Funzioni Integrali
-
Integrali curvilinei e primitive - Esercizi
-
Integrali curvilinei e primitive - Soluzioni