come costruire un algoritmo

35
Il primo algoritmo Lezione per la classe IIIA del Liceo Tecnico ottobre 2008

description

Primi concetti sul significato di algoritmo e su come realizzarlo. Esempio di algoritmo per il calcolo di una somma di numeri interi

Transcript of come costruire un algoritmo

Page 1: come costruire un algoritmo

Il primo algoritmo

Lezione per la classe IIIA del Liceo Tecnico

ottobre 2008

Page 2: come costruire un algoritmo

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.

Page 3: come costruire un algoritmo

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

Page 4: come costruire un algoritmo

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.

Page 5: come costruire un algoritmo

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

Page 6: come costruire un algoritmo

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

Page 7: come costruire un algoritmo

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.

Page 8: come costruire un algoritmo

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.

Page 9: come costruire un algoritmo

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

Page 10: come costruire un algoritmo

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

Page 11: come costruire un algoritmo

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

Page 12: come costruire un algoritmo

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,…)

Page 13: come costruire un algoritmo

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

Page 14: come costruire un algoritmo

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

Page 15: come costruire un algoritmo

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

Page 16: come costruire un algoritmo

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.

Page 17: come costruire un algoritmo

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

Page 18: come costruire un algoritmo

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

Page 19: come costruire un 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

Page 20: come costruire un algoritmo

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

Page 21: come costruire un algoritmo

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.

Page 22: come costruire un algoritmo

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

Page 23: come costruire un algoritmo

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

Page 24: come costruire un algoritmo

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

Page 25: come costruire un algoritmo

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

Page 26: come costruire un algoritmo

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

Page 27: come costruire un algoritmo

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

Page 28: come costruire un algoritmo

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

Page 29: come costruire un algoritmo

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

Page 30: come costruire un algoritmo

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

Page 31: come costruire un algoritmo

Il flowchart della media dei votiMediaVot

i

Leggo voto

somma= somma + voto

contaVoti=contaVoti+1

altri voti ?

media=somma/contaVoti

scrivi media

fine

si

Page 32: come costruire un algoritmo

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

Page 33: come costruire un algoritmo

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();}

Page 34: come costruire un algoritmo

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

Page 35: come costruire un algoritmo