Lezione 2 – Un secondo caso

 

Difficoltà tecnica:
1-su-5

Prima di procedere ad una definizione sufficientemente formale di algoritmo vorrei portare un secondo utile esempio che ci permetterà nel seguito di comprendere a pieno le basi di questo corso.

Poniamoci un problema che non preveda troppe supposizioni per dare una risposta!

Fornite 3 misure in cm, se queste fossero le dimensioni dei lati di un triangolo, questo risulta equilatero?

Procediamo un po più velocemente rispetto alla lezione precedente: dato il problema ci dice che le misure sono esattamente 3 sappiamo che può essere un triangolo, piuttosto che un quadrilatero o un’altra qualsiasi figura geometrica di base. Unica accortezza? le misure devono essere positive e maggiori di zero, altrimenti non possiamo costruire un triangolo.

Ma perché sono andato così veloce nella prima analisi al problema? Perché la figura del triangolo è ben definita nella geometria, e proprio per questo il problema ne risulta di molto semplificato, basta prendere la definizione di triangolo e verificarne i requisiti! Abbiamo di fronte un problema di cui, tramite le definizioni geometriche, possiamo evitare molte supposizioni che invece la fisica della frenata di un automobile non prevede.

Procedendo per passi definiti, dato che il problema non richiede tre misure positive direttamente dobbiamo chiederci se effettivamente le misure date sono positive e maggiori di zero. Quindi il primo passo del nostro algoritmo sarà appunto la verifica dei dati inseriti. Se anche una sola misura è uguale o inferiore a zero possiamo già rispondere che non si può costruire un triangolo equilatero in quanto semplicemente non si può costruire un triangolo.

Veniamo ora ad un passo essenziale! La definizione di triangolo equilatero: “si definisce equilatero un triangolo in cui tutti i lati hanno la stessa misura“.

La geometria ha fatto il grosso del lavoro per noi. Adesso usiamo un poco di matematica per finire di rispondere al problema che ci è stato posto:

definiamo che le misure che ci vengono fornite sono rappresentate dai simboli A, B e C

quindi possiamo rispondere che il triangolo è equilatero se e solo se A = B, B = C e C = A.

Abbiamo quindi una risposta precisa che non necessita di ulteriori supposizioni al fine di garantire la correttezza della soluzione.

L’algoritmo in questo caso è completo e possiamo dare una risposta sempre corretta. Proviamo a simulare il nostro algoritmo con i seguenti dati:

A = 30, B = -13, C = 2

La risposta in questo caso è negativa in quanto B è una misura minore di zero e per tanto i dati non rappresentano un triangolo.

Con i seguenti dati invece:

A = 10, B = 10, C = 10

la risposta è positiva, infatti non solo sono tutti positivi e maggiori di zero, ma sono anche A = B, B = C, C = A e quindi abbiamo un triangolo equilatero!

Nella prossima lezioni inizieremo ad introdurre la definizione di algoritmo e ad applicarla direttamente. E’ anticipato che questo esempio sarà cardine nelle prossime lezioni per la sua semplicità e completezza allo stesso tempo.

Per chi avesse voglia di fare esercizio, come si potrebbe ottimizzare la soluzione? (è davvero necessario fare tre confronti di misure?, è davvero necessario verificare che tutte e tre le misure siano strettamente positive?)

Lezione 1 – Il primo caso

 

Difficoltà tecnica:
1-su-5

 

Prima di dare la definizione di algoritmo cerchiamo di capire in cosa potrebbe esserci utile. Partiamo da questo esempio:

Sono in autostrada e voglio che l’automobile su cui sono si fermi.

La risposta che viene spontaneo dare è ovviamente quella di usare il pedale del freno. Ma è davvero sempre la risposta corretta? No, non lo è sempre, infatti, anche parlando in generale, usare il pedale del freno non sempre ci permette di fermare l’automobile. Quando questo non avviene? Quando, per esempio, l’automobile che stiamo guidando è già ferma!

Nel caso in esame potrei essere semplicemente fermo in sosta nella piazzola di un autogrill e, in questo caso, per fermare l’automobile semplicemente non devo fare niente in quanto è già ferma. Può sembrare che si sta volutamente cercando il “pelo nell’uovo” ma non è assolutamente così. Il problema che ci è stato posto non specificava l’attuale velocità dell’automobile e di conseguenza se la risposta che abbiamo dato è quella di usare il pedale del freno abbiamo inconsciamente supposto che la macchina si stesse muovendo.

Questa supposizione, va chiarito, è ragionevole, di fatto normalmente non viene chiesto cosa bisogna fare per fermare un’automobile già ferma. Ma la supposizione che sia in movimento rende la soluzione fornita meno completa poichè restringe il campo delle possibilità introducendo un’ipotesi iniziale particolare.

