350 likes | 547 Views
Il primo 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.
E N D
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 problema Comprendere 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
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
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 operazioni • Somma dei voti • Conteggio del numero dei voti • 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 calcolo domanda
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 voti MediaVoti Leggo voto somma= somma + voto contaVoti=contaVoti+1 si altri voti ? media=somma/contaVoti scrivi media fine
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; • intcontaVoti; • voidcalcolaMedia(){ • 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 isnotnumeric) • 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