Creare procedure intelligenti e flessibili

In questa pagina ci sono circa 3262 parole e 23 immagini. Con una media di 100 parole al minuto, c'è bisogno di circa 33 minuti per leggere questa pagina.

Dopo avere spiegato cosa sono le procedure e come si creano, vediamo come possiamo fare in modo che queste procedure siano anche intelligenti e flessibili.

Prima di tutto vediamo cosa significano le parole intelligente e flessibile. Si tratta di due idee che ovviamente non si usano solo nella programmazione e anche nella programmazione sono solo delle idee che non seguono delle regole fisse.

Possiamo pensare ad una procedura intelligente come una procedura che sa valutare le cose con le quali deve lavorare e prendere delle decisioni. Immagina ad esempio di dare il comando "grida in silenzio" ad una persona. Se quella persona è intelligente sa che il comando non ha senso e invece di fare una cosa stupida come spalancare la bocca facendo finta di gridare ti risponde che non è possibile "gridare in silenzio".

Lo stesso vale per una procedura. Prendiamo nuovamente la procedura :

Se esegui il comando forse ti aspetti che la tartaruga non faccia nulla, perché non ha senso pensare ad un quadrato con il lato da zero. E invece il comando disegna un puntino! Ha in effetti disegnato un quadrato di lato 1. Se poi provi a eseguire il comando e ingrandisci l'area di disegno con il menu Zoom > Ingrandisci un paio di volte, vedrai che in effetti ha disegnato un quadrato di lato 3! Anche se non hai fatto queste prove o non hai notato questi problemi non ti preoccupare, faremo questa prova assieme, in questa pagina o nella prossima. Per il momento ci basta sapere che la procedura , per come l'abbiamo creata, forse non fa esattamente quello che ci aspettavamo.

Possiamo pensare ad una procedura flessibile come una procedura che è in grado di svolgere lavori diversi che usano tutti uno stesso sistema; questa procedura produce risultati diversi in base alle informazioni che riceve. Un esempio di come rendere una procedura più flessibile l'abbiamo già visto: avevamo una procedura che era in grado di disegnare solo dei quadrati da 100 e l'abbiamo modificata per fare in modo che potesse disegnare dei quadrati di qualsiasi dimensione. Ma possiamo accontentarci di questo? Se quella procedura fosse una persona, ci basterebbe che sapesse disegnare solo dei quadrati e non altre figure, come ad esempio dei triangoli o dei cerchi?

I computer sono molto potenti ma anche molto, molto poco intelligenti e poco flessibili, a meno che noi non gli diciamo come essere più intelligenti o più flessibili. In effetti, quando stai scrivendo un programma, tu stai insegnando al computer a fare qualcosa. Tu hai molte più capacità di un computer, sei molto più intelligente e flessibile di un computer. Se questa cosa ti sembra strana, pensa a questo: non solo tu sei in grado di imparare qualcosa con l'aiuto di qualcuno (anche quando questo aiuto non è molto preciso o molto buono), sei anche in grado di imparare qualcosa senza nessun aiuto, semplicemente provando, riprovando e capendo nuove cose in base ai tuoi stessi errori, mentre un computer ha sempre bisogno di ricevere istruzioni ben precise da una persona, soprattutto quando incontra degli errori e non sa più come comportarsi. Anche quando un computer è in grado di imparare qualcosa da solo, il sistema che usa per farlo gli è stato insegnato da una persona, e la sua capacità di imparare è limitata al sistema che gli è stato insegnato.

Bene, vediamo come possiamo rendere questi computer un po' più intelligenti e più flessibili, ma prima di farlo vediamo cosa sono i poligoni regolari. Se sai già cosa sono i poligoni regolari e non ti interessa la mia spiegazione, puoi passare direttamente alla sezione sulla creazione di una procedura per il disegno dei poligoni regolari.

I poligoni regolari

Poligoni regolari è una parolona, o meglio, sono due parolone. Per usare parole semplici, possiamo dire che i poligoni regolari sono le varie figure come i triangoli, i quadrati e così via. Ma queste "parolone" devono diventare delle parole normali per te, se vuoi davvero imparare a programmare. Quindi vediamo cosa sono i poligoni regolari e perché ne stiamo parlando proprio adesso.