A fronte della consapevolezza che non è fornita la velocità dell’automobile, la risposta potrebbe diventare: se l’automobile si sta muovendo allora utilizzo il pedale del freno, altrimenti non faccio niente in quanto sono già fermo. Abbiamo raggiunto quindi una risposta corretta? No, in generale non abbiamo ancora raggiunto una risposta corretta perché di fatto il quesito ci sta informando che noi siamo sull’automobile, ma non sta informando su quante persone sono a bordo dell’automobile e tanto meno ci sta informando sul fatto che stiamo guidando.

Nulla vieta che siamo seduti sul sedile del passeggero e che quindi se vogliamo fermare l’automobile dobbiamo chiedere al pilota di farlo. Anche la seconda soluzione è basata su una supposizione, ovvero quella che si sta guidando, ma come per quanto detto sopra è solo una supposizione dato che il testo della domanda non lo specifica chiaramente.

La nuova risposta che possiamo dare diventa ora: se la macchina è ferma non faccio niente, se invece si sta muovendo e sto guidando allora devo usare il pedale del freno, mentre, se non sto guidando, devo chiedere al pilota di utilizzare il pedale del freno.

Sono sicuro che il concetto a questo punto sia passato! La risposta è corretta e definitiva? In generale non lo è… le variabili che possiamo associare all’arresto di un automobile sono molteplici e di certo non le abbiamo ancora valutate tutte.

Dobbiamo valutarle tutte al fine di dare una risposta? Ovviamente no, se così fosse decidere come fermare la propria automobile richiederebbe parecchio tempo, forse troppo (dipende dal motivo per cui abbiamo deciso di fermarci). Ma se non dobbiamo valutarle tutte, allora quante dobbiamo valutarne? Questa è realmente la risposta più difficile da dare in questo corso e, a parte casi particolari che vedremo già dalla prossima lezione, dipende da quanto dobbiamo essere precisi nel dare la risposta stessa.

Come esercizio è utile in questa prima fase porsi dei problemi e trovarne la soluzione prestando attenzione ai passaggi. Un buon esercizio è quello di porsi un problema per cui riusciamo a trovare una soluzione che non necessita di nessuna supposizione per essere valida. Ne esistono davvero tanti e la prossima volta ne analizzeremo uno.

 

 

introduzione agli algoritmi

Introduzione agli algoritmi

Difficoltà tecnica:
1-su-5

 

A chi è rivolto il corso?

Questo corso è rivolto principalmente a chi vuole avvicinarsi per la prima volta al mondo della programmazione.

Servono prerequisiti?

Di fatto no, se state leggendo questa pagina avete a disposizione tutto quello che serve per iniziare, ovvero un computer o comunque un dispositivo in grado di visualizzare una pagina web.

Cosa si apprenderà?

Alla fine del corso, probabilmente già prima della fine del corso, si avrà una visione chiara del concetto di algoritmo e di come questo si applica alla programmazione. Il corso, pur volendo mantenere volutamente un’impronta teorica, sarà supportato da esempi pratici e fin dalle prime lezioni sarà possibile applicare nella pratica quello che si è appreso.

Struttura del corso

Il corso verrà proposto tramite una serie di post all’interno di questo blog. Si cercherà di dare una cadenza settimanale ai post ma purtroppo non si può garantire, ad ora, puntualità nelle pubblicazioni.

Le lezioni saranno quanto più brevi possibile. La volontà è quella, di volta in volta, di concentrarsi sui concetti essenziali mirate a descrivere il concetto in questione, fornirne la logica, gli esempi pratici ed eventuali ‘compiti a casa’.

Campo pratica

Nonostante la consapevolezza che chi si avvina a questo corso lo sta facendo per avvicinarsi al mondo della programmazione, si è deciso di non fare riferimento a nessun linguaggio specifico.

Il corso può essere portato a termine semplicemente con carta, penna e il terminale che state utilizzando per leggere questa pagina.

La scelta di non utilizzare nessun linguaggio di programmazione è dettata principalmente dal fatto che l’algoritmica è una materia indipendente dalla programmazione e, sotto molti aspetti, un prerequisito della programmazione stessa. Pertanto, rispettando un naturale flusso di apprendimento, è importante conoscerla prima di cimentarsi nella programmazione vera  propria.

Tempi di apprendimento

I tempi di apprendimento del corso dipendono ovviamente da svarianti fattori, ma possono considerarsi brevi in quanto non richiederanno tanto più pratica di quella che verrà fatta seguendo completamente il corso.