View
57.700
Download
13
Embed Size (px)
DESCRIPTION
Primi concetti sul significato di algoritmo e su come realizzarlo. Esempio di algoritmo per il calcolo di una somma di numeri interi
Citation preview
Il primo algoritmo
Lezione per la classe IIIA del Liceo Tecnico
ottobre 2008
problema Facciamo fare al computer il seguente lavoro: data una lista cartacea di numeri interi
positivi che possono rappresentare diversi dati, ad
esempio supponiamo che siano i voti di tutti gli studenti di
una classe determinare il voto medio della classe.
Come risolvere il problema ? La soluzione del precedente problema viene
realizzata per mezzo di un procedimento di pensiero chiamato “ALGORITMO”
Si studia come realizzare l’algoritmo per risolvere il problema dato
Quindi si adatta l’algoritmo al computer Il computer esegue l’algoritmo Si ottiene la soluzione del problema
Algoritmo e metodologia di un algoritmo Anzitutto, prima di passare all’azione vera e
propria, bisogna riflettere un attimo per vedere se esiste una metodologia che ci possa aiutare nella soluzione del problema
Esiste una metodologia generale che ci insegna a costruire algoritmi ?
Che cosa è un algoritmo Che cosa è una metodologia di un algoritmo ? Una metodologia è un metaAlgoritmo, ossia
un algoritmo di un algoritmo che ci insegna come costruire algoritmi.
Definizione di algoritmo Un algoritmo è un programma di un computer
che calcola qualcosa È una sequenza finita di istruzioni, usate per il
calcolo e l’elaborazione dei dati È una lista di azioni, istruzioni ben definita per
eseguire un compito È un insieme di fasi con un ordine preciso
eseguite l’uno dopo l’altra per fare un determinato lavoro
È un insieme ordinato di step non ambigui, eseguibili , completabili in un tempo finito
Qualche osservazioni sulla definizione Si può pensare ad una condizione chi violi la
definizione di algoritmo? Ad esempio esistono dei casi in cui la sequenza delle istruzioni non è finita ? il calcolo non possa terminare in un periodo di
tempo finito ? La risposta è si.
Può accadere che ci sia un blocco di istruzioni che vengano ripetute per sempre perché la condizione di uscita dalla iterazione non è mai soddisfatta (per un errore di programmazione)
Pertanto anche se il numero delle istruzioni è finito, alcune di esse sono ripetute indefinitamente perché niente permette l’interruzione del processo
Perché scrivere un algoritmo ? Per comandare il computer di fare qualcosa,
bisogna scrivere un programma. Scrivere un programma significa dire al
computer, passo dopo passo, esattamente che cosa deve fare.
Il computer per fornire la soluzione ad un problema, esegue meccanicamente il programma, ossia ciascuna istruzione che gli viene fornita.
Significato di algoritmo Quando dite al computer che cosa deve fare,
dovete pure decidere come deve farlo Ecco che, nel progettare “il come”, nasce
l’algoritmo del computer L’algoritmo è la tecnica fondamentale
utilizzata per far si che un lavoro sia svolto dal computer.
Atteggiamento mentale per affrontare un algoritmo Per fare un algoritmo occorre spezzare,
frantumare, analizzare, decomporre il lavoro da fare o il compito/attività da eseguire in tante piccole parti o semplici attività/istruzioni
Lo scopo è quello di individuare delle fasi del lavoro e in quale sequenza devono essere eseguite per portare a termine il lavoro o compito assegnato
Occorre creare una procedura di lavoro
Algoritmo dell’algoritmo: procedimento risolutivo Comprendere il problema
Identificare i dati noti Identificare le operazioni Identificare le incognite del problema
Costruire la soluzione del problema Stabilire quali sono le fasi da eseguire Stabilire la sequenza di queste fasi
Comprendere il problemaComprendere il problema: Analisi testuale per identificare le
informazioni necessarie Saper riconoscere quali sono i dati esaminando i
nomi del testo saper riconoscere quali sono le operazioni
richieste dal problema esaminando i verbi del testo
Intervistare gli esperti del dominio del problema per comprendere il significato dei dati e delle operazioni
I dati del problema I dati del problema
Quelli noti di input Quelli incogniti di output Quelli che servono per fare operazioni intermedie
di supporto al lavoro Tutti questi dati costituiscono le variabili e
costanti del problema. A ciascuna di esse attribuiamo
un nome, un tipo di dati (intero, booleano, stringa, carattere,…)
Le operazioni Dall’analisi del testo del problema, con
l’intervista degli esperti, con un procedimento di decomposizione funzionale si arriva a stabilire quali sono le fasi del lavoro e per ciascuna di esse quali sono le sue operazioni.
Le operazioni dipendono dalla scelta fatta delle variabili, anche perché agiscono su di esse, e le modificano
Retroazione La scelta delle variabili
influenza la scelta delle operazioni
La scelta delle operazioni influenza la scelta delle variabili
C’è chiaramente una retroazione e prima che si possa pervenire ad una scelta equilibrata e soddisfacente occorre fare più tentativi
D’altra parte questo si riflette nella programmazione che è sicuramente iterativa e incrementale
Scegli variabili
Scegli operazioni
La cassetta degli strumenti La cassetta degli strumenti per lavorare su di
un algoritmo contiene quattro strumenti principali: La sequenza di istruzioni L’alternativa La iterazione La ricorsione
Forma mentis di un creatore di algoritmi
Lo sforzo mentale di soluzione del problema è collegato non solo all’individuazione dei dati e delle operazioni su di esse, ma anche soprattutto nel cercare di scoprire le iterazioni o le ricorsioni che facilitino la meccanizzazione della soluzione.
Bisogna tenere la soluzione del problema ben stretta nel proprio pugno
Questo risultato si ottiene ricercando ossessivamente blocchi di istruzioni ripetitive per applicargli l’iterazione o quando necessita la ricorsione
Quando tutto il liquido del ragionamento è strutturato con opportune iterazioni, riusciamo a contenerlo tutto e si riesce a ridurre l’estensione di processi complessi
Questi fenomeni complessi ristrutturati con l’iterazione sono facilmente addomesticabili e sono così trasportabili su di un computer per essere meccanizzati.
La tecnica dell’algoritmo L’utilizzo di blocchi di istruzioni ripetitive
influenza, a sua volta, la scelta delle variabili e per contraccolpo anche la scelta delle operazioni
Ne consegue che la tecnica più importante nel costruire un algoritmo è l’uso dei costrutti di iterazione e di ricorsione
Ragionamenti intuitivi mentali Nell’ideare un algoritmo torna utile anche
pensare ai ragionamenti intuitivi che facciamo mentalmente per risolvere alcuni problemi
Talvolta la costruzione di un algoritmo si può avvalere di questi ragionamenti
Si tratta proprio di rendere espliciti questi ragionamenti renderli concreti ancorandoli con i costrutti dell’algoritmo
Costruiamo il primo algoritmo Supportati da questo bagaglio di strumenti
e di suggerimenti possiamo cimentarci nella costruzione del nostro primo algoritmo
Per fare questo ci atteniamo alla sequenza di fasi che emergono dall’algoritmo dell’algoritmo
Applichiamo questo procedimento risolutivo al problema del calcolo della media di una lista di numeri che abbiamo enunciato all’inizio della presentazione
Prepariamo tutti i materiali del problema: dati in input Anzitutto ci occorre la lista
dei numeri Abbiamo la lista cartacea
allegata, sotto la forma di una tabella
Di questa tabella l’analisi testuale del testo del problema ci dice che ci occorre solo la colonna dei voti
La colonna dei voti sono i dati noti, ossia l’input all’algoritmo
nome studente classe materia data voto Bianchi IIIAL Italiano 17/09/08 6 Rossi IIIAL Matematica 17/09/08 5 Tizio IIIAL Storia 17/09/08 7 Bianchi IIIAL Inglese 18/09/08 6 Caio IIIAL Storia 18/09/08 5 Sempronio IIIAL Sc. Informatiche 22/09/08 7 Rossi IIIAL Sc. Informatiche 22/09/08 8 Bianchi IIIAL Sc. Elettriche 22/09/08 4 Tizio IIIAL Inglese 25/09/08 6 Mario IIIAL Matematica 25/09/08 6 Bianchi IIIAL Sc. Informatiche 25/09/08 7 Sempronio IIIAL Italiano 25/09/08 5 Qui IIIAL Storia 01/10/08 6 Rossi IIIAL Sc. Elettriche 01/10/08 5 Quo IIIAL Italiano 02/10/08 6 Tizio IIIAL Sc. Meccaniche 02/10/08 5 Quo IIIAL Sc. Informatiche 02/10/08 7 Qua IIIAL Sc. Meccaniche 02/10/08 9 Rossi IIIAL Matematica 02/10/08 3 Bianchi IIIAL Sc. Meccaniche 02/10/08 5 Mario IIIAL Sc. Elettriche 03/10/08 5 Qua IIIAL Inglese 03/10/08 6 Qui IIIAL Storia 03/10/08 6 Sempronio IIIAL Sc. Elettriche 03/10/08 6 Mario IIIAL Italiano 03/10/08 7 Bianchi IIIAL Sc. Informatiche 03/10/08 6 Tizio IIIAL Matematica 06/10/08 5 Rossi IIIAL Inglese 06/10/08 2 Sempronio IIIAL Sc. Elettriche 06/10/08 9
Analisi testuale: dati di ouptut In questo esempio,
essendo il testo del problema molto breve e semplice, è facile ricavare quali sono i dati incogniti, ossia in output
Il voto medio della classe
data una lista cartacea di numeri interi positivi che possono rappresentare diversi
dati, ad esempio supponiamo che siano i voti di tutti
gli studenti di una classe determinare il voto medio della
classe.
Intervistare gli esperti Fare una media di numeri è il lavoro da eseguire Intervistiamo un esperto del dominio del
problema, un matematico statistico. Egli ci dice che l’operazione della media è:
Quindi dobbiamo fare due operazioni La somma di tutti i voti da 1 a al numero complessivo dei
voti N Dividere questa somma per il numero complessivo dei
voti N
N
iivoto
Nmedia
1
1
Le operazioni In questo caso, determinata la soluzione del
problema con una formula matematica, ne consegue che le operazioni da eseguire sono due operazioni aritmetiche: Somma Divisione
Gli operandi (i dati) della somma sono i singoli valori dei voti
Gli operandi ( i dati) della divisione sono la somma totale dei voti e il numero complessivo dei voti
La fasi dell’algoritmo somma Possiamo individuare due fasi di lavoro
Sommatoria di tutti i voti Calcolo della media matematica della sommatoria
La prima fase è un’attività ripetitiva Qui si può vedere quale è l ragionamento intuitivo
mentale Nel caso in cui noi facciamo a memoria questo
calcolo esplicitando la nostra attività: Dedichiamo una cella della nostra memoria Sommiamo il primo numero a questa zona di memoria Continuiamo a sommare i numeri successivi alla
medesima cella di memoria finchè tutti i numeri sono terminati
Contiamo quanti sono i numeri sommati Alla fine dividiamo la somma complessiva per il
numero complessivo dei numeri
Revisione delle operazioni1. Somma dei voti2. Conteggio del numero dei voti3. Divisione della somma per il conteggio del
numero dei voti Le prime due operazioni sono ripetitive ed
avvengono nella prima fase dell’algoritmo La terzo operazione è un’unica istruzione
che viene eseguita in una seconda fase del lavoro,al termina della prima fase
Stesura dell’algoritmo Si legge un voto alla volta Si incrementa una sommatoria parziale Si incrementa il contatore dei numeri Si ripete questo blocco di istruzioni finchè ci sono
numeri nella lista cartacea Quando i numeri sono terminati la sommatoria
parziale è la sommatoria S di tutti i voti della lista Il contatore è la somma N del numero di tutti i
voti Si divide la sommatoria totale per il numero
totale dei voti N e si ottiene media=S/N il risultato desiderato, ossia la media dei voti
Soluzione alternativa Avremmo anche potuto caricare tutti i voti della
lista ciascuno in una sua area di memoria Quindi avremmo potuto fare un’unica istruzione
di somma sommando contemporanemente tutti i numeri
Contare il totale dei numeri della lista cartacea Ed infine calcolare la media dei voti come prima Tuttavia questa seconda soluzione non comporta
l’utilizzo della iterazione e ci piace di meno perché l’operazione di somma cambia al variare del numero dei voti da sommare
Invece il sistema iterativo non muta con il numero dei voti da sommare ed è quindi preferibile al precedente metodo
Quale è la soluzione di algoritmo preferibile ? Quando per fare un algoritmo ho diverse possibilità Occorre scegliere quelle che non devo cambiare al
mutare di dati nozionistici, quali il numero dei dati o il valore di questi dati
Le soluzioni che utilizzano blocchi di istruzioni ripetitivi con l’ausilio di costrutti tecnici quali iterazione e ricorsione sono particolarmente simpatici perché resistono alle modifiche indotte dal mutato ambiente nozionistico
Inoltre queste soluzioni sono preferibili, come già detto, perché spesso sono le uniche a consentire di dominare il liquido e sfuggente ragionamento della nostra mente
Per concretizzare l’algoritmo è utile un disegno (il flowchart) L’inizio e la fine
dell’algoritmo lo rappresentiamo con una forma geometrica ovale
Un’operazione di input e di output con un parallelogrammo
Un’operazione interna con un rettangolo
Una domanda con un rombo
Il collegamento tra queste forme geometriche tramite frecce orientate che rappresentano il verso della sequenza delle istruzioni
Inizio/fine
Input/output
domanda
calcolo
Le variabili del nostro algoritmo Leggiamo dalla lista cartacea un numero alla
volta Occorre una cella di memoria per memorizzare il
numero letto, chiamiamola “numero” Occorre una cella di memoria per memorizzare la
sommatoria parziale, chiamiamola “somma” Occorre una cella per calcolare il numero dei voti,
chiamiamola “contaVoti” Occorre una cella di memoria per calcolare la
media dei voti, chiamiamola “media” Occorre individuare un costrutto di iterazione
Il flowchart della media dei votiMediaVot
i
Leggo voto
somma= somma + voto
contaVoti=contaVoti+1
altri voti ?
media=somma/contaVoti
scrivi media
fine
si
Scrittura dell’algoritmo in pseudoItaliano MediaVoti
ripeti finchè ci sono voti nella lista leggi voto aggiungi voto a somma Incrementa di uno contaVoti
dividi somma per contaVoti ed assegna il risultato a media
scrivi media fine
Scrittura dell’algoritmo in un linguaggio di programmazione ( C language )
#include <stdio.h> int voto; int somma; int contaVoti; void calcolaMedia(){
◦ numero=0;◦ somma=0;◦ contaVoti=0;◦ while (numero!=99999){
printf(“digita il numero, se non ci sono altri numeri digita 99999”); scanf(“%d”,&numero); if (numero is not numeric)
continue; somma=somma+numero; contaVoti=contaVoti+1;
}
media=somma/contaVoti;
printf(“la media dei voti = ,%d”,media);}main() {
calcolaMedia();}
Modi di scrittura di un algoritmo Ci sono diversi modi per scrivere un algoritmo:
Un disegno con il flowchart Un linguaggio naturale (pseudo inglese/italiano…) Un linguaggio di programmazione
In questo caso occorre aggiungere degli elementi di dettaglio affichè l’algoritmo sia eseguibile dal computer Definizione di variabili Azzeramento di variabili Un costrutto per l’iterazione da scegliere tra quelli disponibili
nel linguaggio di programmazione usato Una condizione per controllare l’uscita dall’iterazione Delle istruzioni per la lettura e la scrittura dei dati