Poligono è una parola che viene dalla lingua greca, la possiamo dividere in poli, che vuol dire molti, e gono, che vuol dire angolo (le parole originali in greco in realtà sono un po' diverse ma qui ci interessa solo il loro significato). Poligono ha quindi il significato di figura con molti angoli. Un quadrato ha quattro angoli, un triangolo ne ha tre, un pentagono ne ha cinque (anche la parola pentagono arriva dal greco, ed è composta penta, che vuol dire cinque, e nuovamente gono, che vuol dire angolo: pentagono vuol dire appunto cinque angoli) un esagono ne ha se (esa in greco vuol dire sei) e così via.

Prese tutte assieme, queste figure con molti angoli si chiamano poligoni.

Regolare vuol dire che segue una regola. Esistono molti tipi di poligono e non tutti sono regolari: i poligoni regolari sono solo quelli che hanno tutti i lati uguali tra loro e tutti gli angoli uguali tra loro, ma questa regola da sola non basta per dire se un poligono è regolare oppure no; la parte mancante di questa regola la vedremo tra poco.

Stiamo parlando dei poligoni proprio in questo momento per diversi motivi: il primo motivo, il più importante, è quello di capire la relazione tra una idea generale e i suoi casi particolari, e dopo avere capito quella relazione, vedere come creare un programma che funziona in base a quella relazione. Il secondo motivo è che i poligoni e le varie idee collegate ai poligoni sono molto importanti per la creazione della parte visibile dei programmi, anche quando questi programmi non si occupano direttamente di disegno o di geometria.

Geometria è un'altra parola che arriva dalla lingua greca, dove geo significa terra e metria significa misura, quindi geometria significa, alla lettera, misurazione della terra, ma il suo significato corrente è quello di studio delle forme, come ad esempio lo studio dei poligoni.

Vediamo alcuni poligoni:

Triangolo con misure di lati e angoli interni Quadrato con misure di lati e angoli interni Pentagono con misure di lati e angoli interni Esagono con misure di lati e angoli interni

Nelle immagini qui sopra non è importante che alcune figure abbiano i lati da 90 o da 100, oppure che abbiano gli angoli da 60° o da 120°, la cosa importante è che in ogni figura tutti i lati sono uguali tra loro e tutti gli angoli sono uguali tra loro. Le figure qui sopra sono tutte dei poligoni regolari.

Vediamo un rettangolo:

Rettangolo con misure di lati e angoli interni

Il rettangolo non è un poligono regolare perché non ha tutti i lati uguali tra loro.

Vediamo un rombo:

Rombo con misure di lati e angoli interni

Il rombo non è un poligono regolare perché non ha tutti gli angoli uguali tra loro.

Vediamo anche un trapezio:

Trapezio con misure di lati e angoli interni

Non ci sarebbe nemmeno bisogno di dirlo, ma il trapezio non è un poligono regolare perché ha lati diversi tra loro e ha anche angoli diversi tra loro.

Come ho scritto sopra, non è importante il valore degli angoli oppure dei lati (esistono tanti tipi diversi di rettangoli, rombi e trapezi) la cosa che ci interessa qui è vedere se gli angoli e i lati sono uguali tra loro.

Adesso vediamo un poligono un po' diverso, una stella. Una stella a cinque punte si disegna così:

Animazione del disegno di una stella a cinque punte

Queste sono invece le misure dei lati e degli angoli di una stella a cinque punte:

Stella con misure di lati e angoli interni

Vediamo, la stella qui sopra ha tutti gli angoli uguali tra loro e ha anche tutti i lati uguali tra loro... possiamo dire che la stella è un poligono regolare? No, non possiamo, perché la stella è un poligono concavo.

Cosa sono i poligoni concavi? Detto in un modo semplice, i poligoni concavi sono tutti quei poligoni che hanno dei "buchi", di qualsiasi forma e dimensione. Guarda questa animazione:

Animazione di un poligono concavo con una linea che lo attraversa

Quello che vedi qui sopra è un poligono concavo. Si dice che un poligono è concavo quando è possibile disegnare una linea che unisce due punti all'interno del poligono (nella figura i due punti si chiamano A e B) e la linea passa all'esterno del poligono (nella figura la linea diventa rossa quando passa fuori dal poligono).

Facciamo questa prova con la stella, guarda l'animazione e nota dove passa la linea che unisce i punti A e B:

Animazione di una stella con una linea che la attraversa

Come puoi vedere qui sopra, ho trovato due punti all'interno della stella che posso unire con una linea che esce dalla stella quindi la stella è un poligono concavo.

Il contrario di concavo è convesso. Basta andare per esclusione: se un poligono non è concavo, allora è convesso, tutto qui.

Completiamo quindi la nostra regola: un poligono regolare è un poligono convesso che ha tutti gli angoli uguali tra loro e tutti i lati uguali tra loro.

Esistono molte altre cose da sapere sui poligoni e su tutte le altre forme usate nella geometria ma per il momento ci possiamo fermare.

Creare una procedura per disegnare dei poligoni regolari

A questo punto potrei farti vedere direttamente quali comandi dare alla tartaruga per disegnare un poligono regolare qualsiasi, ma voglio arrivarci passo per passo a partire dalla procedura .

Mentre andiamo avanti prova a fermarti e ragionare con la tua testa su questo problema, per vedere se riesci a trovare una soluzione per conto tuo. Alla fine di questa sezione troverai la procedura completa che serve a disegnare qualsiasi poligono regolare, con qualsiasi numero di lati e con la misura dei lati a piacere.

Ripartiamo dalla prima procedura , quella che sapeva disegnare solo quadrati da 100:

Abbiamo visto che potevamo togliere il numero 100 e sostituirlo con un parametro, al quale abbiamo dato il nome :

L'operazione che abbiamo fatto qui sopra si chiama generalizzazione. Abbiamo preso una idea ben precisa, l'idea di un quadrato da 100, e l'abbiamo resa più generale: l'idea di un quadrato di qualsiasi dimensione.

Adesso, oltre alla misura del lato, vogliamo generalizzare anche il numero dei lati. Vogliamo dunque passare dalla idea di un poligono regolare con quattro lati (il quadrato) all'idea di un poligono regolare qualsiasi.

Prima di tutto proviamo a disegnare un altro poligono regolare, come ad esempio un triangolo.

Guarda di nuovo le figure del triangolo e del quadrato e prova a creare la procedura senza altri suggerimenti:

Triangolo con misure di lati e angoli interni Quadrato con misure di lati e angoli interni

Se non hai trovato la soluzione non ti preoccupare. Ogni persona impara con il suo passo, non è veramente importante quanto vai in fretta, è molto più importante che capisci bene quello che stai facendo e come funzionano esattamente i comandi che dai alla tartaruga. La velocità arriva da sola, basta continuare ad esercitarsi e cercare sempre di imparare qualcosa di nuovo.

Potresti avere scritto la procedura in questo modo:

Se hai scritto una procedura come questa qui sopra potresti avere ottenuto un risultato come questo qui sotto:

Animazione del disegno sbagliato di un triangolo

Dove sta l'errore? L'errore sta nel fatto che l'angolo da 60° si trova all'interno del triangolo, mentre la tartaruga disegna sempre degli angoli esterni.

Quando abbiamo disegnato il quadrato non ci siamo accorti della differenza perché in un quadrato gli angoli interni e gli angoli esterni sono uguali. Nelle figure qui sotto puoi vedere la relazione tra gli angoli esterni e gli angoli interni dei primi quattro poligoni regolari:

Triangolo - angoli interni ed esterni Quadrato- angoli interni ed esterni Pentagono- angoli interni ed esterni Esagono- angoli interni ed esterni

Bene, se la procedura non funziona usando gli angoli interni, allora dovrà funzionare usando gli angoli esterni, giusto?

Se hai fatto la prova per conto tuo sai già che questa procedura...

...produce questo risultato:

Animazione del disegno corretto di un triangolo

Bene. Guardiamo le due procedure assieme:

La procedura e la procedura sono quasi uguali, l'unica cosa che cambia (a parte il nome) sono i numeri.

Hai già scoperto quale relazione esiste tra il numero dei lati e la misura degli angoli esterni? Hai trovato un modo per creare una procedura che disegna poligoni regolari di qualsiasi dimensione e qualsiasi numero di lati?

Se non ce l'hai fatta, queste altre animazioni potrebbero esserti d'aiuto:

Triangolo - animazione della somma degli angoli esterni Quadrato- animazione della somma degli angoli esterni Pentagono- animazione della somma degli angoli esterni Esagono- animazione della somma degli angoli esterni

Dalle animazioni qui sopra si vede che mettendo uno affianco all'altro tutti gli angoli esterni di un poligono regolare otteniamo un cerchio, e se anche non sappiamo quanto misura un cerchio lo possiamo calcolare.

Per il triangolo abbiamo 3 angoli da 120°. 3 x 120 = 360.

Per il quadrato abbiamo 4 angoli da 90°. 4 x 90 = 360.

Per il pentagono abbiamo 5 angoli da 72°. 5 x 72 = 360.

Per l'esagono abbiamo 6 angoli da 60°. 6 x 60 = 360.

Un cerchio infatti ha sempre la misura di 360°.

Ora troviamo la formula che dobbiamo usare per calcolare il valore dell'angolo in base al numero di angoli, e visto che stiamo lavorando con il linguaggio LOGO, scriviamo la formula con i simboli del LOGO. Una formula, in matematica, è semplicemente una serie di operazioni che ti permettono di calcolare una cosa che non sai in base a qualcosa che sai già.

I numeri 3, 4, 5 e 6 rappresentano il numero degli angoli. Togliamo questi numeri e sostituiamoli con la variabile .

I numeri 120, 90, 72 e 60 rappresentano il valore in gradi di ogni singolo angolo. Togliamo questi numeri e sostituiamoli con la variabile .

In LOGO possiamo scrivere così: (ricordati che in LOGO il simbolo di moltiplicazione è l'asterisco *).

Quando vogliamo disegnare un poligono noi sappiamo già quanti angoli ci servono, quello che non sappiamo è il valore in gradi di ogni singolo angolo. Trasformiamo dunque la nostra formula per fare in modo che la variabile si trovi da sola alla sinistra del simbolo di uguale:  (ricordati che in LOGO il simbolo di divisione è la barra inclinata a destra /)

Aspetta un attimo: perché è sparito il simbolo di moltiplicazione ed è comparso il simbolo di divisione? Si tratta di una regola matematica.

Nella formula ci sono cinque elementi, di questi cinque elementi tre sono degli operandi (in questo caso gli operandi sono , e ) mentre gli altri due sono degli operatori (in questo caso gli operatori sono il simbolo dell'uguale = e il simbolo della divisione / ). Gli operatori sono quelli che eseguono l'operazione, gli operandi sono quelli che vengono usati dall'operazione.

Quando si porta un operando da una parte all'altra del simbolo dell'uguale bisogna invertire l'operazione che stava affianco a quell'operando, quindi bisogna cambiare l'operatore.

La moltiplicazione diventa una divisione e la divisione diventa una moltiplicazione, perché la moltiplicazione e la divisione sono inverse l'una rispetto all'altra.

Allo stesso modo, la sottrazione diventa una addizione e l'addizione diventa una sottrazione, perché l'addizione e la sottrazione sono operazioni inverse l'una rispetto all'altra.

Facciamo un esempio. Questo è il primo problema: ci sono due bambini, il primo bambino ha due caramelle, il secondo bambino ha tre caramelle. Quante caramelle hanno i due bambini assieme? L'operazione è 2 + 3 = 5.

Adesso guardiamo il problema al contrario e chiamiamolo secondo problema: due bambini hanno cinque caramelle in tutto, il primo bambino ha tre caramelle. Quante caramelle ha il secondo bambino? L'operazione da fare è 5 - 3 = 2.

Non si tratta di due problemi diversi. Si tratta dello stesso problema visto da punti di vista diversi. Per essere più precisi, si tratta dello stesso problema dove le cose che non sappiamo e le cose che sappiamo sono diverse. 

L'uguaglianza 5 - 3 = 2, che stiamo prendendo dal secondo problema, la possiamo scrivere anche come 2 = 5 - 3 , il significato non cambia. Se spostiamo il numero 3 da una parte all'altra del simbolo dell'uguale dobbiamo anche invertire l'operazione, quindi la sottrazione diventa una addizione: 2 + 3 = 5, che è la stessa uguaglianza del primo problema.

La regola che ho spiegato qui sopra è solo una tra le tante regole della matematica. La matematica è un linguaggio, un linguaggio molto importante se vuoi diventare un programmatore. Se non ti piace la matematica o se hai dei problemi con la matematica ti consiglio di cercare e trovare il significato di ogni parola, di ogni simbolo e di ogni idea che non ti sono perfettamente chiari. Se hai bisogno di aiuto, chiedi aiuto, non te ne vergognare, e se hai bisogno di fare molti esercizi per avere più sicurezza con tutte queste cose, fai molti esercizi, non esiste nessuna scorciatoia.

Se hai problemi con la matematica c'è il pericolo che avrai problemi anche con la programmazione.

Ritorniamo alla nostra formula per calcolare la misura degli angoli esterni di un poligono in base al numero degli angoli. Abbiamo visto che la formula che ci interessa è .

Hai già trovato il modo di mettere tutto assieme in una unica procedura?

Io farei così: prima di tutto sceglierei un nome per la nuova procedura. Credo che la chiamerei . Poi copierei il corpo di una procedura che disegna un poligono in particolare, come ad esempio il corpo della procedura , e scriverei dunque questo:

Bene, poi cambierei il nome della variabile in perché mi sembra più adatto, così non c'è il pericolo di fare confusione: quando in futuro leggerò questa procedura, se lascio potrei chiedermi "Si parla della misura del lato o della misura dell'angolo?", mentre se scrivo e lo scrivo al singolare, è più facile ricordarmi che si parla della misura del lato:

Poi aggiungerei un nuovo parametro nella prima riga della definizione della procedura e lo metterei per primo perché quando disegno un poligono il numero di angoli è più importante della misura del lato. Chiamerei questo nuovo parametro , al plurale, per ricordarmi che si tratta del numero di angoli:

Visto che il numero 3 è semplicemente il numero di angoli di un triangolo, mentre a me interessa disegnare poligoni con numeri di angoli diversi, sostituirei il numero 3 con la variabile :

E adesso il tocco finale. Il numero 120 è il valore in gradi degli angoli esterni di un triangolo, ma a me interessa il valore degli angoli esterni di un poligono qualsiasi. Ho già trovato la formula per calcolare questo valore e la formula è . Di questa formula mi interessa solo la parte alla destra dell'uguale, quindi la sostituirei al numero 120 in questo modo:

Molto bene, per quello che vedo la procedura è pronta, non mi resta che provarla, quindi salverei il lavoro che ho fatto nell'editor e ritornerei alla finestra principale di FMSLogo, dove eseguirei questi comandi in sequenza:

All'inizio di questa pagina, se ricordi, ti ho fatto notare che la vecchia procedura se chiamata con disegnava un puntino e se chiamata con disegnava un quadrato di lato 3.

Adesso prova questi comandi con la nuova procedura poligono e vedi cosa succede (non dimenticare di usare il comando o il comando "ps" per svuotare tutta l'area di disegno ogni volta, e non dimenticare di ingrandire l'area di disegno con il menu Zoom per vedere se la tartaruga ha disegnato qualcosa anche quando sembra che non abbia fatto nulla):

Dopo che avrai provato questi comandi, chiediti il motivo del loro comportamento e chiediti anche se pensi che sia importante modificare la procedura perché si rifiuti di disegnare un poligono con il lato zero o perché si rifiuti di disegnare un poligono con meno di tre angoli.

Alla prossima puntata!