467
Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore di Feltre 2018

Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Quaderni di Informatica

Pensiero Computazionale

Luigino Calvi

Istituto Superiore di Feltre2018

Page 2: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

ii

Una grande scoperta risolve un grande problema ma c’è un granello discoperta nella soluzione di ogni problema.

Il tuo problema può essere modesto; ma se esso sfida la tua curiosità e mettein gioco le tue facoltà inventive, e lo risolvi con i tuoi mezzi, puoi

sperimentare la tensione e godere del trionfo della scoperta.Questa esperienza ad una età suscettibile può creare un gusto per il lavoromentale e lasciare un’impronta nella mente e un carattere per tutta la vita.

G. Polya, How to solve it

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 3: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Indice

1 Problemi 11.1 Problemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 La risoluzione dei problemi . . . . . . . . . . . . . . . . . . . . . . 31.3 Problemi ben formulati . . . . . . . . . . . . . . . . . . . . . . . . 41.4 Formalizzazione dei problemi . . . . . . . . . . . . . . . . . . . . . 51.5 Risolvibilità dei problemi . . . . . . . . . . . . . . . . . . . . . . . 71.6 Tipologie dei problemi . . . . . . . . . . . . . . . . . . . . . . . . . 8

1.6.1 Problemi computazionali . . . . . . . . . . . . . . . . . . . 81.6.2 Problemi decisionali . . . . . . . . . . . . . . . . . . . . . . 81.6.3 Problemi esecutivi . . . . . . . . . . . . . . . . . . . . . . . 9

1.7 Istanze e classi di problemi . . . . . . . . . . . . . . . . . . . . . . 101.8 Generalizzazione dei problemi . . . . . . . . . . . . . . . . . . . . 111.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

2 Algoritmi 192.1 Formule risolutive . . . . . . . . . . . . . . . . . . . . . . . . . . . 202.2 Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.3 Algoritmi come funzioni . . . . . . . . . . . . . . . . . . . . . . . . 222.4 Livelli descrittivi degli algoritmi . . . . . . . . . . . . . . . . . . . 242.5 Il principio di complessità . . . . . . . . . . . . . . . . . . . . . . . 242.6 Tavola di traccia di un algoritmo . . . . . . . . . . . . . . . . . . 262.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3 Macchine 313.1 Macchine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

3.1.1 Macchine combinatorie . . . . . . . . . . . . . . . . . . . . 323.1.2 Macchine sequenziali . . . . . . . . . . . . . . . . . . . . . 33

3.2 Macchine programmabili . . . . . . . . . . . . . . . . . . . . . . . 353.3 Macchine virtuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

iii

Page 4: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

iv INDICE

3.4 Le macchine di Turing . . . . . . . . . . . . . . . . . . . . . . . . . 373.5 Programmi per le macchine di Turing . . . . . . . . . . . . . . . 383.6 Risoluzione di problemi con le MdT . . . . . . . . . . . . . . . . 403.7 Esempi di macchine di Turing . . . . . . . . . . . . . . . . . . . . 423.8 Algoritmi per le macchine di Turing . . . . . . . . . . . . . . . . 443.9 Trasformazioni di stringhe . . . . . . . . . . . . . . . . . . . . . . 453.10 La macchina di Turing universale . . . . . . . . . . . . . . . . . . 463.11 Computabilità . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

3.11.1 La tesi di Church-Turing . . . . . . . . . . . . . . . . . . . 473.11.2 Il Problema della fermata . . . . . . . . . . . . . . . . . . 48

3.12 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

4 Linguaggi 534.1 Macchine e linguaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 544.2 Livello dei linguaggi . . . . . . . . . . . . . . . . . . . . . . . . . . 574.3 Linguaggi di basso livello . . . . . . . . . . . . . . . . . . . . . . . 584.4 Linguaggi di alto livello . . . . . . . . . . . . . . . . . . . . . . . . 614.5 Notazioni grafiche . . . . . . . . . . . . . . . . . . . . . . . . . . . 624.6 Notazioni testuali . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.7 Notazioni visuali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664.8 Linguaggi e traduttori . . . . . . . . . . . . . . . . . . . . . . . . . 674.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

5 Controlli 715.1 Algoritmi e processi . . . . . . . . . . . . . . . . . . . . . . . . . . 725.2 Controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735.3 Limiti dei linguaggi a salti . . . . . . . . . . . . . . . . . . . . . . 745.4 La programmazione strutturata . . . . . . . . . . . . . . . . . . . 755.5 Controlli generalizzati . . . . . . . . . . . . . . . . . . . . . . . . . 775.6 Notazioni testuali . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

5.6.1 Controllo sequenziale . . . . . . . . . . . . . . . . . . . . . 785.6.2 Controllo condizionale . . . . . . . . . . . . . . . . . . . . 785.6.3 Controllo ciclico . . . . . . . . . . . . . . . . . . . . . . . . 79

5.7 Altri controlli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805.8 Il teorema di Böhm-Jacopini . . . . . . . . . . . . . . . . . . . . . 815.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 5: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

INDICE v

6 Risolvere 876.1 Soluzione dei problemi . . . . . . . . . . . . . . . . . . . . . . . . . 886.2 La metodologia top-down . . . . . . . . . . . . . . . . . . . . . . . 896.3 La metodologia bottom-up . . . . . . . . . . . . . . . . . . . . . . 936.4 Forme di scomposizione/composizione . . . . . . . . . . . . . . . 96

6.4.1 Scomposizione sequenziale . . . . . . . . . . . . . . . . . . 966.4.2 Scomposizione iterativa . . . . . . . . . . . . . . . . . . . . 976.4.3 Scomposizione ricorsiva . . . . . . . . . . . . . . . . . . . . 99

6.5 Criteri di scomposizione . . . . . . . . . . . . . . . . . . . . . . . . 1006.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

7 Disegnare 1057.1 La geometria della tartaruga . . . . . . . . . . . . . . . . . . . . . 1067.2 Ripetere i comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087.3 Istruire la tartaruga . . . . . . . . . . . . . . . . . . . . . . . . . . 1087.4 Disegno di figure . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097.5 La tartaruga si muove nel piano . . . . . . . . . . . . . . . . . . . 1107.6 La tartaruga come calcolatore . . . . . . . . . . . . . . . . . . . . 1147.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

8 Operare 1218.1 Operazioni sui numeri . . . . . . . . . . . . . . . . . . . . . . . . . 1228.2 I numeri naturali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1238.3 Le operazioni sui numeri naturali . . . . . . . . . . . . . . . . . . 1248.4 Altri tipi di numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . 1278.5 I valori logici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288.6 Operazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308.7 Precedenza ed associatività . . . . . . . . . . . . . . . . . . . . . . 1308.8 Tipologie di operazioni . . . . . . . . . . . . . . . . . . . . . . . . 1318.9 Funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318.10 Operazione condizionale if . . . . . . . . . . . . . . . . . . . . . . 1328.11 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

9 Denotare 1359.1 Segno, significato e verità . . . . . . . . . . . . . . . . . . . . . . . 1369.2 La codifica dei numeri . . . . . . . . . . . . . . . . . . . . . . . . . 1379.3 Sistemi di numerazione . . . . . . . . . . . . . . . . . . . . . . . . 1389.4 Tipologie dei valori . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399.5 Denotazione degli oggetti . . . . . . . . . . . . . . . . . . . . . . . 1409.6 Variabili e riferimenti . . . . . . . . . . . . . . . . . . . . . . . . . 141

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 6: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

vi INDICE

9.7 Notazioni delle operazioni . . . . . . . . . . . . . . . . . . . . . . . 1429.7.1 Notazioni testuali . . . . . . . . . . . . . . . . . . . . . . . 1429.7.2 Notazioni grafiche . . . . . . . . . . . . . . . . . . . . . . . 1449.7.3 Notazioni tabellari . . . . . . . . . . . . . . . . . . . . . . 145

9.8 Dare un nome agli algoritmi . . . . . . . . . . . . . . . . . . . . . 1469.9 Alberi di operazioni binarie . . . . . . . . . . . . . . . . . . . . . . 1479.10 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

10 Esprimere 15110.1 Espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15210.2 Espressioni e problemi . . . . . . . . . . . . . . . . . . . . . . . . . 152

10.2.1 Problemi aritmetici . . . . . . . . . . . . . . . . . . . . . . 15310.2.2 Problemi decisionali . . . . . . . . . . . . . . . . . . . . . . 15310.2.3 Problemi condizionali . . . . . . . . . . . . . . . . . . . . . 154

10.3 Costruzione di espressioni . . . . . . . . . . . . . . . . . . . . . . . 15510.4 Espressioni come funzioni . . . . . . . . . . . . . . . . . . . . . . . 15610.5 Espressioni ed insiemi di entità . . . . . . . . . . . . . . . . . . . 15710.6 Limiti delle espressioni . . . . . . . . . . . . . . . . . . . . . . . . 15910.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

11 Elaborare 16911.1 Valutazione delle espressioni . . . . . . . . . . . . . . . . . . . . . 17011.2 Valutazione in un ambiente . . . . . . . . . . . . . . . . . . . . . . 17111.3 Espressioni equivalenti . . . . . . . . . . . . . . . . . . . . . . . . . 17111.4 Riduzione delle espressioni . . . . . . . . . . . . . . . . . . . . . . 17211.5 Risoluzione di condizioni . . . . . . . . . . . . . . . . . . . . . . . 17311.6 Assegnazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17511.7 Soluzioni mediante assegnazioni . . . . . . . . . . . . . . . . . . . 17611.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180

12 Spostare 18712.1 Scambio di cavalli degli scacchi . . . . . . . . . . . . . . . . . . . 18812.2 Il Gioco del 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18912.3 Sistemare i piatti . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19012.4 Il problema della Torre di Hanoi . . . . . . . . . . . . . . . . . . 19112.5 Il mondo dei blocchetti . . . . . . . . . . . . . . . . . . . . . . . . 19412.6 Blocchetti colorati . . . . . . . . . . . . . . . . . . . . . . . . . . . 19712.7 Blocchetti numerati . . . . . . . . . . . . . . . . . . . . . . . . . . 19912.8 Fusione di due pile di blocchetti . . . . . . . . . . . . . . . . . . . 20112.9 Un robot assemblatore . . . . . . . . . . . . . . . . . . . . . . . . 203

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 7: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

INDICE vii

12.10Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207

13 Scambiare 21113.1 Scambio di variabili . . . . . . . . . . . . . . . . . . . . . . . . . . 21213.2 Scambio di variabili numeriche . . . . . . . . . . . . . . . . . . . . 21313.3 Scambio di variabili booleane . . . . . . . . . . . . . . . . . . . . 21413.4 Generalizzazione del problema . . . . . . . . . . . . . . . . . . . . 21413.5 L’aritmetica dei secchi d’acqua . . . . . . . . . . . . . . . . . . . . 21613.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

14 Confrontare 22314.1 Confronto fra elementi . . . . . . . . . . . . . . . . . . . . . . . . . 22414.2 Alberi di decisione . . . . . . . . . . . . . . . . . . . . . . . . . . . 22414.3 Confronti con le bilance . . . . . . . . . . . . . . . . . . . . . . . . 22614.4 Contare con le bilance . . . . . . . . . . . . . . . . . . . . . . . . . 23014.5 Pesare con le bilance . . . . . . . . . . . . . . . . . . . . . . . . . . 23114.6 Pesare mischiando pesi ed oggetti . . . . . . . . . . . . . . . . . . 23214.7 Pesare oggetti di pesi frazionari . . . . . . . . . . . . . . . . . . . 23414.8 Ordinare con le bilance . . . . . . . . . . . . . . . . . . . . . . . . 23514.9 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

15 Contare 23915.1 Un po’ di storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24015.2 I numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24115.3 Contare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24215.4 Strategie di conteggio . . . . . . . . . . . . . . . . . . . . . . . . . 24315.5 Calcolo combinatorio . . . . . . . . . . . . . . . . . . . . . . . . . 247

15.5.1 Permutazioni . . . . . . . . . . . . . . . . . . . . . . . . . . 24815.5.2 Combinazioni . . . . . . . . . . . . . . . . . . . . . . . . . . 24815.5.3 Disposizioni . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

15.6 Conteggio di insiemi infiniti . . . . . . . . . . . . . . . . . . . . . 24915.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250

16 Sommare 25516.1 Somme di numeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25616.2 Somma di tabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25816.3 Algoritmi per sommare . . . . . . . . . . . . . . . . . . . . . . . . 25916.4 Progressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260

16.4.1 Progressioni aritmetiche . . . . . . . . . . . . . . . . . . . 26016.4.2 Progressioni geometriche . . . . . . . . . . . . . . . . . . . 261

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 8: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

viii INDICE

16.5 Serie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26216.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265

17 Calcolare 26717.1 L’abaco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26817.2 Calcolare con l’abaco . . . . . . . . . . . . . . . . . . . . . . . . . 27017.3 La calcolatrice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27117.4 Il massimo comune divisore . . . . . . . . . . . . . . . . . . . . . . 27217.5 Un problema numerico . . . . . . . . . . . . . . . . . . . . . . . . 27517.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277

18 Misurare 28118.1 Area del triangolo . . . . . . . . . . . . . . . . . . . . . . . . . . . 28218.2 Area dei quadrilateri . . . . . . . . . . . . . . . . . . . . . . . . . . 28318.3 Area dei poligoni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28418.4 Area del cerchio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28518.5 Un problema di aree . . . . . . . . . . . . . . . . . . . . . . . . . . 28618.6 Scomposizione di figure . . . . . . . . . . . . . . . . . . . . . . . . 28718.7 Efficacia delle scomposizioni . . . . . . . . . . . . . . . . . . . . . 28918.8 Calcoli geometrici . . . . . . . . . . . . . . . . . . . . . . . . . . . 29018.9 Calcoli algebrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29218.10Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

19 Tracciare 29719.1 I postulati di Euclide . . . . . . . . . . . . . . . . . . . . . . . . . 29819.2 Le entità geometriche . . . . . . . . . . . . . . . . . . . . . . . . . 29919.3 Costruzione delle entità . . . . . . . . . . . . . . . . . . . . . . . . 30019.4 Costruzioni con riga e compasso . . . . . . . . . . . . . . . . . . . 30219.5 Costruzioni con riga e compasso . . . . . . . . . . . . . . . . . . . 30419.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307

20 Punteggiare 30920.1 Il piano euclideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31020.2 Definizione delle entità . . . . . . . . . . . . . . . . . . . . . . . . 31120.3 Operazioni sui punti . . . . . . . . . . . . . . . . . . . . . . . . . . 31220.4 Il piano vettoriale . . . . . . . . . . . . . . . . . . . . . . . . . . . 31520.5 L’algebra dei punti . . . . . . . . . . . . . . . . . . . . . . . . . . . 31820.6 Proprietà delle operazioni . . . . . . . . . . . . . . . . . . . . . . . 32020.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 9: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

INDICE ix

21 Aggregare 32521.1 Atomi e strutture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32621.2 Le sequenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32621.3 Operazioni sulle sequenze . . . . . . . . . . . . . . . . . . . . . . . 32821.4 Elaborazione di sequenze . . . . . . . . . . . . . . . . . . . . . . . 33121.5 Array e matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33221.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

22 Astrarre 33922.1 Blocchi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34022.2 Funzione di trasformazione di un blocco . . . . . . . . . . . . . . 34122.3 Classificazione dei blocchi . . . . . . . . . . . . . . . . . . . . . . . 34322.4 Compositori e selettori . . . . . . . . . . . . . . . . . . . . . . . . 34422.5 Implementazione, definizione ed uso . . . . . . . . . . . . . . . . 34522.6 Prototipi dei blocchi . . . . . . . . . . . . . . . . . . . . . . . . . . 34622.7 Chiamate ai blocchi . . . . . . . . . . . . . . . . . . . . . . . . . . 34822.8 Argomenti formali ed attuali . . . . . . . . . . . . . . . . . . . . . 34922.9 Direzionalità degli argomenti . . . . . . . . . . . . . . . . . . . . . 35022.10Passaggio dei parametri . . . . . . . . . . . . . . . . . . . . . . . . 35122.11Fase di elaborazione di un blocco . . . . . . . . . . . . . . . . . . 35122.12Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353

23 Comporre 35523.1 Notazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35623.2 Composizione di blocchi . . . . . . . . . . . . . . . . . . . . . . . . 35723.3 Costruzione dei blocchi . . . . . . . . . . . . . . . . . . . . . . . . 36023.4 Metodologie di costruzione dei blocchi . . . . . . . . . . . . . . . 36223.5 Complessità dei blocchi . . . . . . . . . . . . . . . . . . . . . . . . 36323.6 Blocchi con controlli . . . . . . . . . . . . . . . . . . . . . . . . . . 36423.7 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366

24 Ripetere 37124.1 L’operatore di ripetizione . . . . . . . . . . . . . . . . . . . . . . . 37224.2 Ripetizione e aggregazione . . . . . . . . . . . . . . . . . . . . . . 37324.3 Figure periodiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37424.4 Calcoli iterativi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37624.5 Scomposizioni e ripetizioni . . . . . . . . . . . . . . . . . . . . . . 37624.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 10: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

x INDICE

25 Ricorrere 38325.1 Definizioni ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . 38425.2 Strutture dati ricorsive . . . . . . . . . . . . . . . . . . . . . . . . 38525.3 Funzioni ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38525.4 Figure ricorsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38725.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392

26 Computare 40326.1 Definizione e determinazione . . . . . . . . . . . . . . . . . . . . . 40426.2 Computabilità dei numeri . . . . . . . . . . . . . . . . . . . . . . . 40426.3 Alla ricerca della

º2 . . . . . . . . . . . . . . . . . . . . . . . . . . 405

26.4 Calcoli iterativi indefiniti . . . . . . . . . . . . . . . . . . . . . . . 41026.5 Funzioni computabili . . . . . . . . . . . . . . . . . . . . . . . . . 41026.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412

27 Metrizzare 41527.1 Gli spazi metrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41627.2 Definizioni in uno spazio metrico . . . . . . . . . . . . . . . . . . 41927.3 Figure in uno spazio metrico . . . . . . . . . . . . . . . . . . . . . 42027.4 Interrogazioni negli spazi metrici . . . . . . . . . . . . . . . . . . 42227.5 Criteri per definire la distanza . . . . . . . . . . . . . . . . . . . . 42227.6 Metriche sulle stringhe . . . . . . . . . . . . . . . . . . . . . . . . 42227.7 Calcolo della distanza di edit . . . . . . . . . . . . . . . . . . . . . 42427.8 Convergenza negli spazi metrici . . . . . . . . . . . . . . . . . . . 42727.9 Procedimenti iterativi indefiniti . . . . . . . . . . . . . . . . . . . 42827.10Criteri di arresto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42927.11L’errore nei processi di calcolo . . . . . . . . . . . . . . . . . . . . 43027.12Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431

28 Formalizzare 43728.1 I sistemi formali . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43828.2 Sistemi formali e significato . . . . . . . . . . . . . . . . . . . . . 44128.3 Dimostrazioni nei sistemi formali . . . . . . . . . . . . . . . . . . 44528.4 Giochi come sistemi formali . . . . . . . . . . . . . . . . . . . . . 44728.5 Gli L-sistemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44728.6 L-sistemi con ramificazioni . . . . . . . . . . . . . . . . . . . . . . 44928.7 Una macchina per gli L-sistemi . . . . . . . . . . . . . . . . . . . 45128.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 11: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 1

Problemi

Sentiamo in noi l’eterno richiamo: ecco ilproblema, cercane la soluzione.D. Hilbert

Il matematico David Hilbert, al Congresso Internazionale di Matematicatenutosi a Parigi nell’agosto del 1900, si espresse con le parole riportate nellacitazione sopra per sottolineare che nell’uomo è connaturata la propensionea risolvere le questioni ed i problemi che gli si presentano. In quell’occa-sione Hilbert presentò una lista di 23 problemi all’epoca non ancora risolti,proponendoli come sfida per i matematici e con la speranza che potessero es-sere risolti nel secolo che stava per iniziare. I problemi di quella lista hannoresistito per molti decenni ed alcuni attualmente non sono stati ancora risolti.

1

Page 12: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2 CAPITOLO 1. PROBLEMI

1.1 ProblemiPer quanto sarà detto nel seguito, fra le tante possibili, adotteremo la seguentedefinizione di problema:

Un problema è un quesito a cui si vuole dare risposta o unobiettivo che si intende perseguire.

Da questa definizione risulta implicitamente che ogni problema sottintendeuno sforzo volontario per il raggiungimento del risultato finale; pertanto nonconsidereremo come problemi quelli che ammettono palesemente la risposta oquelli ai quali non siamo interessati. Coerentemente con queste ipotesi, unproblema è tale relativamente ad un dato soggetto che lo considera. Ad esem-pio, possiamo considerare come problema il seguente: Determinare le intensitàdelle correnti in un dato circuito. Al contrario, per noi non sarà un problemail seguente (essendo evidente la risposta): Decidere se un dato numero natura-le è pari o dispari. Analogamente, possiamo non considerare come problemail seguente (in quanto non ci interessa): Determinare un numero naturale pri-mo composto da cento cifre decimali. Nonostante l’apparente stravaganza,questioni di questo ultimo tipo rappresentano degli effettivi problemi praticiche si incontrano in applicazioni di codifica/decodifica di informazioni cifratenella cosiddetta crittografia a chiave pubblica.

Nel seguito considereremo solo problemi che sono definibili in modo preciso,univoco e non ambiguo, e che si prestano, quindi, ad essere risolti in modoautomatico. Con questa ipotesi si potrà ambientare i problemi in appositicontesti formali, all’interno dei quali la soluzione può essere descritta in modorigoroso. Rimane così definita una prima classificazione dei problemi, comedescritto nella figura 1.1.

'

&

$

%

problemi

problemi risolvibili in modo automatico��

��

Figura 1.1: Una classificazione dei problemi.

Esempio 1. Storicamente i primi problemi si sono presentati quando l’uomoha iniziato ad operare con i numeri e con le figure elementari del piano. Aseguire è riportata una lista di classici problemi che sono stati considerati edaffrontati dai greci più di 2000 anni fa.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 13: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.2. LA RISOLUZIONE DEI PROBLEMI 3

1. Stabilire se un numero naturale è primo.

2. Scomporre un numero naturale in fattori primi.

3. Determinare il massimo comune divisore fra due numeri naturali.

4. Determinare la lunghezza della diagonale di un quadrato di lato unitario.

5. Disegnare un poligono regolare di 17 lati con il solo uso di riga e com-passo.

1.2 La risoluzione dei problemiRisolvere un problema significa ricercare e descrivere un procedimento che,eseguito, consenta, a partire da delle informazioni iniziali (dati), di otteneredelle informazioni finali (risultati) soddisfacenti ad un criterio di verifica,secondo lo schema descritto nella figura 1.2.

dati risultati

criterio di verifica

6

-

Figura 1.2: Schema del processo risolutivo di un problema.

Il solutore è il soggetto (in genere l’uomo) che descrive le azioni da esegui-re per risolvere un problema. L’esecutore è l’entità (in genere una macchina)che esegue le azioni descritte dal solutore. La soluzione di un problema èla descrizione delle azioni (istruzioni), da parte del solutore e rivolte all’e-secutore, che, eseguite, forniscono i risultati del problema. I dati sono leinformazioni iniziali in base alle quali ricavare i risultati, che rappresentanogli oggetti o l’effetto che si ottiene mediante l’esecuzione delle istruzioni checostituiscono la soluzione. Qui i termini dati e risultati sono da intendersiin senso lato: possono essere un numero, una sequenza di numeri, la rispostaad un quesito, un disegno o qualcos’altro di più generale ancora. Notiamoche la ricerca e la descrizione della soluzione di un problema è un’attività delsolutore (e non dell’esecutore, il quale esegue il procedimento risolutivo manon lo costruisce).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 14: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4 CAPITOLO 1. PROBLEMI

Esempio 2. Consideriamo il problema della risoluzione di un’equazione di se-condo grado ax2 � bx � c � 0. Un procedimento risolutivo di questo problemaè fornito dalla ben nota formula risolutiva delle equazioni di secondo grado:

x1, x2 ��b �

ºb2 � 4ac

2aCon riferimento a questo problema, il solutore è colui che ha ideato la formularisolutiva delle equazioni di secondo grado, mentre chi la applica per trovare,con carta e penna, le radici di una particolare equazione assume il ruolo diesecutore. Nel caso venga utilizzato un programma su calcolatore per trovarele radici di un’equazione, l’esecutore è rappresentato dal calcolatore (e chiutilizza il programma assume il ruolo di semplice utente). Un criterio diverifica consiste nella sostituzione diretta dei valori trovati delle radici e nellaverifica dell’identità.

Osservazione. L’impostazione basata sui termini chiave problema, soluto-re, soluzione, esecutore, risultato è tipica del cosidetto paradigma imperativo,secondo il quale il solutore specifica all’esecutore delle direttive di come de-ve agire per ottenere il risultato finale. Un’impostazione alternativa, tipicadel cosidetto paradigma dichiarativo, consiste nel descrivere, con informazio-ni e vincoli stringenti, da parte del solutore all’esecutore, in cosa consiste ilrisultato, delegando all’esecutore il compito di trovare i passi da eseguire perdeterminarlo.

1.3 Problemi ben formulatiAi fini della loro risolvibilità i problemi che considereremo devono soddisfareai vincoli precisati nella seguente definizione. Si afferma che un problema èben formulato o formalmente definito se soddisfa alle seguenti specifiche:

1. Il problema è formulato in una forma comprensibile dal solutore

2. I dati sui quali si deve cercare la soluzione sono completi e coerenti

3. È univoco il criterio di verifica della soluzione

Esempio 3. Consideriamo il seguente problema:

Determinare il barimetro di un poliangolo.

Questo è un chiaro esempio di problema mal formulato in quanto nella suaformulazione compaiono dei termini che non hanno alcun significato.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 15: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.4. FORMALIZZAZIONE DEI PROBLEMI 5

Esempio 4. Consideriamo il seguente problema:

Risolvere la seguente situazione di gioco:

j Ì j

Ì j

Ì j

Questo è un altro esempio di problema mal formulato in quanto non è precisatoqual è il gioco, quali sono le possibili mosse e qual è il criterio per determinarese una data posizione finale è vincente. Sono invece ben formulati gli usualiproblemi di scacchi che si trovano sui giornali di enigmistica, in quanto leregole del gioco sono ben definite ed è univoco il criterio per valutare se unadata posizione finale sia vincente, in base alle regole del gioco degli scacchi,anche se tali ipotesi sono assunte implicitamente e non direttamente riportatenella formulazione del problema.Esempio 5. Un altro problema mal formulato è il seguente:

Determinare l’area di un trapezio rettangolo sapendo che lebasi maggiore e minore misurano rispettivamente 18 e 12unità.

In questo caso i dati sono insufficienti.Esempio 6. Consideriamo un altro caso di problema mal formulato:

Calcolare il valore dell’espressione 1 � 1.

Nonostante la banalità del quesito, si può osservare che si possono accettarepiù risposte a seconda del contesto che si considera: 0 se il quesito è formulatonel contesto dell’addizione fra numeri interi modulo 2; 1 in un contesto dialgebra booleana; 2 nell’usuale contesto dei numeri naturali. In questo casoviene a cadere la condizione che impone l’univocità del criterio di verifica dellasoluzione; infatti non sapremo in alcun caso verificare se la risposta è correttao meno.

1.4 Formalizzazione dei problemiIl processo di formalizzazione o modellizzazione di un problema consiste neltradurre un problema reale in una sua formulazione alternativa, semplificatama equivalente per quanto riguarda la tematica di interesse, in modo tale cheesso possa essere risolto automaticamente.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 16: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6 CAPITOLO 1. PROBLEMI

Esempio 7. Consideriamo il seguente problema:

Si ha un bersaglio delimitato da 3 cerchi concentrici. Il cer-chio più interno vale 19 punti, mentre le due corone esternevalgono rispettivamente 13 e 5 punti. Il raggio del cerchio in-terno e lo spessore delle corone sono di 7 cm. Decidere se, edeventualmente come, è possibile totalizzare 100 punti, in piùtiri.

Filtrando i dettagli superflui, tale problema può essere formalizzato medianteun’equazione diofantea, ossia mediante un’equazione avente coefficienti interie le cui radici devono essere numeri interi; l’equazione è la seguente:

Risolvere l’equazione diofantea 19x � 13y � 5z � 100.

In questo caso, data la particolare formulazione del problema, si deve imporreil vincolo che le incognite x, y, z debbano essere numeri naturali. Risolvendoquesta equazione si trova la soluzione �x � 3, y � 1, z � 6�. Questo risultatoammette la seguente interpretazione:

Ci si può chiedere se questa sia l’unica soluzione; la risposta è evidente-mente no in quanto si nota la soluzione �x � 0, y � 0, z � 20�. Il problemadiventa allora più interessante se si impone il vincolo di ridurre al minimo ilnumero di tiri necessari per totalizzare 100 punti.

Ogni formalizzazione e schematizzazione comporta una certa semplifica-zione, riduzione, della realtà: nella soluzione sopra non si considera il caso chedelle frecce vadano proprio su una linea di separazione fra due zone.

Notiamo che se il problema consistesse nel determinare i punti da assegnarealle varie corone del bersaglio, dato il numero di tiri in ciascuna corona ed iltotale dei punti da ottenere, il problema potrebbe essere formalizzato medianteun’equazione diofantea simile a quella riportata sopra.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 17: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.5. RISOLVIBILITÀ DEI PROBLEMI 7

1.5 Risolvibilità dei problemiUn procedimento risolutivo di un problema può essere efficacemente raffiguratocome un cammino che congiunge i dati iniziali ai risultati finali. È statoosservato precedentemente che per alcuni problemi non si conosce oppure nonesiste alcun cammino risolutivo. A seconda che questo cammino esista o no,si possono classificare i corrispondenti problemi come segue:

1. problemi risolvibili: sono quei problemi che ammettono un procedi-mento risolutivo. Questi problemi possono essere descritti dal seguenteschema:

dati risultati-

Appartiene a questa classe il problema di risolvere un’equazione algebricapolinomiale di secondo grado.

2. problemi risolvibili? : sono quei problemi per i quali non è noto seesista un procedimento risolutivo. Possono essere descritti dal seguenteschema:

dati risultati-?

Un esempio di problema di questa classe è costituito dalla congettura cheesistano infinite coppie di numeri primi gemelli, ossia numeri naturaliche differiscono per due unità (esempi di coppie di numeri primi gemelli:�3,5�, �5,7�, �11,13�, �17,19�).

3. problemi irrisolvibili: sono quei problemi per i quali è noto che non esi-ste alcun procedimento risolutivo. Possono essere descritti dal seguenteschema:

dati risultati-//

La soluzione di una generica equazione algebrica polinomiale di gradomaggiore di 4 in un’incognita è un esempio di problema irrisolvibile.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 18: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8 CAPITOLO 1. PROBLEMI

1.6 Tipologie dei problemiI problemi presentano delle analogie rispetto ad alcune caratteristiche qualila forma del problema, la sua risolvibilità, la tipologia dei dati e dei risultati,l’ambiente di operatività (aritmetico, geometrico, grafico, . . . ). La variega-ta gamma dei problemi che si incontrano può essere pertanto classificata incategorie rispetto ad una di queste caratteristiche. Classificare un problemacostituisce un primo passo verso la sua comprensione e, quindi, verso la suasoluzione.

Molto spesso i problemi rappresentano delle analogie con riferimento alleinformazioni iniziali che si dispongono ed all’obiettivo finale che si intenderaggiungere. Come si vedrà più avanti, queste tre classi di problemi verrannorisolte mediante delle corrispondenti classi di algoritmi (funzioni, predicati,procedure). In base a questo criterio i problemi che più frequentemente siincontrano nella programmazione possono essere partizionati nelle classi diseguito descritte.

1.6.1 Problemi computazionali

Una delle categorie più tradizionaali di problemi ammette delle soluzioni cherichiedono di eseguire calcoli su dei dati che sono dei numeri. Questi proble-mi vengono classificati come problemi computazionali e vengono formulatisecondo il seguente schema:

A partire da dei dati iniziali noti,mediante dei calcoli,determinare dei risultati.

dati risultaticalcolo -

Esempio di problema computazionale: Determinare la lunghezza della dia-gonale di un parallelepipedo.

1.6.2 Problemi decisionali

Una vasta classe di problemi rientra nell’insieme dei problemi di decisioneche hanno il caratteristico incipit Decidere se . . . ed hanno come risultato veroo falso. Questi problemi spaziano dall’ambito della logica, alla matematicaed includono molte questioni tipiche dell’informatica.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 19: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.6. TIPOLOGIE DEI PROBLEMI 9

Un problema decisionale ha la seguente struttura:

Fissate delle ipotesi iniziali,attraverso calcoli e deduzioni logiche,stabilire se una data proposizione è vera.

dati vero/falsodecisione -

Esempio di problema computazionale: Decidere se un dato numero natu-rale n è primo.

1.6.3 Problemi esecutivi

I problemi di tipo esecutivo si formulano come segue:

Fissata una situazione iniziale di partenza,eseguire una sequenza di trasformazioniin modo da ottenere una situazione finale obiettivo.

situazione iniziale situazione finaletrasformazione

-

Esempio di problema esecutivo: Problema della torre di Hanoi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 20: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10 CAPITOLO 1. PROBLEMI

1.7 Istanze e classi di problemiIn generale, i dati che compaiono nella formulazione dei problemi sono deivalori generici, denotati solitamente mediante dei nomi. In questo modo sievidenzia una classe di problemi i cui elementi (problemi), detti istanzedi problemi, si ottengono per particolari valori assunti dai dati.Esempio 8. Consideriamo il problema di determinare l’area di un rettangolo,note le misure dei suoi lati. In questo caso rimane individuata la seguenteclasse di problemi:

Determinare l’area di un rettangolo di lati a e b.

A questa classe appartiene, ad esempio, la seguente istanza di problema:

Determinare l’area di un rettangolo di lati 3 cm e 4 cm.

Nel seguito, quando si parla di problema si intenderà solitamente una classedi problemi, che risulta caratterizzata da dei parametri che costituiscono i dati.

Una classe di problemi è strettamente associata alla classe delle entitàcoinvolte nel problema. Pertanto, come si vedrà nelle prossime pagine, leconsiderazioni relative ai problemi si possono trasporre e formulare in termi-ni delle entità coinvolte nei problemi stessi. Ad esempio, generalizzare unaclasse di problemi sarà spesso equivalente a generalizzare le classi delle entitàcoinvolte nel problema.

Le classi di problemi ammettono un procedimento risolutivo generale in-dipendente dalle particolari istanziazioni dei dati. Ad esempio, un metododi soluzione per la ricerca del massimo comune divisore di due numeri natu-rali m e n deve essere valido per qualsiasi coppia di valori assunti da m e n.Risulta dunque evidente che un metodo risolutivo di un problema deve essereapplicabile ad un’intera classe di problemi le cui istanze differiscono soltantoper i particolari valori assunti dai dati iniziali. Con queste premesse, quandonel seguito si userà il termine soluzione di un problema ci si riferirà ad unprocedimento risolutivo generale, valido per un’intera classe di problemi allaquale appartiene il problema considerato.

Lo schema attraverso il quale si ricava il risultato di una particolare istanzadi problema si sviluppa attraverso le seguenti fasi successive:

1. considerazione dell’istanza P del problema

2. individuazione di una classe C alla quale appartiene il problema P

3. ricerca e descrizione di un procedimento risolutivo A per la classe C

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 21: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.8. GENERALIZZAZIONE DEI PROBLEMI 11

4. applicazione del procedimento risolutivo A all’istanza P

Graficamente, queste fasi possono essere evidenziate mediante lo schema ri-portato in figura 1.3.

soluzione istanza I procedimento per C

classe C di problemigeneralizzazionedel problema

particolarizzazione delprocedimento risolutivo

soluzione dellaclasse C

di problemi

istanza I di problema -

?

Figura 1.3: Schema delle fasi per la soluzione di un’istanza di problema.

1.8 Generalizzazione dei problemi

Come è stato sopra suggerito, quando ci si imbatte in un problema particolare(ad esempio, trovare le radici dell’equazione x2�3x�5 � 0) prima di impostarela soluzione è conveniente, per fare un buon investimento dello sforzo che cisi appresta a compiere, trovare una opportuna generalizzazione del problema.La generalizzazione di un problema specifico individua una classe di problemidella quale il problema originale costituisce una particolare istanza. Il puntocentrale del procedimento di generalizzazione riguarda le seguenti questioni:

• Come generalizzare?

• Fino a che punto generalizzare?

Un po’ di buon senso (all’inizio) ed un po’ di esperienza (quando sarà statamaturata) saranno sufficienti come guida per individuare una buona genera-lizzazione.

Graficamente, il procedimento di generalizzazione di un’istanza di proble-ma e delle successive generalizzazioni può essere descritto come in figura 1.4.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 22: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12 CAPITOLO 1. PROBLEMI

Y istanza classe C1

��

��Y

classe C1

��

��Y

classe C2

'

&

$

%- -

Figura 1.4: Passi di generalizzazione di un’istanza di problema.

Esempio 9. Consideriamo la seguente istanza di problema:

Determinare la distanza fra i due punti del piano cartesianoP �1,2�, Q�4,3�.

Una prima generalizzazione consiste nel prendere dei valori generici per i datidelle coordinate dei punti:

Determinare la distanza fra i due punti del piano cartesianoP �x1, y1�, Q�x2, y2�.

Per individuare delle successive generalizzazioni è sufficiente considerare itermini del problema che si prestano ad essere generalizzati:

2 punti � n punti

piano � spazio k-dimensionaledistanza � distanza d generica

Adottando queste generalizzazioni si ottiene la seguente formulazione moltogenerale del problema:

Determinare il diametro della più piccola sfera k-dimensionalecontenente un dato insieme �a1, ..., an� di n elementi di unospazio metrico �E,d�.

Per il momento questa formulazione potrà risultare alquanto oscura, ma sia-mo sicuri che, una volta risolta questa classe di problemi, avremo trovatouna soluzione per moltissime sottoclassi, appartenenti magari a contesti moltodisparati.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 23: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.9. ESERCIZI 13

1.9 Esercizi1. Spiegare la differenza fra i termini soluzione e risultato.

2. Spiegare il significato dei termini solutore ed esecutore.

3. Spiegare perché non ha senso considerare un procedimento risolutivosenza fare riferimento alle capacità dell’esecutore.

4. Spiegare se i problemi risolvibili? possono essere classificati con il ter-mine irrisolvibili?.

5. Fissato un dato problema P, si considerino i seguenti due problemi:

P1: Il problema P ammette soluzione ?P2: Risolvere il problema P .

Classificare i problemi P1 e P2 in base alla loro forma. Stabilire, infunzione della risolvibilità di P , la risolvibilità dei problemi P1 e P2.

6. Determinare per quali valori di n il seguente problema ammette un unicorisultato:

Fissati sul piano un insieme di n punti distinti P1, . . . , Pn, dise-gnare un poligono di n lati non intrecciati, aventi P1, . . . , Pn comevertici.

7. Descrivere un problema che sia modellizzabile mediante un’equazionediofantea.

8. Definire delle ipotesi in modo che il seguente problema risulti ben for-mulato:

Ordinare una sequenza di triangoli.

9. Spiegare perché, senza assumere tacite ipotesi, i seguenti problemi sonomal formulati. Ridefinirli in modo che risultino ben formulati.

(a) Risolvere l’equazione di secondo grado ax2 � bx � c � 0.(b) Determinare il numero delle cifre di un numero naturale.(c) Determinare la somma delle cifre di un numero naturale.(d) Determinare la somma delle cifre di un numero naturale considerato

in base 10.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 24: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14 CAPITOLO 1. PROBLEMI

(e) Determinare i più piccoli dieci numeri naturali che si leggono indif-ferentemente da sinistra a destra e da destra a sinistra.

(f) Date le misure dei lati di un triangolo acutangolo, determinare ilpiù piccolo rettangolo che lo ricopre.

(g) Date le misure di un lato e della diagonale di un triangolo rettan-golo, determinarne l’area ed il perimetro.

(h) Date le misure dei lati di un quadrilatero, decidere se il quadrilateroè convesso.

(i) Date le misure dei 6 segmenti congiungenti in tutti i modi possibili ivertici di un quadrilatero, determinare il perimetro del quadrilatero.

(j) Fissati sul piano 4 punti distinti e non allineati, disegnare il qua-drilatero non intrecciato avente per vertici i 4 prefissati punti.

10. Determinare per quali valori di n il seguente problema è ben formulato:

Determinare l’area di un poligono di n lati conoscendone lamisura dei lati, in ordine in base alla consecutività dei lati.

11. È assegnato un insieme A � �P1, P2, ..., Pn� di n punti del piano. Sta-bilire se i seguenti due problemi sono ben formulati; in caso affermativodire in cosa consistono i dati, i risultati ed il criterio di verifica.

(a) Determinare l’area del poligono di vertici A.(b) Determinare l’involucro convesso dell’insieme dei punti A, ossia il

più piccolo poligono convesso contenente i punti dati.

12. Descrivere una classe di problemi che includa le seguenti tre classi diproblemi sui numeri naturali:

(a) Numerare per n da p a q.(b) Determinare tutti i numeri compresi fra due dati valori.(c) Determinare tutti i multipli di un dato valore, compresi fra due

numeri assegnati.

13. Si considerino le seguenti due istanze di problemi:

I1: Valutare log2 9871I2: Valutare log8 24364

Definire una classe C di problemi alla quale appartengano le due istanzeI1 e I2 riportate sopra.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 25: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.9. ESERCIZI 15

14. Individuare i dati ed i risultati della seguente classe di problemi:

Convertire un numero naturale fra due generiche basi.

Si faccia attenzione al significato di numero e rappresentazione di unnumero.

15. Individuare i dati ed i risultati della seguente classe di problemi:

Determinare la somma dei reciproci dei primi n numeri naturali.

16. Individuare i dati ed i risultati delle seguenti classi di problemi nelcontesto della geometria del piano cartesiano:

P1: Determinare la circonferenza circoscritta ad un triangolo.P2: Determinare la retta passante per due punti.P3: Determinare il punto di intersezione fra due rette.

17. Generalizzare la seguente istanza di problema, proponendo delle classidi problemi via-via più generali.

Determinare la lunghezza della diagonale di un quadrato di lato2 cm.

18. Generalizzare la seguente istanza di problema:

Risolvere l’equazione 2x�8 � 0, nell’insieme dei numeri naturali.

Suggerimento: si possono ottenere delle generalizzazioni sia amplian-do l’insieme dove si cercano le soluzioni, sia generalizzando la formadell’equazione.

19. Generalizzare la seguente istanza di problema:

Decidere se ci sono domeniche comprese nel periodo dal 30ottobre 2014 al 2 novembre 2014.

Classificare, in base alla forma ed alla risolvibilità, la classe di problemiottenuta nella precedente generalizzazione.

20. Generalizzare le seguenti istanze di problemi:

(a) Determinare l’area di un quadrato di lato 2 cm.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 26: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16 CAPITOLO 1. PROBLEMI

(b) Trovare il lato del triangolo equilatero inscritto in un cerchio diraggio 8 cm.

(c) Ordinare i tre numeri 5, 4, 6.(d) Nel piano cartesiano, determinare la distanza fra i due punti P ��1,2�, Q � �3,4�.(e) Disegnare un quadrato rosso di lato 1 cm.(f) Determinare la distanza del punto di coordinate �1,2� dall’origine

degli assi cartesiani.

Per ciascuna classe di problemi che si è individuata, si precisino qualisono i dati e quali i risultati.

21. Si consideri il seguente problema:

Dire se il punto del piano cartesiano avente per coordinate leradici dell’equazione 6x2 � 5x � 1 � 0 è vicino all’origine degliassi.

(a) Motivando le affermazioni, dire se il problema proposto è ben for-mulato.

(b) Nel caso il problema sia mal formulato, riformularlo adeguatamentein modo che risulti ben formulato.

(c) Con riferimento al problema ben formulato, specificare in cosa con-sistono i dati ed i risultati.

(d) Classificare il problema in base alla sua forma (computazionale,decisionale, trasformazionale).

(e) Generalizzare il problema, proponendo più generalizzazioni succes-sive.

22. Si consideri il seguente problema:

Conoscendo le misure dei lati di due triangoli, stabilire se untriangolo è più piccolo dell’altro.

(a) Motivando le affermazioni, dire se il problema proposto è ben for-mulato.

(b) Nel caso che il problema non sia ben formulato, riformularlo ade-guatamente in modo che risulti ben formulato.

(c) Classificare il problema in base alla sua forma (computazionale, ...).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 27: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

1.9. ESERCIZI 17

(d) Con riferimento al problema ben formulato, specificare in cosa con-sistono i dati, i risultati ed un criterio di verifica della soluzione.

(e) Generalizzare il problema, proponendo più generalizzazioni succes-sive.

23. I seguenti tre problemi sono apparentemente simili ma, ad una attentaanalisi, si capisce che sono di differenti complessità:

P1: Determinare un numero primo di k cifre decimali.P2: Decidere se un dato numero naturale n è primo.P3: Scomporre in fattori primi un dato numero naturale n.

Assumendo in modo intuitivo il concetto di complessità di un proble-ma, intesa come una misura del tempo di esecuzione della miglior so-luzione del problema, discutere questi problemi in riferimento alla lorocomplessità, ordinandoli dal più semplice al più difficile.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 28: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18 CAPITOLO 1. PROBLEMI

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 29: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 2

Algoritmi

Per troppo tempo, la gente ha tentato diformulare gli algoritmi in un linguaggio diprogrammazione, piuttosto che decompor-re attentamente il problema in problemipiù semplici e verificare le loro relazioni pri-ma di procedere ad una specificazione piùdettagliata. [...] L’esperienza ha dimostra-to che [il secondo approccio] permette disviluppare algoritmi con molti meno erroriche non il vecchio metodo linea-per-linea.S.Alagic, M.A.Arbib,The design of well-structured and correctprograms

Nelle pagine seguenti sarà definita e precisata la nozione di procedimen-to risolutivo per la soluzione di un problema, in modo che sia adattabile aicalcolatori. Sarà presentato il concetto di algoritmo che rappresenta un’evo-luzione in senso dinamico del concetto di formula risolutiva della matematica.I primi algoritmi furono ideati per risolvere problemi di tipo numerico: molti-plicazione e divisione fra due numeri, massimo comune divisore fra due numerinaturali. Oggigiorno gli algoritmi vengono applicati per risolvere problemi divaria natura ed operano sulle più svariate tipologie di entità.

19

Page 30: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20 CAPITOLO 2. ALGORITMI

2.1 Formule risolutive

Consideriamo il seguente problema:

Determinare l’area di un trapezio note le misure B e b dellebasi e h dell’altezza.

Per questo problema il procedimento risolutivo è immediato e può essereespresso per mezzo della semplice formula risolutiva

area � �B � b�h~2Anche qui, comunque, la formula risolutiva maschera un procedimento riso-lutivo, a più basso livello, che può essere esplicitato, a parole, come descrittonell’algoritmo 1.

Algoritmo 1 - Calcolo dell’area di un trapezio1: considera i valori delle misure delle basi e dell’altezza2: somma le misure delle due basi3: moltiplica il risultato per l’altezza4: dividi il risultato per 25: il risultato ottenuto rappresenta l’area del trapezio

È noto però che i procedimenti risolutivi di molti problemi, anche limitan-dosi ai problemi di tipo computazionale, non possono essere espressi medianteun’unica formula risolutiva né mediante un’elencazione sequenziale di passi.Servono, in generale, dei costrutti linguistici più articolati. In altre parole,non esiste più una corrispondenza biunivoca fra le frasi della descrizione delleistruzioni e l’esecuzione delle istruzioni. Per convincersi di quanto appenaaffermato consideriamo il seguente altro problema:

Determinare il massimo comune divisore di due numeri natu-rali m ed n, ossia il più grande numero naturale che divide siam che n.

In questo esempio il risultato non è direttamente ricavabile mediante una sin-gola formula risolutiva come nell’esempio precedente, ma necessita di un pro-cedimento risolutivo più articolato detto algoritmo. Questo problema saràripreso e risolto in più modi nel seguito.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 31: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2.2. ALGORITMI 21

2.2 AlgoritmiIn modo informale, un algoritmo è la descrizione della soluzione di una clas-se di problemi, ossia la descrizione delle azioni, da eseguirsi da parte di undato esecutore, mediante le quali si risolve una classe di problemi; inoltre, unalgoritmo deve soddisfare alle seguenti condizioni:

definitezza : ogni azione deve essere deterministica ed univocamente inter-pretabile dall’esecutore.

eseguibilità : ogni azione deve essere effettivamente eseguibile da parte del-l’esecutore.

finitezza : le istruzioni devono essere in numero finito, ciascuna azione deveessere eseguita in un tempo finito ed ogni azione deve essere eseguita unnumero finito di volte.

generalità : la descrizione del procedimento risolutivo deve applicarsi a tuttele istanze della classe dei problemi.

Queste condizioni differenziano quelli che genericamente sono dei procedimentirisolutivi da quei procedimenti che possono essere classificati come algoritmi.Ad esempio, una ricetta di cucina può essere classificata come un procedimentorisolutivo ma non come un algoritmo. Comunque, quando nel seguito siutilizzerà il termine procedimento risolutivo, tale termine è da intendersi consignificato di algoritmo, secondo la definizione data sopra.

Questa definizione di algoritmo è una fra le tante possibili. Tutte le altreche si possono trovare sui testi di informatica, anche se apparentemente diverseed espresse in modo più formale (ad esempio, macchina di Turing, sistemacanonico di Post, lambda-calcolo di Church) sono equivalenti a questa.

Osserviamo che, con le condizioni di generalità e finitezza, si impone cheun algoritmo termini per ogni istanziazione dei dati di ingresso. Nonostanteche nella definizione di algoritmo si imponga che la descrizione delle istruzionisia finita, non si esclude il caso che le istruzioni possano essere eseguite unnumero infinito di volte. In molti casi quest’ultima condizione di finitezzarisulta troppo forte e, per poter trattare una classe più ampia di procedimentirisolutivi, risulta conveniente alleggerire la condizione di finitezza relativamen-te al numero di volte che viene eseguita ogni singola istruzione, ammettendoche delle istruzioni possano essere eseguite per un numero infinito di volte. Intali condizioni un procedimento risolutivo è detto metodo computazionale.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 32: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22 CAPITOLO 2. ALGORITMI

'

&

$

%

'

&

$

%'&

$%algoritmi

procedimenti risolutivi

metodi computazionali

Figura 2.1: Algoritmi, metodi computazionali e procedimenti risolutivi.

La nozione di algoritmo è strettamente connessa con la nozione di ese-cutore: basta considerare i termini univocamente interpretabile e realmenteeseguibile. È evidente quindi che un algoritmo presuppone che esista unesecutore che lo interpreti ed esegua le istruzioni specificate.

Anche se la finalità di un algoritmo è quella di essere eseguito da un calco-latore e necessita pertanto di essere tradotto in uno specifico linguaggio di pro-grammazione, un algoritmo è indipendente dal linguaggio di programmazionenel quale verrà tradotto.

2.3 Algoritmi come funzioniRisolvere un problema significa sostanzialmente definire una funzione che operasui dati iniziali di input e produce dei risultati finali di output. Ad esempio,se il problema è

Trovare l’area di un trapezio date le misure B e b delle basi ela misura h dell’altezza.

la soluzione può essere espressa mediante l’espressione funzionale

area � f�B, b, h� � �B � b�h~2Anche quando l’algoritmo non sia esprimibile mediante una singola espressionefunzionale, esso può sempre comunque essere considerato come una funzioneche, operando sui dati di input, costruisce i risultati di output (in questo casoè solo più laboriosa la descrizione e la valutazione della funzione). Adottandoquesta impostazione, ed usando la tradizionale convenzione di denotare con iltermine Input l’insieme dei dati e con il termine Output l’insieme dei risultati,descriveremo un algoritmo mediante uno schema a blocchi come il seguente:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 33: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2.3. ALGORITMI COME FUNZIONI 23

Input Outputalgoritmo

-

oppure

Input Outputalgoritmo- -

Nel primo caso si vuole mettere in evidenza i dati ed i risultati, mentre nelsecondo viene sottolineato il ruolo dell’algoritmo che stabilisce l’associazionefra dati e risultati. In questo secondo caso un algoritmo può essere visto comeuna funzione che opera sui dati iniziali x di input e produce dei risultati finaliy di output secondo lo schema:

A � Input � Output

L’interpretazione di un algoritmo come funzione porta a delle naturali defini-zioni e concetti. In particolare il codominio dell’algoritmo è detto spazio diricerca (dei risultati).

Con queste premesse risulta significativa la seguente

DEFINIZIONE 1. Due algoritmi A1 ed A2 si dicono funzionalmenteequivalenti se hanno lo stesso dominio e calcolano lo stesso risultato y perogni possibile istanziazione dei dati di input x, ossia

A1�x� � A2�x� � y per ogni x > Input

Due algoritmi si dicono equivalenti se fanno compiere all’esecutore la stes-sa sequenza di azioni. È evidente che l’equivalenza implica l’equivalenzafunzionale.

Data la definizione di equivalenza fra algoritmi, acquista importanza pra-tica il seguente problema: Decidere se due dati algoritmi sono equivalenti. Lasoluzione di questo problema dovrebbe essere un algoritmo che, dati due algo-ritmi come suoi dati di input, decida se questi algoritmi sono equivalenti. Èstato dimostrato che un tale algoritmo di decisione non esiste.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 34: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24 CAPITOLO 2. ALGORITMI

2.4 Livelli descrittivi degli algoritmi

Gli algoritmi vengono descritti con un linguaggio e con livello di dettaglio delleazioni da eseguire che dipendono dalle capacità dell’esecutore.

Consideriamo ad esempio il seguente problema:

Note le misure a e b dei due lati di un rettangolo, determinarela misura d della diagonale.

Se l’esecutore è uno studente che abbia frequentato almeno le scuole medieinferiori, un procedimento risolutivo potrebbe essere:

Determina d usando il teorema di Pitagora.

Se l’esecutore non conosce il teorema di Pitagora, un procedimento risolutivo,espresso in modo algebrico, potrebbe essere:

d �ºa2 � b2

Se l’esecutore non conosce nemmeno il simbolismo algebrico che compare nel-la formula precedente o non è in grado di eseguire le operazioni indicate,il procedimento risolutivo dovrebbe essere descritto ad un livello ancora piùelementare.

Questo semplice esempio evidenzia che uno stesso algoritmo, pur riferendo-si allo stesso problema, può essere espresso con notazioni ed a livelli descrittividiversi, in funzione delle capacità e delle conoscenze dell’esecutore al quale èrivolto.

2.5 Il principio di complessità

In questo paragrafo si analizzerà la relazione che intercorre tra la potenza diun esecutore e la complessità della soluzione per risolvere un dato problema.

Consideriamo il problema di trasformazione di una configurazione di bloc-chi, come illustrato dallo schema che segue:

ABCD

CDBA

-

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 35: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2.5. IL PRINCIPIO DI COMPLESSITÀ 25

Possiamo pensare che qui l’esecutore sia una persona, un robot o qualcos’altro.Per rendere il problema un po’ interessante supponiamo, per il momento, chel’esecutore abbia la capacità di spostare un solo blocco alla volta. Con questaipotesi, una soluzione del problema è fornita dall’algoritmo 2.

Algoritmo 2 - Algoritmo spostamento blocchi (caso a)1: sposta il blocco D sul piano2: sposta il blocco C sul piano3: sposta il blocco D sopra a C4: sposta il blocco B sopra a D5: sposta il blocco A sopra a B

In questo contesto, il solutore è colui che ha scritto la sequenza delle azio-ni, l’esecutore è l’entità che effettua lo spostamento dei blocchi, gli oggettiche vengono manipolati sono costituiti dai blocchi, le azioni consistono nellospostare i blocchi, i dati sono rappresentati dalla configurazione iniziale ed irisultati dalla configurazione finale che si vuole ottenere.

Se ammettiamo che l’esecutore abbia la capacità di spostare una qualsia-si pila di blocchi, senza capovolgerla, la soluzione del problema può essereformulata come descritto nell’algoritmo 3.

Algoritmo 3 - Algoritmo spostamento blocchi (caso b)1: sposta la pila di blocchi CD sul piano2: sposta il blocco B sopra a D3: sposta il blocco A sopra a B

Da questa semplice variazione abbiamo la riconferma che la soluzionedipende dalle capacità dell’esecutore.

Se ammettiamo che l’esecutore abbia anche la capacità di spostare unaqualsiasi pila di blocchi e possa, eventualmente, deporla capovolta, una solu-zione può essere più semplicemente espressa come descritto nell’algoritmo 4.

Algoritmo 4 - Algoritmo spostamento blocchi (caso c)1: sposta la pila di blocchi CD sul piano (senza capovolgerla)2: sposta la pila di blocchi AB sopra D capovolgendola

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 36: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26 CAPITOLO 2. ALGORITMI

Gli esempi appena presentati evidenziano che la soluzione di un problemanon solo dipende dalle capacità dell’esecutore ma che la soluzione è tanto piùbreve e semplice quanto più potenti sono le capacità dell’esecutore. La lun-ghezza di una soluzione, misurata come numero delle istruzioni elementari chela compongono, rappresenta un’indicazione della complessità della soluzione.Se la soluzione viene espressa in una forma non sequenziale ma strutturatamediante delle strutture (condizionali e/o cicliche) di controllo delle azioni, ilconcetto di complessità deve essere espresso in un modo più elaborato. Assu-mendo in modo intuitivo il concetto di complessità di una soluzione, possiamoaffermare il seguente principio:

PROPRIETÀ 1. (Principio di complessità della soluzione). La complessitàdella soluzione di un problema diminuisce all’aumentare della potenza delleazioni che l’esecutore è in grado di compiere.

In base a questo principio possiamo dedurre che è molto più laborioso fareseguire una moltiplicazione fra due numeri naturali ad un esecutore che ècapace solamente di addizionare un’unità alla volta che non ad un esecuto-re capace di addizionare due numeri qualsiansi. Il caso estremo è quandol’esecutore è capace di moltiplicare due numeri; in tale caso la soluzione delproblema può essere espressa semplicemente in una forma del tipo moltiplicax per y. Il discorso può essere generalizzato come segue. Dato un problemaP , l’ideale sarebbe disporre di un esecutore così potente da poter esprimere lasoluzione mediante la sola istruzione

Risolvi il problema P .

Evidentemente, la realtà è ben diversa; inoltre, il procedimento risolutivo ètanto più lungo e complesso quanto più il linguaggio con il quale ci si rivolgeall’esecutore è ”lontano” dal problema trattato. Per diminuire la distanza frail linguaggio usato e problema trattato, i linguaggi di programmazione offronodegli strumenti appositi: definizioni di sottoprogrammi, definizioni di tipi didato, definizioni di classi ed altro ancora.

2.6 Tavola di traccia di un algoritmoConsideriamo ora un algoritmo per moltiplicare due numeri naturali. Il pro-cedimento, noto con il nome di algoritmo del contadino russo, consiste nelraddoppiare iterativamente un fattore mentre si dimezza l’altro, tenendo contodove il valore del primo fattore è dispari. Il passo finale consiste nell’addi-zionare i multipli del fattore che è stato raddoppiato, in corrispondenza dei

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 37: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2.6. TAVOLA DI TRACCIA DI UN ALGORITMO 27

punti in cui il valore del primo fattore è dispari. Ad esempio, l’applicazionedi questo algoritmo per calcolare il prodotto fra i due numeri m � 22 e n � 13è descritto tabella riportata nella figura 2.2.

m m dispari ? n

22 no 1311 si 265 si 522 no 1041 si 2080

prodotto: 286

Figura 2.2: Traccia del calcolo 22�13 mediante l’algoritmo del contadino russo.I numeri sottolineati corrispondono alla condizione m dispari e costituisconogli addendi che, sommati, producono il risultato finale 286.

Una tabella come questa è detta tavola di traccia; corrisponde all’algoritmoapplicato ad un’istanza di problema, descrivendo nel tempo i valori associa-ti alle entità coinvolte nell’algoritmo. La tavola di traccia è paragonabilead una sequenza di fotogrammi che descrive l’avanzamento del processo dielaborazione.

Notiamo che le fasi operative per l’applicazione di questo procedimentosono (specialmente se i fattori sono grandi) più laboriose rispetto all’usualemetodo di moltiplicazione, ma in questo procedimento le capacità coinvoltesono più elementari. Un esecutore deve infatti essere in grado di eseguire leseguenti operazioni:

• duplicare un numero naturale

• dimezzare un numero naturale

• decidere se un numero naturale è dispari

• addizionare numeri naturali

Notiamo inoltre che questo procedimento di moltiplicazione non è commutativoe che, poiché l’operazione di moltiplicazione è commutativa, in un prodotto èpreferibile prendere come fattore da dimezzare quello minore, per ottimizzarel’efficienza del procedimento.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 38: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28 CAPITOLO 2. ALGORITMI

2.7 Esercizi1. Si ha un sacco pieno di chicchi di grano ed uno pieno di chicchi di fru-

mento. Il problema consiste nel decidere quale dei due sacchi contienepiù chicchi. Con riferimento a questo problema:

(a) Si precisi in cosa consistono i dati ed i risultati del problema.(b) Descrivere un algoritmo che richieda all’esecutore delle capacità il

più possibile elementari. Precisare le capacità richieste all’esecu-tore dall’algoritmo che si è descritto. Suggerimento: non serve chel’esecutore sappia contare.

2. Per i problemi che seguono si individuino i dati ed i risultati e si stabiliscase il problema è ben formulato o meno. Nel caso il problema sia benformulato, descrivere un algoritmo, evidenziando quali devono essere lecapacità dell’esecutore al quale è rivolto.

(a) Dato il perimetro e l’area di un triangolo, determinarne le misuradei lati.

(b) Data l’area ed il perimetro di un rettangolo, determinarne la dia-gonale.

(c) Dato il perimetro di un rettangolo, determinarne l’area.(d) Data l’area e la base di un rettangolo, determinarne l’altezza.(e) Data l’area ed il perimetro di un rettangolo, determinarne i lati.(f) Dati le lunghezze dei cateti di un triangolo rettangolo, determinarne

l’altezza relativa all’ipotenusa.

3. Si consideri il seguente problema:

Data l’area ed il perimetro di un triangolo, decidere se esso è untriangolo rettangolo.

(a) Stabilire la tipologia del problema proposto (computazionale, deci-sionale, trasformazionale, ...)

(b) Motivando adeguatamente le affermazioni, stabilire se il problemaproposto è ben formulato.

(c) Nel caso in cui il problema sia ben formulato, descrivere un algorit-mo adeguato per un esecutore avente le conoscenze di uno studentedi una terza superiore.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 39: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

2.7. ESERCIZI 29

4. Dire, motivando le affermazioni, perchè il seguente problema non è benformulato: Determinare l’area di un quadrilatero note le misure a, b, c,d dei lati. Riformulare il problema in modo da renderlo ben formulato.Disponendo di un esecutore in grado di eseguire le usuali operazioniaritmetiche (�, �, �, ~, º, . . . ) descrivere un algoritmo per risolvere ilproblema in questione.

5. Si consideri la seguente istanza di problema:

Suddividere un segmento di 10 cm in 2 parti di cui una sia i 3~7dell’altra. Si supponga di disporre degli usuali attrezzi da dise-gno: due squadrette a 45o e 30o, 60o, una matita, un compasso,con l’ipotesi che le squadrette siano sufficientemente lunghe manon siano graduate.

(a) Generalizzare il problema proposto.(b) Descrivere un procedimento, da riportare su un testo scolastico di

disegno tecnico, per risolvere la classe di problemi che si è indivi-duata.

(c) Motivare perchè nella formulazione del quesito precedente si è sen-tita l’esigenza di precisare “da riportare su un testo scolastico didisegno tecnico”?

6. Supponendo di disporre di un esecutore capace di applicare il teorema diPitagora, descrivere un procedimento risolutivo per determinare la dia-gonale di un parallelepipedo rettangolo di cui si conoscono le lunghezzadegli spigoli.

7. Conoscendo le misure delle lunghezze degli spigoli di un parallelepipedorettangolo, determinare la misura della sua massima superficie di ap-poggio e l’altezza minima del suo baricentro (nella situazione in cui ilparallelepipedo si appoggiato sulla sua massima superficie di appoggio).

8. Definire in modo preciso e non ambiguo le operazioni lecite nelle costru-zioni con riga e compasso. Con le operazioni definite, determinare unsegmento avente per misura la radice quadrata della misura di un datosegmento. Suggerimento: utilizzare il secondo teorema di Euclide.

9. Si è in un deserto e si dispone di una corda lunga 47 metri e delle forbici.Costruire un recinto di forma quadrata.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 40: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

30 CAPITOLO 2. ALGORITMI

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 41: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 3

Macchine

L’informatica non riguarda i computer piùdi quanto l’astronomia riguardi i telescopi.Edsger Wybe Dijkstra(informatico olandese) [1930-2002]

Per ottenere i risultati dei problemi risolvibili automaticamente, l’uomoha costruito degli esecutori automatici: robot meccanici, elaboratori elettro-nici, calcolatori biologici ed altre tipologie di marchingegni. A prescinderedalle particolari tecnologie realizzative, tali esecutori vengono genericamentedenominati macchine.

Per realizzare una macchina si possono sostanzialmente adottare due stra-tegie: assemblare opportunamente dei componenti elementari di base (dotatidi una loro ben determinata funzionalità) oppure prendere una macchina giàcostruita, non dotata di alcuna specifica funzionalità, ma in grado di recepi-re un insieme di istruzioni (programmi) che ne regoleranno il funzionamento.La versatilità di questa seconda tipologia di macchine si fonda proprio sullapossibilità variare il loro modo di agire cambiando il programma che ne regolale modalità di funzionamento. Queste due strategie possono essere adotattecontemporaneamente, costruendo delle macchine programmabili.

31

Page 42: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

32 CAPITOLO 3. MACCHINE

3.1 Macchine

Dal punto di vista di un utente, astraendo da qualsiasi dettaglio implementati-vo e considerando solamente la sua funzionalità verso l’esterno, una macchinapuò essere considerata come una scatola nera, schematizzabile come descrittonella figura 3.1. L’utente sollecita la macchina fornendo in ingresso valori,espressioni, comandi, interrogazioni, regole, istruzioni e la macchina rispon-de fornendo dei risultati in uscita, in una qualche in modalità (testo, grafica,audio, . . . ). Coerentemente con quanto avviene usando un generico elabo-ratore, la macchina manifesta all’esterno, verso l’utente, i risultati attraversodei dispositivi di output, in genere un video.

macchina- -ingressi uscite

Figura 3.1: Schema di una generica macchina.

3.1.1 Macchine combinatorie

Una macchina combinatoria è caratterizzata dal fatto che le uscite dipen-dono unicamente dagli ingressi e non sono influenzate dalla storia degli ingressiprecedenti; in altri termini, una macchina combinatoria è senza memoria.

Esempio 10. Consideriamo una delle più semplici macchine combinatorie: unamacchina in grado di addizionare due numeri in ingresso e dare in uscita laloro somma, come descritto nella figura 3.2.

�ba

a � b

Figura 3.2: Macchina addizionatrice a 2 ingressi.

Costruiamo ora una macchina addizionatrice a 3 ingressi, avente la specificadescritta dalla figura 3.3.

�3cb

a

a � b � c

Figura 3.3: Specifica funzionale di una macchina addizionatrice a 3 ingressi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 43: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.1. MACCHINE 33

L’idea di costruire un’altra macchina, con una struttura interna specificacorrispondente alla funzionalità che deve espletare, risulta poco produttiva.La strategia migliore consiste nel costruire piccole macchine specializzate (adesempio per addizionare 2 numeri) e di comporle per costruire macchine piùcomplesse. La costruzione della macchina addizionatrice a 3 ingressi può av-valersi della precedente macchina a 2 ingressi. Una possibile implementazioneè riportata nella figura 3.4.

� �

�3

cb

aa � b � c

Figura 3.4: Implementazione di una macchina addizionatrice a 3 ingressi.

Osservazione. La strategia costruttiva descritta nel precedente esempioè tipica dell’informatica (sia per l’hardware che per il software): si costrui-scono piccole macchine o funzioni software elementari componendo le quali sirealizzano macchine o programmi complessi.

3.1.2 Macchine sequenziali

Nella sua essenza, una macchina sequenziale è un sistema con stato descri-vibile mediante lo schema riportato nella figura 3.5.

stato

sequenzialemacchina

- -ingressi chemodificano lo

stato della macchina

risultati edinformazioni sullo

stato della macchina

Figura 3.5: Schema di una macchina sequenziale.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 44: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

34 CAPITOLO 3. MACCHINE

Esempio 11. Un interessante e noto esempio di macchina sequenziale è costi-tuito dall’automa tartaruga, caratteristico della grafica della tartaruga. Latartaruga è un automa che si muove su un piano, lasciando una linea do-ve passa; ha attaccata una penna che può essere alzata ed abbassata; hauna direzione di avanzamento e può essere manovrato mediante degli appositicomandi, alcuni dei quali sono elencati a seguire:

forward(n) avanza di n passileft(a) gira a sinistra di un angolo aright(a) gira a destra di un angolo apenup alza la penna dal fogliopendown abbassa la penna sul foglio

Il comando forward(n) ha l’effetto di tracciare un segmento di lunghezzan a partire dalla posizione corrente e lungo la direzione di avanzamento dellatartaruga. L’angolo a di rotazione nei comandi left(a) e right(a) viene espressoin gradi sessagesimali. Usando questo automa è possibile disegnare figureanche molto complesse. Limitandosi ad utilizzare i pochi comandi elencatisopra, mediante l’algoritmo 5 si può disegnare la seguente figura compostada 10 triangoli equilateri di lato 100, incentrati in uno stesso punto, ciascunoruotato di 36 gradi rispetto al successivo.

Algoritmo 5 - Disegno di una stella di triangoli equilateri1: repeat 102: repeat 33: forward(100)4: left(120)5: end repeat6: left(36)7: end repeat

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 45: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.2. MACCHINE PROGRAMMABILI 35

3.2 Macchine programmabiliConsideriamo una macchina M del tipo di quelle esaminate nei paragrafi pre-cedenti, che risolve dei problemi. Se M fosse in grado di risolvere tutti iproblemi (risolvibili) risulterebbe troppo complicata. Se risolvesse solo i pro-blemi di una classe ben determinata, per risolvere tante classi di problemiservirebbero troppe macchine (una per ciascuna classe di problemi). La stra-tegia vincente consiste nell’avere un’unica macchina universale MU che, divolta in volta, viene istruita a risolvere una ben specifica classe di problemi.Per far sì che la macchina universale si adegui alla soluzione di diverse classidi problemi, anziché dotarla di un meccanismo intrinseco che ne governi il suofunzionamento, viene fornita alla macchina, dall’esterno, una sequenza A diistruzioni, detta solitamente programma, che risolve una classe C di problemi.Un programma può essere visto come una scheda intercambiabile da inserire inuna macchina universale in modo da renderla capace di risolvere una specificaclasse di problemi. Tali macchine vengono dette macchine programmabilie costituiscono una naturale evoluzione delle macchine sequenziali con stato:al momento dell’attivazione iniziale le macchine programmabili vengono do-tate di uno specifico programma che ne definisce lo stato iniziale ed inoltredetermina le successive fasi dell’elaborazione.

La struttura di una macchina programmabile che risolve una classe diproblemi alla quale appartiene l’istanza di problema P > C può essere descrittamediante lo schema riportato nella figura 3.6.

macchina MU

macchina MA

programma A risolventela classe C di problemi

- -

?

dati delproblema P

risultati delproblema P

Figura 3.6: Schema di una macchina programmabile.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 46: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

36 CAPITOLO 3. MACCHINE

Nella figura 3.6 il blocco tratteggiato costituito dal programma A unita-mente alla macchina universale MU può essere pensato come una macchinaMA (a logica cablata) univocamente individuata dal programma A.

Per le macchine programmabili si presenta l’esigenza di avere un linguaggiomediante il quale descrivere alla macchinaMU il programma A. Ovviamente,in questo caso il programma A deve essere descritto nel linguaggio L compresodalla macchina MU .

3.3 Macchine virtualiCon riferimento ad una macchina programmabile, se il programma A vieneconsiderato come facente parte della macchina che lo esegue, la macchinasi configura come una macchina virtuale in grado di risolvere i problemidella classe della quale il programma A costituisce una soluzione. È questala situazione in cui si trova un utente di un dato programma applicativo.Una macchina virtuale è costituita da un insieme di risorse hardware cherappresentano la macchina fisica e da un programma o insieme di programmiche costituiscono il software mediante il quale si riesce a far eseguire allamacchina le azioni per raggiungere i risultati desiderati. Ad un utente ladistinzione fra la macchina fisica ed i programmi che la controllano risulta deltutto trasparente: le risorse hardware (macchina fisica) e software (programmi)si configurano come un esecutore virtuale che agisce in base a quanto definitodal programma che si sta utilizzando. Il punto di vista più interessante epositivo di questa impostazione sta nel fatto che un utente di una macchinavirtuale non si deve preoccupare (e dal punto di vista logico non dovrebbeneanche pensare) di come è fatta la macchina virtuale che utilizza, ma devesolamente sapere cosa fa. Naturalmente, la macchina virtuale vista dall’utentepuò essere composta da più strati. La suddivisione in strati risulta comunquetrasparente all’utente, il quale vede un’unica macchina virtuale.

L’idea di macchina virtuale ha trovato di recente importanti realizzazioninelle macchine virtuali Java, Python ed altre, sulle quali si basano gli omologhilinguaggi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 47: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.4. LE MACCHINE DI TURING 37

3.4 Le macchine di TuringGià agli inizi del ventesimo secolo si notò che la definizione informale di algorit-mo risultava inadeguata quando si dovevano affrontare delle questioni delicaterelative alla calcolabilità delle funzioni, alla logica matematica, alla potenzialerisolubilità di alcuni problemi. Si avvertì allora l’esigenza di disporre di rigo-rosi modelli di calcolo che eliminassero qualsiasi forma di ambiguità. Uno deipiù noti e fortunati modelli di calcolo fu introdotto dal matematico e logicoinglese Alan Turing nel 1936, ancora prima che i calcolatori elettronici fosseropensati e realizzati. In onore del suo ideatore, questo modello di calcolo èdenominato macchina di Turing (in seguito MdT ). Dal punto di vista dellesue potenzialità la macchina di Turing risulta essere la macchina più semplicepossibile in grado di fare qualcosa che può fare qualsiasi altra macchina.

Il termine macchina attribuito alle MdT è derivato dal fatto che questomodello di calcolo si presta in modo naturale ad essere pensato e realizzatocome un meccanismo fisico di calcolo. Una MdT, descritta nella figura 3.7,è costituita da un’unità di controllo dotata di una memoria interna che puòassumere uno stato fra un insieme finito e prefissato di stati, da un nastro sud-diviso in celle ciascuna delle quali può contenere un carattere appartenente adun alfabeto finito di simboli, da una testina di lettura/scrittura che permettedi leggere e scrivere sul nastro un carattere alla volta. Il nastro é illimitatoin entrambe le direzioni, nel senso che, all’occorrenza, viene automaticamenteallungato con delle celle vuote. Poiché in ogni istante solo una porzione delnastro è utilizzata, si assume la convenzione che la restante parte sia riempitacon il carattere spazio, indicato con il simbolo j oppure _. Si assume inoltrel’ipotesi che tale carattere faccia sempre parte dell’alfabeto della MdT, anchese non viene esplicitamente indicato.

nastro* * *

testina di lettura/scrittura6

stato

unità di controllo

Figura 3.7: Schema di una macchina di Turing.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 48: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

38 CAPITOLO 3. MACCHINE

Ogni azione che viene intrapresa da una MdT risulta deterministicamentedefinita dalle seguenti informazioni:

• stato corrente dell’unità di controllo

• simbolo corrente sul nastro

Un’azione di una MdT risulta composta dalle seguenti azioni parziali:

• cambiare lo stato dell’unità di controllo

• scrivere un simbolo alla posizione attuale sul nastro

• spostarsi di una posizione a destra o a sinistra (o rimanere ferma)

Si assume la convenzione che quando in una situazione non esista alcunaindicazione che precisi come proseguire, la MdT si fermi. Viene impostainoltre la condizione che le MdT siano deterministiche, ossia che in una stessacondizione di stato interno e di simbolo osservato procedano in modo univoco.Nel seguito saranno tacitamente adottate queste convenzioni.

3.5 Programmi per le macchine di TuringEsistono diversi formalismi per descrivere il funzionamento di una MdT. Unodei più semplici consiste nel precisare un’azione mediante una quintupla; pre-cisamente: una quintupla �p, x, q, y,m�va interpretata come descritto nell’algoritmo 6.

Algoritmo 6 - Interpretazione di una quintupla �p, x, q, y,m� di una MdT1: if la MdT è nello stato p e legge il carattere x then2: passa nello stato q3: scrive sul nastro il carattere y4: esegue il movimento m5: end if

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 49: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.5. PROGRAMMI PER LE MACCHINE DI TURING 39

Il movimento m può essere descritto mediante uno dei seguenti tre simboli:

< : spostamento della testina di una posizione a sinistra

> : spostamento della testina di una posizione a destra

- : nessuno spostamento della testina

In base a queste premesse, un programma per una MdT risulta costituito da uninsieme di quintuple. Per garantire la condizione di determinismo si impone lacondizione che quintuple distinte non coincidano sulle prime due componenti.

Con un altro formalismo, una quintupla �p, x, q, y,m� può essere descrittain una tabella a doppia entrata, detta matrice funzionale, assumendo lo statoiniziale p ed il simbolo attuale x come indici di riga e di colonna sulla tabellaed inserendo la porzione di quintupla �q, y,m� all’interno della tabella, incorrispondenza dei due indici p e x.

Per alcune argomentazioni risulta comodo rappresentare un programmaper una MdT sotto forma di automa descritto mediante un grafo di tran-sizione di stato; usando questa notazione, una quintupla �p, x, q, y,m� vienerappresentata come illustrato nella figura 3.8. Lo stato iniziale viene denotatomediante una freccia entrante e gli stati finali mediante una circonferenza adoppia linea.

����p ��

��q-

x, y,m

Figura 3.8: Grafo di transizione di stato che descrive la quintupla �p, x, q, y,m�.Osservazione. L’insieme di quintuple che descrive una MdT deve essere

visto in modo dichiarativo e non in modo imperativo, nel senso che si tratta diun insieme di indicazioni di comportamento e non di una sequenza di istruzionida eseguire.Esempio 12. A seguire è descritta, mediante un insieme di quintuple (fig. 3.9),mediante una matrice funzionale (fig. 3.10) e mediante un grafo di transizionedegli stati (fig. 3.11), una MdT che, partendo dallo stato iniziale 0 e posizionatasul primo carattere a sinistra di una sequenza di a e b, trasforma le a in b eviceversa e, alla fine, si riposiziona sul primo carattere a sinistra. Con _ sidenota il carattere spazio.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 50: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

40 CAPITOLO 3. MACCHINE

0,a,0,b,> 1,a,1,a,<0,b,0,a,> 1,b,1,b,<0,_,1,_,< 1,_,f,_,>

Figura 3.9: Programma di una MdT espresso mediante un insieme diquintuple.

a b _0 0 b > 0 a > 1 _ <1 1 a < 1 b < f _ >

Figura 3.10: Programma di una MdT espresso mediante una matricefunzionale.

����0

CCC

����

��

CCC

����

������1

CCC

����

��

CCC

����

����������f- -_ _ < -_ _ >

b a >

a b >

b b <

a a <

Figura 3.11: Programma di una MdT espresso mediante un grafo di transizionedi stato.

3.6 Risoluzione di problemi con le MdTNonostante una MdT non comprenda il significato di quanto c’è scritto sulnastro iniziale e di quanto viene scritto sul nastro durante i passi della compu-tazione, codificando opportunamente i dati sul nastro e decodificando oppor-tunamente i risultati lasciati sul nastro alla fine della computazione, le MdTsi prestano a risolvere tutte le forme di problemi finora visti (computazionali,decisionali, trasformazionali). La possibilità di scrivere sul nastro rende leMdT estremamente potenti dal punto di vista computazionale in quanto ilnastro può essere utilizzato come una memoria sulla quale registrare dati erisultati intermedi prodotti nel corso dell’elaborazione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 51: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.6. RISOLUZIONE DI PROBLEMI CON LE MDT 41

Altre informazioni ricavabili dalla computazione di una MdT sono rap-presentate dallo stato di arresto finale e dalla posizione finale sul nastro; inquesto modo una MdT, anche senza modificare il nastro, è in grado di risolve-re dei problemi di tipo decisionale, ad esempio decidere se la stringa presenteinizialmente sul nastro soddisfa a dei prefissati requisiti oppure ricercare unospecifico carattere presente sul nastro.

Lo snodo logico e pratico riguardante l’utilizzo delle MdT risiede nel se-guente quesito: Come fa una MdT a risolvere un dato problema? Il mecca-nismo dell’applicabilità di una MdT alla risoluzione di un dato problema èquello generale che sottostà all’utilizzo di un generico esecutore: c’è l’esigenzadi passare dallo spazio delle soluzioni, nel quale viene ricercata e sviluppata lasoluzione del problema da parte del solutore, allo spazio delle computazioni,cioè all’ambiente nel quale opera l’esecutore; per il caso particolare in cui l’e-secutore sia costituito da una MdT il passaggio dallo spazio delle soluzioni allospazio delle computazioni può essere descritto mediante lo schema riportatonella figura 3.12. Rimane il dubbio se ogni algoritmo descritto in una qualsiasinotazione algoritmica sia traducibile in quintuple per una MdT: la risposta,affermativa, è riportata nell’osservazione che segue.

spazio dellecomputazioni

spazio dellesoluzioni

algoritmodati risultati

dei daticodifica

di quintuplein un insiemedell’algoritmotraduzione

dei risultatidecodifica

nastro coni dati

nastro coni risultati

MdT- -

- -

?

?

6

Figura 3.12: Schema del processo di risoluzione di un problema mediante unamacchina di Turing.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 52: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

42 CAPITOLO 3. MACCHINE

Osservazione. Dal punto di vista delle azioni svolte, le MdT sono degli ese-cutori estremamente semplici e rudimentali. La loro importanza non è dovutaal fatto che rappresentino dei modelli di calcolatori reali, ma alla loro estremasemplicità di descrizione e minimalità architetturale che ben si presta a mol-teplici utilizzi nell’analisi di diverse questioni relative alla computabilità e perindagare sulla risolvibilità teorica dei problemi. D’altra parte, si ritiene chetale semplicità non costituisca una limitazione alla risolvibilità dei problemi,in quanto, da varie argomentazioni, si ritiene che ciò che può essere calcolatoda qualsiasi calcolatore esistente o immaginabile, possa essere calcolato ancheda una MdT; viceversa, per ogni problema risolvibile, esiste una MdT che lorisolve (tesi di Church-Turing).

3.7 Esempi di macchine di TuringNegli esempi che seguono viene utilizzato il formalismo delle quintuple; ogniriga contiene una quintupla; le righe che iniziano con un carattere # vengonointese come commenti e non hanno alcuna influenza sulla modalità di fun-zionamento della MdT. Con _ viene indicato il carattere spazio. Come sisupporrà sempre nel seguito, la MdT inizia la computazione nello stato 0 e sitrova posizionata sul primo carattere non-spazio a sinistra.Esempio 13. In questo esempio viene calcolato il successivo di un numeroespresso in notazione unaria, usando il carattere *: il numero zero viene rap-presentato con *, il numero uno con **, il numero due con *** e cosí via. Ilnumero di cui si vuole calcolare il successivo si trova inizialmente codificato sulnastro; alla fine della computazione sul nastro si troverà il risultato (sempreespresso in notazione unaria).

0,*,0,*,>0,_,H,*,-

Osservazione. Bisogna notare la differenza fra il livello sintattico e livellosemantico in quanto la MdT che incrementa un numero espresso in nota-zione binaria non conosce i concetti di numero, base di rappresentazione diun numero, operazione di incremento, ...); la MdT opera al livello dei segni,indipendentemente dal significato che si voglia attribuire loro.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 53: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.7. ESEMPI DI MACCHINE DI TURING 43

Esempio 14. In questo altro esempio viene calcolato il successivo di un numeroespresso in notazione binaria.

# posizionamento sul carattere piu’ a destra0,0,0,0,>0,1,0,1,>0,_,1,_,<

# computazione del successivo1,0,H,1,-1,1,1,0,<1,_,H,1,-

Esempio 15. A seguire è presentato un programma per una MdT che cal-colare, mediante l’algoritmo di Euclide, il massimo comune divisore dei duenumeri naturali presenti sul nastro, espressi in notazione unaria. Si lascia peresercizio la comprensione di come queste quintuple costituiscano la codificadell’algoritmo di Euclide.

0,_,0,_,> 3,_,4,_,> 6,_,6,_,< 9,_,2,_,>0,1,1,1,< 3,1,3,1,> 6,1,1,1,< 9,1,1,1,<1,_,2,1,> 4,_,4,_,> 7,_,7,_,< A,1,A,1,<1,1,1,1,< 4,1,5,_,> 7,1,8,1,< A,_,H,_,>2,_,A,_,> 5,_,7,_,< 8,_,9,_,<2,1,3,_,> 5,1,6,1,< 8,1,8,1,<

Osservazione. Dal confronto fra l’esempio 13 e l’esempio 14 si nota cheutilizzando un maggior numero di simboli per codificare i dati (per risolvereuno stesso problema) si ha un aumento del numero di quintuple necessarioper descrivere la soluzione. Seguendo l’obiettivo di massima semplicità sitende ad usare un numero molto ridotto di simboli del nastro. In tale modola descrizione di una MdT risulta semplificata. Questa semplicità va adappesantire l’esecuzione, ma questo fatto risulta un problema marginale nellequestioni che coinvolgono le MdT.

Osservazione. Come si vede negli esempi presentati sopra, anche per lasoluzione di semplici problemi (calcolo del successore di un numero naturale,calcolo del massimo comune divisore fra due numeri naturali), le MdT richiedo-no che venga precisato un consistente numero di quintuple; questa situazioneera prevedibile in base al principio di complessità della soluzione. Ciò puòrisultare scoraggiante, specialmente quando si tratta di risolvere un problemadi una certa complessità. Ma le MdT non vengono utilizzate per risolvere

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 54: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

44 CAPITOLO 3. MACCHINE

in pratica problemi significativi e complessi, quanto piuttosto come strumentoteorico per indagare e decidere sulla potenziale risolvibilità di alcuni problemi.

3.8 Algoritmi per le macchine di Turing

Come si nota nell’esempio 15, scrivere un programma per una MdT può ri-sultare impegnativo per la distanza esistente fra il linguaggio delle quintuplecompreso dalla macchina e l’idea su cui si basa la soluzione del problema. Peragevolare la scrittura del programma conviene scrivere un algoritmo, comeevidenzia l’esempio che segue.Esempio 16. Vogliamo stabilire se una sequenza di parentesi tonde è bilanciatasecondo le usuali regole di costruzione delle espressioni.

L’algoritmo risolutivo si basa sulla seguente idea: le parentesi vengonoscandite da sinistra verso destra; nella scansione il numero delle parentesiaperte incontrate deve essere non inferiore al numero di parentesi chiuse; piùsemplicemente è sufficiente controllare, mediante un contatore, che il numerodi parentesi aperte in eccesso rispetto a quelle chiuse sia maggiore o uguale a0. Il procedimento è descritto dall’algoritmo 7.

Algoritmo 7 - Controllo se una sequenza di parentesi è bilanciata.1: imposta il contatore delle parentesi a 02: posizionati sul primo carattere non spazio a sinistra3: scandisci i caratteri del nastro da sinistra a destra4: for ciascun carattere c del nastro do5: if c = ( then6: incrementa il contatore di un’unità7: else8: decrementa il contatore di un’unità9: end if

10: end for11: if si è arrivati sul carattere spazio e lo stato è 0 then12: le parentesi sono corrette13: else14: le parentesi sono errate15: end if

L’algoritmo 7 è impostato secondo una logica imperativa, ma può esse-re immediatamente tradotto in modalità dichiarativa mediante un insiemedi quintuple. Per semplificare la soluzione del problema supponiamo che il

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 55: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.9. TRASFORMAZIONI DI STRINGHE 45

massimo livello di annidamento delle parentesi sia pari a 3; questa ipotesisemplificativa permette di gestire il contatore delle parentesi mediante deglistati: vengono utilizzati gli stati da 0 (iniziale) a 3 (pari al massimo livello diannidamento concesso). Il risultato viene fornito mediante lo stato finale diarresto costituito da una stringa che descrive l’esito della computazione. Que-sta stringa descrive anche le situazione di errore che si annidano nelle linee 6,8 e 14 dell’algoritmo 7.

# Test se una sequenza di parentesi tonde e’ bilanciata0,(,1,(,>0,),Errore: troppe parentesi chiuse,),-0,_,Ok: parentesi corrette,_,-

1,(,2,(,>1,),0,),>1,_,Errore: mancano parentesi,_,-

2,(,3,(,>2,),1,),>2,_,Errore: mancano parentesi,_,-

3,(,Errore: troppe parentesi annidate,(,-3,),2,),>3,_,Errore: mancano parentesi,_,-

3.9 Trasformazioni di stringhe

Nella sua forma più generale, com’è stata descritta nei paragrafi precedenti,una MdT T può essere pensata come un trasformatore di stringhe: la stringas presente come dato scritto sul nastro all’inizio della computazione vienetrasformata in un’altra stringa s� � T �s� presente sul nastro alla fine dellacomputazione (nel caso la MdT si fermi), secondo lo schema di trasformazioneillustrato nella figura 3.13.

Ts s�- -

Figura 3.13: Processo di trasformazione di una stringa s in una stringa s�

mediante una MdT T .

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 56: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

46 CAPITOLO 3. MACCHINE

Esistono molti ed interessanti problemi che possono essere inquadrati erisolti mediante un processo di trasformazione di stringhe. Ad esempio, rove-sciare una stringa. Questa accezione di MdT come trasformatore di stringhenon è comunque limitante in quanto qualsiasi dato di altra natura (numero,sequenza di numeri, espressione simbolica, ...) può essere trasformato in strin-ga e successivamente la stringa lasciata sul nastro alla fine della computazionepuò essere interpretata come numero o altra tipologia di valore.

Con queste premesse una MdT può calcolare funzioni della forma Nk� N

partendo con il nastro iniziale sul quale è impressa la codifica di k numerinaturali spaziati, ad esempio, mediante un carattere spazio.

Il processo di trasformazione di stringhe mediante le MdT può esseredescritto in modo funzionale, assimilando la MdT T ad una funzione parziale:

s ( s�

Questa modalità di interpretazione suggerisce che più MdT T1, T2, . . . , Tn (pos-sibilmente diverse) possano essere fatte agire in sequenza, ognuna agente sulnastro lasciato scritto dalla MdT precedente; il risultato finale, presente sulnastro alla fine dell’elaborazione della MdT Tn, sarà uguale a

Tn�Tn�1�. . . T2�T1�s����ottenuto dalla catena di trasformazioni s0 � s1 � � � sn, indicando con s0la stringa presente sul nastro all’inizio della computazione e con si la stringalasciata scritta sul nastro dalla MdT Ti. Per rendere univoca l’attivazione insequenza di più MdT, si assume l’ipotesi che ogni MdT inizi la propria fasedi elaborazione partendo dal primo carattere non-spazio a sinistra. L’ideadella concatenazione di MdT viene utilizzata anche nei moderni linguaggi diprogrammazione e trova riscontro nello strumento dei sottoprogrammi.

3.10 La macchina di Turing universale

Da quanto è stato esposto nei precedenti paragrafi, una MdT è caratterizzatada uno specifico insieme di quintuple e quindi è in grado di risolvere una spe-cifica classe di problemi. Una generalizzazione di questa situazione consistenell’avere un’unica MdT programmabile, in grado di simulare il comportamen-to di ogni qualsiasi altra MdT, leggendo dal nastro, come input, le quintuple,consultando il nastro durante il processo di computazione per scegliere la quin-tupla da eseguire man mano che procede il processo di computazione. TaleMdT viene detta macchina di Turing universale. Al di là della complessità

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 57: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.11. COMPUTABILITÀ 47

di realizzazione pratica, una tale MdT è facilmente immaginabile; tale ideadi generalizzazione ha avuto importanti ricadute pratiche ed ha tracciato lalinea dello sviluppo dei calcolatori attuali secondo l’architettura di von Neu-mann, caratterizzata dall’avere in memoria sia il programma che i dati chevengono elaborati, come avviene nella la stragrande maggioranza degli attualicalcolatori.

3.11 Computabilità

Il concetto di computabilità, che sarà appena sfiorato nelle poche pagine diquesto paragrafo, è un argomento che coinvolge varie discipline: informatica,tecnologia, matematica, filosofia, epistemologia, ed altre ancora. L’argomen-to si presta, quindi, ad essere indagato e trattato, dall’interno di ciascunadisciplina, in modi diversi e con diversi accenti. La teoria della computabilitàpermette di tracciare una linea di demarcazione fra ciò che è computabile e ciòche non lo è, ossia fra i problemi che (almeno in linea teorica) sono risolvibili eproblemi che non lo sono. Tutto il paragrafo è impostato sulla presentazionedi risultati in negativo che segnano una sorta di ideale confine invalicabile daimetodi e dagli strumenti della scienza.

3.11.1 La tesi di Church-Turing

Esistono moltissimi problemi per i quali è stata fornita una rigorosa dimostra-zione del fatto che essi non sono risolvibili. Tale limitazione non è dovutaall’incapacità del solutore nel formulare un adeguato algoritmo, ma alla na-tura intrinseca del problema ed ai limiti della logica, della matematica e dellinguaggio. Nella dimostrazione di non risolvibilità di questi problemi giocaun ruolo fondamentale la seguente ipotesi, formulata da Church e Turing nel1937, che, da varie argomentazioni, è plausibile ritenere che sia vera, cosicchési è meritata l’appellativo di tesi.

TEOREMA 1 (Tesi di Church-Turing). Tutti i meccanismi di calcolo (MdT,personal computer, mainframe, calcolatori paralleli, ...) finora realizzati (datodi fatto dimostrato) e realizzabili in futuro (ipotesi plausibile) sono equivalenti,cioè possono risolvere gli stessi problemi.

Dalla tesi di Church-Turing discende il seguente corollario.

TEOREMA 2 (Corollario della tesi di Church-Turing). Ogni problema èrisolvibile se e solo se esiste una MdT che lo risolve.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 58: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

48 CAPITOLO 3. MACCHINE

In base a questo risultato si può parlare di problemi risolvibili e probleminon risolvibili senza fare alcun riferimento all’esecutore. Operativamente, sidimostra che un problema è non risolvibile dimostrando che non esiste alcunaMdT (e quindi nessun’altra macchina, per la tesi di Church-Turing) che lorisolve.

3.11.2 Il Problema della fermataUn altro famoso problema, considerato inizialmente da Turing e per il qualelo stesso Turing ha fornito una dimostrazione di non decidibilità, è noto comeProblema della fermata :

Dato un generico programma P (insieme di quintuple di unaMdT, programma scritto in un qualche linguaggio di program-mazione o altro formalismo) ed un insieme di dati di input I,stabilire se il programma P , avendo come input I, si fermerào no.

La non risolvibilità di questo problema è l’oggetto del seguente teorema.TEOREMA 3. Il problema della fermata è indecidibile, ossia non esiste alcunprocedimento in base al quale, dato un programma P ed un insieme di dati diinput I sui quali opera il programma P , si possa decidere se il programma Psi fermerà.

Il problema della fermata acquista particolare rilevanza nell’ambito dellateoria della programmazione in quanto afferma che è impossibile stabilire seun generico programma giungerà o no al termine dell’esecuzione; esistono co-munque dei programmi per i quali si riesce a dimostrare la terminazione o lanon terminazione. La non risolvibilità del problema della fermata acquistaanche una valenza strumentale per la soluzione di altre classi di problemi chesi dimostra essere non risolvibili seguendo una linea di ragionamento come laseguente: si dimostra che tali classi di problemi sono riconducibili al problemadella fermata e pertanto, se ammettessero soluzione, risulterebbe risolvibileanche il problema della fermata. Da questa contraddizione si deduce che que-ste classi di problemi sono non risolvibili. Ad esempio, si dimostra in questomodo che la decisione se due programmi risultino equivalenti è non risolvibile.

Osservazione. Il quadro avvilente, presentato in questo paragrafo, riguar-dante la risolvibilità di importanti classi di problemi, viene in parte riscattatodal fatto che spesso si considerano particolari sottoinsiemi di queste classi diproblemi e, per questi sottoinsiemi, si riesce a trovare un’adeguata soluzionee si è in grado di dimostrare che l’esecuzione giungerà al termine per ognipossibile istanziazione dei dati di input.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 59: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.12. ESERCIZI 49

3.12 Esercizi

1. Determinare le informazioni interne all’automa tartaruga che ne costi-tuiscono lo stato.

2. Definire una classe di problemi corrispondente all’istanza di figura di-segnata nell’esempio 11 mediante l’algoritmo algoritmo 5. Scrivere unalgoritmo per disegnare una generica figura della classe.

3. Spesso si usano con lo stesso significato le seguenti due locuzioni:

(a) La MdT descritta dall’insieme di quintuple X(b) Il programma per una MdT costituito dall’insieme di quintuple X

Dire quale delle due forme sopra è preferibile. Dire perché, comunque,possono essere accettate entrambe le forme.

4. Spiegare perché le MdT costituiscono una conferma del principio dicomplessità della soluzione.

5. Il nastro di una MdT contiene un solo asterisco. Individuare una stra-tegia per portarsi sull’asterisco trovandosi su uno spazio e non sapendoda quale parte rispetto all’asterisco. Scrivere un programma per unaMdT corrispondente alla strategia individuata.

6. Decidere se un nastro è completamente vuoto. Si noti che, in questocaso, la MdT potrebbe non fermarsi.

Nota. Nei seguenti esercizi si richiede di scrivere dei programmi peruna MdT, assumendo l’ipotesi che la macchina parta dallo stato iniziale0 e sia posta sul primo carattere non-spazio a sinistra. Descrivere ilprocedimento dapprima a parole e successivamente codificarlo medianteun formalismo per le MdT.

7. Spostare a destra di una posizione una sequenza di asterischi presentiinizialmente sul nastro.

8. Calcolare in successione tutti i successivi del numero presente inizialmen-te sul nastro, senza fermarsi. Si risolva l’esercizio adottando le seguentinotazioni di codifica dei numeri: unaria, binaria e decimale. Risolvere l’e-sercizio adottando le seguenti notazioni di codifica dei numeri: unaria,binaria e decimale.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 60: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

50 CAPITOLO 3. MACCHINE

9. Realizzare le seguenti funzioni sui numeri naturali, codificati in notazioneunaria, in notazione binaria ed in notazione decimale:

successivo: n( n � 1precedente: n( 0 se n � 0 altrimenti n � 1doppio: n( n � 2metà: n( n~2�logaritmo: n( log2 n�

Discutere in quali casi e come la base di rappresentazione influenzi lafacilità di scrittura di un programma per una MdT.

10. Assumendo come alfabeto del nastro l’insieme A � �0,1� e l’ipotesiche il nastro contenga una sequenza compatta di caratteri, senza spazi,risolvere i seguenti problemi:

(a) Eliminare tutti i caratteri presenti sul nastro.(b) Eliminare tutti gli 0 e compattare gli 1 verso sinistra.(c) Spostare alla fine il carattere iniziale.(d) Spostare a destra di una posizione i caratteri presenti sul nastro.(e) Decidere se una stringa rappresenta un numero pari (in notazione

binaria).(f) Decidere se una stringa è formata da un numero pari di 0.(g) Decidere se una stringa è formata da simboli alternati; ad esempio:

0, 10, 01010.(h) Decidere se una stringa è composta da un uguale numero di 0 ed 1.(i) Eseguire l’addizione fra due numeri espressi in notazione binaria;

ad esempio:

nastro prima della computazione: 101+1100nastro alla fine della computazione: 10001

11. Decidere se un numero naturale è pari. Risolvere l’esercizio adottandole seguenti notazioni di codifica dei numeri: unaria, binaria e decimale.

12. Convertire un numero dalla notazione binaria a quella decimale.

13. Convertire un numero dalla notazione decimale a quella binaria.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 61: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

3.12. ESERCIZI 51

14. Decidere se un numero naturale è pari o dispari. La MdT deve lasciaresul nastro la stringa com’era all’inizio della computazione fermandosisullo stato Y se la stringa è composta da un numero pari di asterischi,nello stato N altrimenti. Risolvere l’esercizio adottando le seguentinotazioni di codifica dei numeri: unaria, binaria e decimale. Discuterequale notazione risulta più comoda per la scrittura del programma.

15. Decidere se una stringa di + e - è palindroma, ossia se si legge indifferen-temente da sinistra a destra e da destra a sinistra. La MdT deve lasciaresul nastro la stringa com’era all’inizio della computazione; deve fermarsisullo stato Y se la stringa è palindroma, nello stato N altrimenti.

16. Il nastro di una MdT contiene una sequenza contigua composta da + e -.Decidere se la sequenza è composta da almeno due caratteri consecutiviuguali.

17. Decidere se una data stringa è formata da caratteri a e b alternati. Adesempio, devono essere riconosciute le seguenti stringhe: a, ba, ababa,babababa.

18. Decidere se una data stringa è formata da una successione di a seguiteda una successione di b, in uguale numero. Ad esempio, devono esserericonosciute le seguenti stringhe: ab, aabb, aaabbb.

19. Usando 3 stati (oltre allo stato finale) ed il solo simbolo *, descrivereuna MdT che, partendo da un nastro vuoto, scriva il maggior numeropossibile di asterischi e poi si fermi. Una MdT come quella appenadescritta viene detta castoro a 3 stati. Un castoro massimale che generail maggior numero di asterischi viene detto alacre castoro.

20. Date le seguenti tre MdT:

M1 che trasforma un numero da notazione unaria a notazione decimaleM2 che trasforma un numero da notazione decimale a notazione unariaM3 che calcola il massimo comune divisore fra due numeri naturali

espressi in notazione unaria

comporle opportunamente in modo da ottenere una MdTM che calcolail massimo comune divisore fra due numeri naturali espressi in notazionedecimale.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 62: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

52 CAPITOLO 3. MACCHINE

21. Approfondire e discutere la seguente architettura (di von Neuman) dimacchina di Turing (macchina di Turing Universale):La MdT opera secondo un prefissato programma (non modificabile); laparticolarizzazione del procedimento (per adattarsi alla soluzione di di-verse classi di problemi) avviene precisando (come dato di input) sulnastro sia l’insieme delle quintuple (che permettono di risolvere i proble-mi di una classe di problemi) che (come succede per le MdT viste finora)i dati di input per risolvere una particolare istanza di problema (dellaclasse considerata).

22. Oltre alle macchine di Turing sono stati ideati altri meccanismi di cal-colo. La macchina UMR (ideata nel 1963 da Shepherdson e Sturgis esuccessivamente modificata da Cutland nel 1980) è composta da un nu-mero illimitato di registri, indicati con R1,R2, . . . . Ogni registro, in undato istante, contiene un numero naturale. Il contenuto dei vari registripuò essere modificato mediante le seguenti istruzioni:

• Istruzione di azzeramento Z(n) : viene posto uguale a zero il con-tenuto del registro Rn

• Istruzione di successivo S(n) : viene aumentato di uno il contenutodel registro Rn

• Istruzione di trasferimento T(m,n) : viene sostituito il valore delregistro Rm con il valore del registro Rn

• Istruzione di salto J(m,n,p) : se il contenuto del registro Rm è ugua-le a quello del registro Rn la macchina va alla p-esima istruzionedel programma

Discutere comparativamente i livelli di proceduralità e dichiaratività del-le MdT e delle macchine URM. Scrivere programma per una macchinaURM che esegua il prodotto fra due numeri naturali memorizzati neiregistri R1 ed R2; il risultato deve essere memorizzato nel registro R3.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 63: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 4

Linguaggi

Il linguaggio ci permette di trattare i nostripensieri più o meno come se fossero cosequalsiasi.M. Minsky, La società della mente

Per utilizzare una macchina programmabile è necessario tradurre l’algorit-mo ed i dati dallo spazio dei problemi del solutore allo spazio delle soluzionidove opera la macchina. Per comunicare alla macchina il programma daeseguire ed i dati da elaborare serve un linguaggio.

53

Page 64: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

54 CAPITOLO 4. LINGUAGGI

4.1 Macchine e linguaggiL’ambito in cui vengono sviluppati gli algoritmi è caratterizzato dal seguentecontesto:

Il solutore descrive, mediante un linguaggio,la soluzione del problema ad un esecutoreche è capace di eseguire un insieme di operazioni elementarisu un insieme di oggetti elementari.

In questo contesto è consuetudine usare interscambievolmente le due locuzioniDisponendo della macchina M e Usando il linguaggio L. Questa abitudineè coerentemente fondata sul fatto che un linguaggio definisce univocamentel’esecutore che comprende il dato linguaggio ed opera in base a quanto è de-scrivibile con il linguaggio da esso compreso. Viceversa, se una macchina Mè in grado di eseguire dei programmi, questi dovranno necessariamente esseredescritti nello specifico linguaggio L compreso dalla macchina. Si stabiliscecosì una corrispondenza biunivoca fra macchina e linguaggio. In base a questacorrispondenza, dato un linguaggio L, si parla anche di macchina L e, datauna macchina M, si parla di linguaggio M. Per denotare che una macchinaM è in grado di comprendere il linguaggio L si scriverà ML.

Definire il linguaggio di una macchina (o di un generico esecutore) significastabilire le azioni che essa è in grado di eseguire ed il formato per richiamarle.Esempio 17. Nelle costruzioni geometriche con riga e compasso si hanno adisposizione degli enti primitivi costituiti dai punti del piano e degli strumentidi disegno (matita, riga e compasso). A partire degli elementi primitivi sipossono costruire altre entità geometriche quali segmenti, rette e circonferenze,con delle azioni del tipo:

- tracciare il segmento congiungente due dati punti- tracciare la retta passante per due dati punti- tracciare la circonferenza di dato centro e punto di passaggio

Eseguendo delle operazioni sugli elementi geometrici (primitivi e non) sipossono generare altri elementi con delle operazioni del tipo

- determinare il punto di intersezione fra due rette- determinare i punti di intersezione fra due circonferenze- determinare i punti di intersezione fra una retta ed una circonferenza

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 65: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.1. MACCHINE E LINGUAGGI 55

Per poter descrivere dei procedimenti è necessario formalizzare tutte leprecedenti possibilità mediante un linguaggio. Le tabelle 4.1 e 4.2 defini-scono i costruttori delle entità geometriche e le operazioni su queste entità,corrispondentemente alle azioni sopra elencate.

Costruttore DescrizioneSegment�A,B� segmento di estremi A e BLine�A,B� retta passante per i due punti A e BCircle�C, r� circonferenza di centro C e raggio r

Tabella 4.1: Costruttori per un linguaggio delle costruzioni geometriche.

Operazione Descrizionedist�A,B� distanza fra i due punti A e Bhead�a� primo estremo del segmento atail�a� secondo estremo del segmento acenter�α� centro della circonferenza αradius�α� raggio della circonferenza αinters�r, s� punto di intersezione fra le rette r ed sinters�α,β� punti di intersezione fra le circonferenze α e βx� esp x assume il valore dell’espressione esp

Tabella 4.2: Operazioni per un linguaggio delle costruzioni geometriche.

Con il linguaggio descritto nelle tabelle 4.1 e 4.2 descriviamo ora un algorit-mo per determinare il punto medio di un segmento. Il procedimento si basasull’usuale metodo di costruzione manuale con riga e compasso, è descrittonella figura 8 ed è formalizzato nell’algoritmo 8.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 66: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

56 CAPITOLO 4. LINGUAGGI

A

B

P

Q

M

α

β

r

s

Figura 4.1: Costruzione del punto medio M del segmento di estremi A e B.

Algoritmo 8 - Determinazione del punto medio di un segmentoInput: segmento aOutput: punto medio M del segmento a1: A� head�a�2: B � tail�a�3: α � Circle�A,B�4: β � Circle�B,A�5: �P,Q�� inters�α,β�6: r � Line�A,B�7: s� Line�P,Q�8: M � inters�r, s�9: return M

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 67: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.2. LIVELLO DEI LINGUAGGI 57

4.2 Livello dei linguaggiUna tradizionale classificazione dei linguaggi di programmazione e dei linguag-gi utilizzati per descrivere un algoritmo, distingue i linguaggi di basso livellodai linguaggi di alto. I primi descrivono istruzioni molto elementari, diretta-mente eseguibili dalle macchine. I secondi, invece, sono linguaggi più aderentialle modalità di ragionamento dell’uomo e richiedono delle successive fasi ditraduzione per essere comprensibili dalle macchine.

L’elemento che più caratterizza un linguaggio di programmazione è datodalla forma delle direttive di controllo delle azioni, ossia dalle istruzioni chespecificano all’esecutore la sequenzialità delle azioni da eseguire. La deter-minazione del livello di un linguaggio (basso/alto) avviene proprio sulla basedelle direttive di controllo. I linguaggi che forniscono dei controlli a salti, ossiadella forma "continua l’esecuzione all’istruzione scritta al punto α" vengonogeneralmente detti linguaggi di basso livello; l’aggettivo basso deriva dal fattoche questi linguaggi, rivolti a degli esecutori rappresentati dai calcolatori, sonomolto aderenti alla modalità di esecuzione delle azioni da parte della macchina,e quindi, in definitiva, alla struttura fisica della macchina esecutrice.

Osservazione. Il concetto di livello di un linguaggio è relativo e non hasenso parlare in termini assoluti di alto livello e basso livello quanto piuttostoin termini relativi, quali livello x più alto/basso di ..., livello x adeguatoal problema y. Più che di una classificazione dicotomica, si tratta di unagradazione fine fra due poli estremi: da un lato le modalità operative dellamacchina e dall’altro le modalità di ragionamento dell’uomo. In altri terminiil livello di un linguaggio specifica il grado di distanza del linguaggio dal mododi operare dell’esecutore. Per inciso osserviamo che il livello più basso dilinguaggio è rappresentato dal linguaggio dell’esecutore che si dispone e che illivello più alto nella soluzione di un dato problema P può essere consideratoquello costituito da frasi della forma Risolvi il problema P.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 68: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

58 CAPITOLO 4. LINGUAGGI

4.3 Linguaggi di basso livelloLe notazioni dei linguaggi nelle forme di basso livello riflettono le modalità fisi-che di esecuzione degli attuali elaboratori; queste forme si basano sul seguenteinsieme minimale e completo di controlli:

• goto α (salto incondizionato)

• if C goto α (salto condizionato)

dove α è un indicatore di posizione che individua un’istruzione (esecutiva o dicontrollo) di un algoritmo, e C è una condizione booleana.

In notazione grafica i due controlli di salto goto e if-goto vengono indicaticon le notazioni riportate nella figura 4.2.

����α-

goto α

?

��

@@

@@

��C -����V

F

α

?

if C goto α

Figura 4.2: Controlli di basso livello.

Gli esempi di seguito riportati illustrano i controlli delle azioni nelle formedi basso livello precedentemente descritte. In questi esempi le etichette deisalti incondizionati e condizionati sono sostituite dai numeri identificativi diciascuna linea dell’algoritmo.Esempio 18. Consideriamo il seguente problema:

Determinare la distanza fra due numeri a e b.

Ammettendo che il campo di appartenenza dei numeri coinvolti nell’algoritmosia costituito dai numeri interi e supponendo che l’esecutore sia in grado dieseguire solamente le seguenti azioni elementari:

• applicare le quattro operazioni aritmetiche

• confrontare due numeri

un effettivo procedimento risolutivo può essere formulato come riportato nel-l’algoritmo 9.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 69: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.3. LINGUAGGI DI BASSO LIVELLO 59

Algoritmo 9 - Distanza fra due numeri interiInput: numeri interi a e bOutput: distanza fra a e b1: d� a � b2: if d C 0 goto 43: d� �d4: return d

Vincolando ad usare solamente numeri naturali, il che equivale a supporreche l’esecutore conosca e sappia manipolare solo i numeri naturali, la sequenzadi istruzioni precedenti non rappresenta più un algoritmo corretto in quantorisulta uguale a 0 l’esito dell’operazione a � b, ed in ogni caso non avrebbepiù senso l’operazione unaria �d. Poiché il risultato che si cerca (d) è unnumero naturale, è plausibile pensare che esista un algoritmo risolutivo per ilquale sia sufficiente un ambiente di variabilità degli oggetti non più ampio dellospazio delle soluzioni. Questa supposizione è confermata dall’algoritmo 10 chedetermina la distanza fra due generici numeri naturali a e b, con la condizioneche l’esecutore sia in grado di manipolare soltanto numeri naturali.

Algoritmo 10 - Distanza fra due numeri naturaliInput: numeri naturali a e bOutput: distanza fra a e b1: if a C b goto 42: d� b � a3: goto 54: d� a � b5: return d

La situazione appena presentata richiama, pur nella sua banalità, gli sforzidegli algebristi italiani del Cinquecento che cercavano dei procedimenti risolu-tivi per determinare le radici reali delle equazioni polinomiali di terzo e quartogrado, evitando di passare ed operare nel campo (allora minato, perchè pococonosciuto) dei numeri complessi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 70: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

60 CAPITOLO 4. LINGUAGGI

Esempio 19. L’algoritmo del contadino russo per il calcolo del prodotto fradue numeri naturali m ed n, descritto nella tabella 2.2, può essere espresso, inuna forma di basso livello come descritto nell’algoritmo 11.

Algoritmo 11 - Algoritmo del contadino russoInput: numeri naturali m e nOutput: prodotto fra m ed n1: inizializza p a 02: if m � 0 goto 83: if m è pari goto 54: incrementa p di n5: dimezza m6: raddoppia n7: goto 28: return p

Introducendo il concetto di assegnazione nella forma α � β, che denota"assegna ad α il valore ottenuto da β", l’algoritmo 11 può essere raffinatocome riportato nell’algoritmo 12.

Algoritmo 12 - Algoritmo del contadino russoInput: numeri naturali m e nOutput: prodotto fra m ed n1: p� 02: if m � 0 goto 113: q �m~24: p�m � 25: r �m � p6: if r � 0 goto 87: p� p � n8: m�m~29: n� n � 2

10: goto 211: return p

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 71: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.4. LINGUAGGI DI ALTO LIVELLO 61

4.4 Linguaggi di alto livelloDal precedente esempio 19 si evidenzia che, avendo a disposizione controllidelle azioni descritti mediante dei salti, lo sviluppo di algoritmi si presentaabbastanza difficoltoso in quanto ci obbliga, in veste di solutori, ad uno sfor-zo di traduzione dell’idea originale di soluzione per esprimerla nel linguaggioimposto, il quale risulta alquanto innaturale per l’uomo. La descrizione de-gli algoritmi mediante questi linguaggi è adeguata solo per piccoli algoritmi emal si presta allo sviluppo di algoritmi complessi. Il supporto della metodo-logia top-down (soluzione dei sottoproblemi incrementa, dimezza, raddoppia)ci aiuta solo parzialmente. Finché i problemi sono piccoli tale metodo puòessere applicato con successo, mentre, quando i problemi sono più complessie richiedono, quindi, degli algoritmi più complessi, si sente maggiormente lanecessità di poter usare un linguaggio più evoluto e più aderente al modo dipensare dell’uomo.

Le forme algoritmiche di basso livello, caratterizzate da istruzioni di salto,possono essere espresse, equivalentemente, in forme di alto livello con strutturedi controllo più vicine al nostro modo di pensare. L’algoritmo 13 è la tra-duzione in una forma di alto livello dell’algoritmo 12. Questi due algoritmi,pur espressi con notazioni di diverso livello, descrivono le stesse operazioni.Dal loro confronto si evidenzia che la notazione strutturata di alto livello ri-sulta molto più comprensibile, nella sua logica, rispetto alla corrispondentenotazione a basso livello.

Algoritmo 13 - Algoritmo del contadino russo (notazione di alto livello)Input: numeri naturali m e nOutput: prodotto fra m e n1: inizializza p a 02: while m x 0 do3: if m è dispari then4: incrementa p di n5: end if6: dimezza m7: raddoppia n8: end while9: return p

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 72: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

62 CAPITOLO 4. LINGUAGGI

4.5 Notazioni graficheConsideriamo ora una tipica situazione costituita da una sequenza di espressio-ni, ossia da un insieme di espressioni descritte sequenzialmente. Per descriverei potenziali flussi esecutivi possiamo unire le espressioni con delle linee, comeevidenziato nella figura 4.3.

?αn?

��QQQQ��c1

?

e1

?��QQQQ��c2

?

e2

-

n

n

?

?

-

βne3

γn

δne4?

?

α �

if c1 goto δ

e1

if c2 goto β

e2

goto γ

β �

e3

γ �

goto α

δ �

e4

Figura 4.3: Notazione grafica di un algoritmo e sua corrispondente notazionetestuale.

Dal grafico riportato nella figura 4.3 si può notare che le linee di suppor-to dei potenziali flussi esecutivi sono connesse fra loro mediante le quattrotopologie di nodi descritti nella figura 4.4.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 73: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.5. NOTAZIONI GRAFICHE 63

E nodo esecutivo (comando)

����α nodo collettore (etichetta)

���� nodo deviatore (salto incondizionato)

��QQQQ��C nodo selettore (salto condizionato)

Figura 4.4: Le varie tipologie di nodi dei controlli.

Con riferimento all’algoritmo descritto nella figura 4.3, si può notare chel’indicazione dei punti di salto α e β non risulta più necessaria, essendo diret-tamente derivabile dalla struttura grafica bidimensionale del diagramma. Inforza di questa osservazione semplificativa, il linguaggio a salti, oltre alla no-tazione lineare fin qui adottata, può essere descritto mediante un formalismografico bidimensionale, detto linguaggio dei diagrammi a blocchi o flowcharts, icui elementi di base sono costituiti dai simboli grafici riportati nella figura 4.5.

?

E

?

nodo esecutivo

?

���

HHH

HHH

���

? ?

V FC

nodo selettore

@@@R

���

?

nodo collettore

Figura 4.5: Le diverse tipologie dei nodi dei diagrammi a blocchi.

Il significato dei simboli sopra descritti è il seguente:

• nodo esecutivo : elabora l’espressione E

• nodo selettore : se la condizione C è falsa continua sul ramo V altrimentisul ramo F

• nodo collettore : continua al punto indicato

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 74: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

64 CAPITOLO 4. LINGUAGGI

Le frasi del linguaggio dei diagrammi a blocchi vengono costruite con-nettendo i vari nodi sopra descritti mediante delle linee. Viene adottata laconvenzione che un nodo elaborativo sul quale non confluisca alcun ramo è ilprimo da essere elaborato (punto di entrata) mentre un nodo elaborativo dalquale non si diparta alcun ramo segnala la fine delle elaborazioni (punto diuscita). Per rendere deterministicamente elaborabili le espressioni descritte,si impone che ogni diagramma a blocchi abbia un solo punto d’entrata. Inol-tre, poiché, come si vedrà nel seguito, risulterà necessario concatenare fra lorosequenzialmente più diagrammi a blocchi, si impone la condizione che ognidiagramma a blocchi abbia un solo punto d’uscita. Un diagramma che godedi queste due proprietà dicesi proprio.

La regola che segue permette di identificare univocamente le frasi corret-te del linguaggio dei diagrammi a blocchi (più avanti saranno limitate, con-siderandone solo un sottoinsieme ben formato, costituito dai controlli dellaprogrammazione strutturata). Viene fornita una definizione costruttiva, nondicendo quali sono le frasi corrette ma dicendo come si costruiscono le frasicorrette mediante il formalismo dei diagrammi a blocchi.

REGOLA di costruzione dei diagrammi a blocchi. Le frasi corrette siottengono unendo fra loro, mediante delle linee, dei nodi (elaborativi, selettori,collettori), in modo da ottenere un diagramma proprio (avente un unico puntodi entrata ed un unico punto di uscita) connesso (costituito di un unico pezzo).

Osserviamo che un diagramma a blocchi viene rappresentato mediante ungrafo connesso in cui i nodi elaborativi hanno il significato di espressione (daelaborare), mentre i nodi alternativi hanno il significato di controllo.Esempio 20. L’algoritmo del contadino russo (algoritmo 11) può essere de-scritto mediante il diagramma a blocchi riportato nella figura 4.6.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 75: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.5. NOTAZIONI GRAFICHE 65

risultato: p

raddoppia n

dimezza m

incrementa p di n

m pari?

m � 0?

inizializza p a 0

Dati: m,n

����

HHHH

HHHH

����

����

HHHH

HHH

H

����

?

?

?

?

?

?

?

-

vero

falso

vero

falso

Figura 4.6: Diagramma a blocchi dell’algoritmo del contadino russo.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 76: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

66 CAPITOLO 4. LINGUAGGI

4.6 Notazioni testualiPer facilitare la scrittura ed in linea con lo svilupo storico dei linguaggi di pro-grammazione, gli algoritmi ed i programmi vengono spesso scritti in modalitàtestuale.Esempio 21. La porzione di programma che segue descrive una funzione in lin-guaggio Python che calcola il prodotto di due numeri naturalim ed nmediantel’algoritmo del contadino russo.

def russo(m,n):p = 0while m != 0:

if m%2 == 1:p += n

m //= 2n *= 2

return p

4.7 Notazioni visualiNegli ultimi anni stanno sempre più prendendo piede degli ambienti di pro-grammazione visuale (fra questi, Scratch e Snap!). Questi linguaggi hannoil pregio, specialmente per chi inizia a programmare, di suggerire la scritturadei programmi, favorendo un approccio intuitivo e semplificato alla program-mazione.Esempio 22. La figura che segue descrive un blocco in linguaggio Snap! checalcola il prodotto di due numeri naturali m ed n mediante l’algoritmo delcontadino russo.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 77: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.8. LINGUAGGI E TRADUTTORI 67

4.8 Linguaggi e traduttori

In generale una macchina non comprende direttamente il linguaggio del solu-tore ma fra il solutore e la macchina vengono interposti degli opportuni inter-preti che traducono alla macchina le direttive impartite dal solutore. Questoè proprio quello che avviene in realtà usando i calcolatori. Per una stessamacchina si hanno generalmente a disposizione più interpreti per colloquiarecon la macchina, mediante diversi linguaggi di programmazione. Altrimentisi può pensare che l’interprete faccia parte della macchina la quale può esserepensata come una macchina che comprende il linguaggio del solutore tramitela mediazione dell’interprete. È facilmente riconoscibile che queste diverseimpostazioni sono fra loro equivalenti; pertanto non dovremmo preoccuparcidi quale stiamo adottando.

Per far comprendere i linguaggi alle macchine vengono utilizzati degli ap-positi programmi di traduzione (compilatori, interpreti, macroespansori, ...).La possibilità di traducibilità automatica da forme di alto livello ad equivalentiforme di basso livello, mediante degli schemi di traduzione o mediante apposi-ti programmi di traduzione, consente ad un solutore di problemi di esprimeregli algoritmi in forme adeguate al problema in esame e di disinteressarsi del-la traduzione in forme più elementari effettivamente eseguibili dall’esecutore.Come strategia generale, un solutore di problemi dovrebbe pensare al più altolivello possibile, compatibilmente con il problema in questione, e di tradurresuccessivamente nel linguaggio dell’esecutore (virtuale) che si dispone. Questoapproccio trova concretezza nella metodologia di sviluppo della soluzione diun problema nota come metodologia top-down o metodologia dei raffinamentisuccessivi.

Nei casi pratici l’esecutore è costituito da un elaboratore elettronico che èin grado di eseguire istruzioni in un linguaggio macchina L (ossia il linguaggiodirettamente eseguibile dall’hardware della macchina); poiché tale linguaggiomal si presta (per l’uomo) a descrivere i programmi, risulta più comodo de-scrivere il programma A in un opportuno linguaggio di programmazione L�e si dota l’esecutore di un traduttore TL��L che traduce dal linguaggio L� allinguaggio L (figura 4.7).

Il blocco costituito dalla macchinaML e dal traduttore TL��L (parte costi-tuita dal riquadro più esterno nella figura 4.7) diventa così una macchinaM�

L�

capace di eseguire programmi scritti nel linguaggio L�. In base all’equivalenzafra esecutori e linguaggi, le due locuzioni Scrivere un traduttore del linguaggioL� al linguaggio L e Implementare la macchina virtuale ML� sono equivalenti.

L’idea di dotare una macchina di un traduttore può essere generalizzata;ad esempio, disponendo di un traduttore TL”�L� si può costruire una macchina

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 78: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

68 CAPITOLO 4. LINGUAGGI

macchina ML

traduttore TL��L

programma A scrittonel linguaggio L�

- -

?

dati risultati

Figura 4.7: Schema di una macchina programmabile dotata di un traduttore.

M”L” secondo lo schema illustrato nella figura 4.8.

macchina ML

traduttore TL���L�traduttore TL��L

Figura 4.8: Struttura a strati di una macchina programmabile dotata di piùtraduttori.

Osservazione. Se le fasi di scrittura (utilizzando un linguaggio di pro-grammazione), di traduzione ed uso di un programma vengono assommate eviste globalmente, la situazione che si evidenzia è quella di un utente che usauna macchina virtuale che comprende il dato linguaggio di programmazioneutilizzato. Mediante una tale macchina virtuale, un solutore può descrivereun programma nel linguaggio della macchina virtuale e tale programma puòessere eseguito dalla macchina virtuale. In questo caso il passo di tradu-zione dello specifico linguaggio del solutore al linguaggio macchina può essereignorato dall’utente della macchina virtuale. Ad un opportuno livello di astra-zione, per un utente dell’esecutore virtuale la distinzione fra macchina fisica e

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 79: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

4.8. LINGUAGGI E TRADUTTORI 69

programma traduttore è del tutto trasparente: le risorse hardware (macchinafisica) e software (programmi) si configurano come un esecutore virtuale ca-pace di comprendere il linguaggio ad alto livello e capace di eseguire le azionielementari sugli oggetti elementari predisposti dal particolare ambiente di pro-grammazione in cui ci si pone, ossia dal linguaggio utilizzato. Qui il terminevirtuale è da intendere nel senso che è come se si disponesse di una macchinacapace di capire il linguaggio L ad alto livello e capace di agire nell’ambientefornito dal linguaggio di programmazione. A seconda del linguaggio L utiliz-zato si parla di macchina virtuale L. Al posto del termine macchina virtualesi parla anche di macchina astratta volendo evidenziare il fatto che un utentedella macchina può astrarre dalla particolare implementazione della macchinastessa.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 80: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

70 CAPITOLO 4. LINGUAGGI

4.9 EserciziUsando le forme di controllo di basso livello (salti condizionati ed incondizio-nati), risolvere i seguenti esercizi.

1. Dati due numeri, determinarne il massimo.

2. Dati tre numeri, determinare il massimo. Suggerimento: utilizzare lasoluzione dell’esercizio precedente.

3. Dati tre numeri, determinare la somma dei due numeri più piccoli.Suggerimento: utilizzare la soluzione dell’esercizio precedente.

4. Dati tre numeri, determinare se essi possono costituire le lunghezze deilati di un triangolo. Suggerimento: utilizzare le soluzioni degli eserciziprecedenti.

5. Ordinare due numeri.

6. Ordinare tre numeri.

7. Date le misure dei lati di due rettangoli, stabilire se essi sono simili.

8. Dati quattro numeri, determinare se essi possono costituire i membri diuna proporzione.

9. Date le misure dei lati di due rettangoli, stabilire se uno dei due puòricoprire completamente l’altro.

10. Fra i seguenti problemi uno non è risolvibile con i mezzi finora visti.Individuare qual è. Risolvere gli altri. Acquisire in input ciclicamen-te dei numeri, terminando la lettura quando viene letto il numero 0.Terminata la fase di lettura, dare in output le seguenti quantità:

(a) il massimo(b) il minimo ed il massimo(c) il numero e la somma dei numeri letti(d) la somma dei numeri pari(e) la media dei valori(f) i due valori più grandi(g) il valore più vicino alla media(h) decidere se la sequenza è ordinata decrescentemente

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 81: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 5

Controlli

La vecchietta, sull’autobus: “Ragazzino,sai dirmi quando devo scendere per andarea via Pasadena?”Il ragazzino: “Guarda proprio me, e scendidue fermate prima che scenda io”.D. Knuth,The Art of Computer Programming

L’elaborazione sequenziale delle espressioni è quella più naturale e viene in-trapresa dagli esecutori in assenza di altre direttive esplicite. Questa semplicestruttura sequenziale di elaborazione risulta però inadeguata per la descrizionedegli algoritmi in quanto comporta che l’elaborazione delle espressioni avven-ga solo in modo sequenziale, e che, quindi, ogni espressione specificata in unalgoritmo venga elaborata una sola volta. Per superare questi limiti e rendereil linguaggio per la descrizione degli algoritmi più potente servono dei controlliche consentano di ripetere alcune espressioni e di evitarne altre.

71

Page 82: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

72 CAPITOLO 5. CONTROLLI

5.1 Algoritmi e processiIn prima approssimazione, un algoritmo è la descrizione sulla carta delleespressioni da elaborare, mentre un processo consiste nell’elaborazione nel tem-po delle espressioni. Per comprendere la sostanziale differenza esistente fra ilconcetto di algoritmo e di processo basta riflettere sulla differenza che esistefra i due termini descrizione ed elaborazione: la prima attività si svolge nellospazio, la seconda nel tempo. In altri termini si può dire che un processo èuna particolare sequenza di elaborazione delle espressioni, compatibile con lastruttura dell’algoritmo. In termini figurati si può affermare che l’algoritmodescrive le possibili strade che connettono le espressioni, mentre un processoè il compimento di un particolare percorso lungo le strade tracciate dall’al-goritmo. I due grafici riportati nella figura 5.1 descrivono le linee del flussopotenziale dell’algoritmo e le linee del flusso esecutivo di un processo.

(a) (b)

� ��

� ��

� ��

� ��

� ��

?

?

?

?

?

?

--

� ��

� ��

� ��

� ��

� ��?

Figura 5.1: Comparazione fra algoritmo e processo: (a) linee del flussopotenziale dell’algoritmo; (b) linee del flusso esecutivo del processo.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 83: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.2. CONTROLLI 73

5.2 ControlliLa forma più elementare di algoritmo corrisponde al caso di espressioni de-scritte sequenzialmente (sulla carta) dal solutore ed elaborate sequenzialmente(nel tempo) dall’esecutore. Questa modalità di descrizione ed elaborazio-ne degli algoritmi è troppo povera e non consente la descrizione di algoritmiinteressanti che possano dar vita a processi complessi per i quali non esistauna corrispondenza biunivoca fra la sequenza delle espressioni descritte nel-l’algoritmo e la sequenza di elaborazione del processo. La possibilità di avereflussi esecutivi più articolati che non la semplice elaborazione sequenziale sifonda sull’uso combinato della possibilità di evitare, in base a delle condizio-ni, l’elaborazione di alcune espressioni e sulla possibilità di ripetere più voltel’elaborazione di alcune espressioni. A questo scopo vengono utilizzati deicontrolli, ossia delle particolari direttive che, opportunamente intercalate frale espressioni dell’algoritmo, specificano le possibili linee di percorrenza deiflussi elaborativi definendo molti (anche infiniti) potenziali percorsi; in fasedi elaborazione sarà intrapreso uno di questi percorsi e si darà vita ad unprocesso.

I potenziali flussi esecutivi di un algoritmo possono essere descritti me-diante pochi e ben fatti schemi, descrivibili graficamente come riportato nellafigura 5.2, dove lungo le linee ci possono essere delle espressioni da elaboraree dei controlli.

controllosequenziale

?

controllocondizionale

?

-

s

controllociclico

?

-

s

Figura 5.2: Schemi fondamentali dei controlli.

L’assunzione dell’ipotesi che, in assenza di altre indicazioni, implicitamentele espressioni vengano elaborate sequenzialmente, come sono descritte, com-porta che un salto abbia il significato fortemente diverso a seconda che sitratti di un salto in avanti o di un salto all’indietro. Nel primo caso l’effettoè di evitare delle espressioni mentre il secondo caso permette di ripetere delleespressioni.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 84: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

74 CAPITOLO 5. CONTROLLI

5.3 Limiti dei linguaggi a salti

Il linguaggio di basso livello, con controlli delle azioni mediante dei salti, comedescritto nel capitolo precedente, è molto semplice e molto potente. Qui conil termine semplice si intende che le regole che generano le frasi corrette (ossiala grammatica) sono poche e facilmente applicabili. Con il termine potente siindica il fatto che con tale linguaggio si può descrivere ogni cosa che sia fattibilemediante le potenzialità base dell’esecutore. Tale potenza rappresenta peròpiù un difetto che un pregio del linguaggio, in quanto è possibile costruiredei diagrammi a blocchi della forma riportata nella figura 5.3 per i quali èdifficilmente comprensibile la logica dei potenziali flussi di elaborazione; questoinconveniente emerge con più evidenza quando l’algoritmo è lungo e complesso.

��

@@

@@

��

��

@@

@@

��

��

@@

@@

��

-

?

?

?

?

-

6

?

Figura 5.3: Esempio di diagramma a blocchi non strutturato.

L’aspetto negativo dei diagrammi a blocchi non strutturati consiste nelfatto che essi risultano poco comprensibili e quindi difficilmente adattabili ecorreggibili; in gergo tecnico si afferma che tali programmi sono difficilmentemanutenibili. Per queste forme di programmazione primitiva è stato coniato iltermine dispregiativo di programmazione a spaghetti che ben rende il senso delcaotico sviluppo del flusso dell’elaborazione delle espressioni. Per escluderequesti casi, conviene limitare l’insieme delle frasi costruibili ad un piccolosottoinsieme di frasi ben fatte, che soddisfino a degli schemi più restrittivi.Con queste limitazioni si vedrà che, comunque, non si limiterà le possibilità diesprimere tutto ciò che è realizzabile da un generico esecutore ed esprimibile

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 85: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.4. LA PROGRAMMAZIONE STRUTTURATA 75

altrimenti in termini di un linguaggio di basso livello; è questo il risultatostabilito dal teorema di Böhm-Jacopini.

Una delle fasi più elementari dell’evoluzione dei linguaggi di programma-zione verso forme più evolute è consistita nell’individuazione di alcuni costruttifondamentali per il controllo delle azioni, sui quali si fonda la programmazio-ne strutturata. Questi controlli fondamentali sono disponibili in tutti i piùrecenti linguaggi di programmazione, detti linguaggi di alto livello, in con-trapposizione a quelli di basso livello, proprio per evidenziare la loro strutturapiù evoluta rispetto al modo di agire della macchina e più vicina al modo dipensare dell’uomo.

I linguaggi di programmazione attuali predispongono i controlli tipici dellaprogrammazione strutturata. Qualora fosse necessario o si volesse utilizza-re comunque i controlli di basso livello risulta comodo partire dall’algoritmoespresso in notazione strutturata e poi tradurlo in forme di basso livello. L’im-postazione corretta è dunque quella di esprimere l’algoritmo, in prima istanza,in una forma a noi più congeniale e più aderente al nostro modo di pensare, edi rinviare a fasi successive lo sviluppo dei dettagli e la traduzione verso formecomprensibili all’esecutore. La traduzione in una forma di basso livello risul-ta meccanica e non richiede alcuno sforzo supplementare che non sia quellodi traduzione di una forma sintattica di alto livello in una equivalente formasintattica di basso livello, indipendentemente dal significato delle frasi.

5.4 La programmazione strutturata

Nel 1968, in un battagliero articolo 1 considerato una sorta di manifesto dellaprogrammazione strutturata, Dijkstra, uno dei pionieri della programmazione,denunciava i pericoli a cui può portare l’uso indisciplinato delle istruzioni disalto, che può compromettere la comprensibilità di un programma da partedel suo stesso autore. Sulla spinta di queste critiche e sulla base del risultatopositivo stabilito dal teorema di Böhm-Jacopini, fin dalla fine degli anni ’60si sono sviluppate delle metodologie di programmazione strutturata, aventil’obiettivo di permettere solo un insieme organico di regole di programma-zione basate su dei controlli di alto livello. Al di là di un’astiosa e talvoltasterile polemica sull’uso dei goto, la programmazione strutturata risulta parti-colarmente efficace come strumento di sviluppo degli algoritmi, fondato sullametodologia di scomposizione dei problemi in sottoproblemi.

1E.W.Dijkstra, Go To Statement Considered Harmful, in Communication ACM, Vol.11,No.3, pp.147-148, 1968.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 86: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

76 CAPITOLO 5. CONTROLLI

Per ottenere dei diagrammi più strutturati è necessario limitare le possi-bilità di costruzione degli stessi, ossia limitare le possibilità della Regola dicostruzione dei diagrammi a blocchi. Tali limitazioni definiranno implicita-mente un altro linguaggio. Sarà adottata la seguente

REGOLA di costruzione dei diagrammi a blocchi strutturati.Un diagramma a blocchi è strutturato se è composto da un’espressione

elementare (assioma).Se E , E1, E2 sono diagrammi strutturati e C è una condizione, allora anche

i cstrutti descritti nella figura 5.4 sono diagrammi strutturati.

E2

E1

?

?

?

controllosequenziale

E

��

@@

@@

��C

?

?

?�

controllocondizionale

E

��

@@

@@

��C

?

?

?

-

controllociclico

Figura 5.4: Controlli fondamentali della programmazione strutturata.

In altri termini, un diagramma a blocchi è strutturato se è composto dauna singola istruzione oppure è composto unendo dei blocchi strutturati inuna delle tre forme strutturate descritte nella nella figura 5.4. La regoladi costruzione dei diagrammi a blocchi strutturati può essere espressa equi-valentemente affermando che espandendo dei blocchi strutturati mediante deicontrolli strutturati si ottengono dei diagrammi a blocchi strutturati.

Le tre forme base dei diagrammi a blocchi sopra descritte corrispondonoa delle strutture di alto livello per il controllo delle azioni, caratteristiche delmodo di ragionare degli uomini per l’organizzazione delle azioni. Degli esempicorrispondenti a queste forme sono i seguenti:

• Versa il caffè e poi aggiungi lo zucchero.

• Se il caffè è doppio allora aggiungi un altro cucchiaino di zucchero.

• Finché lo zucchero non è disciolto continua a mescolare.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 87: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.5. CONTROLLI GENERALIZZATI 77

5.5 Controlli generalizzatiI tre controlli fondamentali della programmazione strutturata descritti nel pa-ragrafo precedente vengono spesso usati in combinazione fra loro. Medianteopportune combinazioni degli stessi, dei formati di frase generalizzati, moltousati nella descrizione degli algoritmi. Tali controlli sono riportati nella figu-ra 5.5. Questi controlli sono strutturati in quanto sono (facilmente) esprimibilicome composizione dei controlli fondamentali. In base a questa osservazioneed alla regola di programmazione strutturata, questi controlli possono essereusati come componenti per la costruzione di algoritmi strutturati. Questeforme generalizzate sono così frequentemente utilizzate da essere consideratefondamentali, mentre le forme analoghe definite precedentemente, dalle qualiessi derivano, vengono considerate come dei casi particolari di queste formegeneralizzate.

E1

E2

En

?

?

?�?

?

controllosequenzialemultiplo

E1 E2

��

@@

@@

��C

?

?

?

-

?

controlloalternativo

E

��

@@

@@

��C

?

?

?

-

controllociclico

postcondizionato

Figura 5.5: Controlli generalizzati della programmazione strutturata.

Osservazione. L’enfasi che le moderne metodologie di programmazionepongono sulla programmazione strutturata è dovuta al fatto che la scomposi-zione di un problema mediante la metodologia top-down e lo sviluppo medianteraffinamenti successivi (strutturati) porta automaticamente a dei programmistrutturati. Questa impostazione ha sminuito notevolmente l’importanza deidiagrammi a blocchi, i quali non vengono più usati come metodologia o sempli-cemente come strumento per lo sviluppo degli algoritmi, ma solo per descriverela semantica dei controlli fondamentali. Una diretta conseguenza del fatto chela scomposizione di un problema in modo strutturato porta a forme strutturateè che l’algoritmo risolutivo finale è anch’esso strutturato.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 88: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

78 CAPITOLO 5. CONTROLLI

5.6 Notazioni testualiA seguire sono indicate le notazioni testuali dei controlli della programmazionestrutturata descritti nei paragrafi precedenti.

5.6.1 Controllo sequenziale

Il controllo per elaborare sequenzialmente delle espressioni E1, . . . ,En vieneespresso come descritto nell’algoritmo 14.

Algoritmo 14 - Controllo sequenziale1: espressione E12: . . .3: espressione En

Esempio 23. Disegno di un segmento di lunghezza 10 con centro nella posizionecorrente della tartaruga con mantenimento dello stato della tartaruga:

Algoritmo 15 - Disegno di un segmento alla posizione corrente1: forward(5)2: penup3: left(180)4: forward(10)5: right(180)6: pendown7: forward(5)

5.6.2 Controllo condizionale

Il controllo di elaborazione condizionale, che a parole si esprime nella forma Sela condizione C è vera elabora le espressioni E1 altrimenti elabora le espressioniE2. è descritto nell’algoritmo 16.

Algoritmo 16 - Controllo condizionale1: if condizione C then2: espressioni E13: else4: espressioni E25: end if

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 89: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.6. NOTAZIONI TESTUALI 79

Esempio 24. Esecuzione di un movimento elementare da parte di un robot:

Algoritmo 17 - Movimento elementare di un robot1: if c’è spazio davanti then2: forward(1)3: else4: left(90)5: end if

5.6.3 Controllo ciclico

L’algoritmo 18 riporta la notazione testuale del controllo ciclico Finché lacondizione C è vera continua ad elaborare le espressioni E .

Algoritmo 18 - Controllo ciclico1: while condizione C do2: espressioni E1 . . .En

3: end while

Esempio 25. Raggiungimento dell’obiettivo da parte di un robot:

Algoritmo 19 - Controllo ciclico1: while non hai raggiunto l’obiettivo do2: avanza di poco3: valuta la distanza dall’obiettivo4: aggiusta la direzione di avanzamento5: end while

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 90: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

80 CAPITOLO 5. CONTROLLI

Esempio 26. I controlli descritti sopra compaiono solitamente combinati as-sieme, come mostra l’algoritmo 20.

Algoritmo 20 - Percorso di un robot1: inizializza il robot2: while non hai raggiunto l’obiettivo do3: if c’è spazio davanti then4: memorizza la posizione5: avanza di poco6: memorizza la nuova posizione7: else8: ruota a destra di poco9: end if

10: aggiusta la direzione di avanzamento11: end while

5.7 Altri controlli

Oltre ai controlli (fondamentali e derivati) precedentemente descritti, moltilinguaggi di programmazione prevedono degli ulteriori controlli. Anche sequesti possono essere espressi in termini dei controlli fondamentali, la ricchez-za dei controlli utilizzabili, pur non aumentando la potenza espressiva di unlinguaggio, permette di migliorare la compattezza e leggibilità dei programmi.

Oltre al controllo ciclico while, in molti linguaggi di programmazione vienepredisposto il controllo ciclico repeat che, pur essendo potenzialmente equiva-lente al controllo while, viene solitamente utilizzato, per semplicità, nei casiin cui il numero di iterazioni sia noto a priori; nel caso in cui le espressioniE debbano essere elaborate un prefissato numero k di volte, si può usare laforma di controllo descritta nell’algoritmo 21.

Algoritmo 21 - Controllo ciclico ripetitivo1: repeat k times2: espressioni E3: end repeat

Un’altra forma, più generale, di ciclo predeterminato è il ciclo for cherisulta comodo qualora serva sapere internamente al ciclo il numero dell’ite-razione corrente. In molti linguaggi, il ciclo for viene solitamente espresso

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 91: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.8. IL TEOREMA DI BÖHM-JACOPINI 81

come descritto nell’algoritmo 22, essendo e1 ed e2 due espressioni intere ed iuna variabile che assume consecutivamente i valori interi da e1 a e2.

Algoritmo 22 - Controllo ciclico iterativo1: for i from e1 to e2 do2: espressioni E3: end for

L’algoritmo 22 può essere generalizzato con l’algoritmo 23, dove �e1, . . . , ek�è un generico insieme di espressioni. In questi due algoritmi, generalmente,le espressioni E contengono la variabile i.

Algoritmo 23 - Controllo ciclico enumerativo1: for i in �e1, . . . , ek� do2: espressioni E3: end for

5.8 Il teorema di Böhm-JacopiniUna prima questione sulla programmazione strutturata riguarda l’eseguibi-lità dei tre controlli fondamentali, supponendo di disporre di un esecutorecapace di eseguire gli algoritmi descritti con il linguaggio a salti di basso livel-lo. Per dimostrare tale eseguibilità è sufficiente dimostrare che i tre controllifondamentali sono esprimibili in termini del linguaggio di basso livello. Ladimostrazione discende dalle seguenti considerazioni. Il controllo sequenzialeè direttamente traducibile in quanto il flusso dell’esecuzione di un algoritmodescritto mediante il linguaggio elementare è proprio quello sequenziale. Ilcontrollo condizionale if C then E1 else E2 endif può essere tradotto con

Algoritmo 24 - Traduzione a basso livello del controllo if-then-else1: if C goto 42: E13: goto 54: E25: . . .

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 92: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

82 CAPITOLO 5. CONTROLLI

Il controllo ciclico while C do E endwhile può essere tradotto con

Algoritmo 25 - Traduzione a basso livello del controllo while-do1: if C goto 42: espressioni E3: goto 14: . . .

La seconda questione che si pone riguarda il seguente quesito: I controllidella programmazione strutturata sono sufficienti ad esprimere qualsiasi cosache sia esprimibile in termini di un linguaggio ”a salti”) ? La risposta (affer-mativa) a questo quesito venne data (e dimostrata) nel 1966 da due ricercatoriitaliani. Tale risultato è noto con il nome di

TEOREMA 4 (di Böhm-Jacopini). Per ogni programma non strutturato(espresso mediante i controlli a salti) si può costruire un equivalente pro-gramma strutturato (espresso mediante i soli controlli della programmazionestrutturata). 2

Il teorema di Böhm-Jacopini ha un significato molto profondo in quantoafferma che ogni algoritmo, espresso organizzando in un qualche modo delleazioni elementari di base, può essere riformulato equivalentemente medianteun algoritmo che contenga le azioni elementari di base organizzate tra lorosolamente mediante i tre controlli fondamentali previsti dal teorema. Questorisultato espresso dal teorema di Böhm-Jacopini si traduce nella possibilità diminimizzare un linguaggio algoritmico, senza limitarne la potenza espressiva.Il teorema costituisce, dunque, una legittimazione teorica alla programmazionestrutturata ma non evidenzia perché siano preferibili i programmi strutturatirispetto a quelli non strutturati. Le motivazioni, che saranno ancora piùevidenti quando sarà riconsiderata la metodologia top-down per lo sviluppodegli algoritmi, risiedono nel fatto che i tre controlli strutturati ricalcano ilprocesso generativo dello sviluppo degli algoritmi. Notiamo che dal puntodi vista teorico ci si potrebbe accontentare della forma debole del teorema,ossia della formulazione in cui al posto di “è possibile costruire” si sostituiscala locuzione “esiste”. Anche questo risultato sarebbe sufficiente a legittimarel’uso dei soli tre controlli fondamentali; ma la dimostrazione del teorema è ditipo costruttivo e fornisce anche la descrizione del metodo di traduzione.

2Per una dimostrazione del teorema si veda: C.Böhm-G.Jacopini, Flow Diagrams, TuringMachines and Languages with only two Formation Rules, in Communication ACM, No.9,1966.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 93: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.9. ESERCIZI 83

5.9 Esercizi1. Esprimere in notazione algoritmica, utilizzando i controlli della program-

mazione strutturata, la seguente porzione di ricetta: Dopo aver preparatol’impasto ed averlo messo in una casseruola, cuocere per 30 minuti me-scolando per un minuto ogni 5 minuti, aggiungendo un cucchiaio d’acquaall’occorrenza.

2. Risolvere gli esercizi del capitolo precedente usando i controlli dellaprogrammazione strutturata.

3. Tradurre le seguenti porzioni di algoritmo mediante i controlli dellaprogrammazione strutturata:

(a) 1: if C goto 42: E3: goto 14: . . .

(b) 1: if C1 goto 42: E3: if C2 goto 24: . . .

(c) 1: if C1 goto 42: E3: if C2 goto 14: . . .

(d) 1: if C1 goto 32: E3: if C2 goto 2

(e) 1: E12: if C1 goto 13: if C2 goto 64: E25: goto 16: . . .

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 94: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

84 CAPITOLO 5. CONTROLLI

(f) 1: E12: if C1 goto 53: if C2 goto 64: E25: goto 16: . . .

4. Tradurre il seguente schema di controllo in notazione di basso livel-lo:1: while C1 do2: if C2 then3: E14: endif5: E26: endwhile

5. Tradurre i seguenti schemi di controllo condizionali, usando i controllidi basso livello ed i controlli fondamentali della programmazione strut-turata, senza ricorrere all’uso di operatori logici:

(a) 1: if C1 - C2 then2: E13: else4: E25: end if

(b) 1: if C1 , C2 then2: E13: else4: E25: end if

(c) 1: if C1 , �C2 - C3� then2: E13: else4: E25: end if

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 95: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

5.9. ESERCIZI 85

6. Tradurre i seguenti schemi di controllo usando solo i controlli fondamen-tali della programmazione strutturata (k, k1 e k2 sono delle genericheespressioni intere ed E un generico blocco di istruzioni):

(a) 1: repeat k times2: E

3: end repeat

(b) 1: for i from k1 to k2 do2: E

3: end for

7. Tradurre i seguenti schemi di controllo ciclici in notazione di bassolivello ed usando solo i controlli fondamentali della programmazionestrutturata:

(a) 1: ciclo2: E13: se C allora esci fine se4: E25: fine ciclo

(b) 1: ciclo2: E13: se C1 allora esci fine se4: E25: se C2 allora esci fine se6: fine ciclo

(c) 1: per sempre2: E

3: fine per sempre

8. Usando solo i controlli fondamentali della programmazione struttura-ta, scrivere una porzione di algoritmo in grado di generare i seguentiprocessi:

P1 � � � (processo nullo)P2 � �E1�P3 � �E1,E2,E1,E1,E2�P4 � �E1,E1,E1,E1�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 96: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

86 CAPITOLO 5. CONTROLLI

P5 � �E1,E3,E1,E2,E1,E2,E1,E3,E2�9. Scrivere il controllo ripeti k volte E fineripeti usando

(a) i controlli di basso livello(b) i controlli fondamentali della programmazione strutturata

(k denota una generica espressione intera ed E un generico blocco diistruzioni).

10. Descrivere in notazione di basso ed alto livello un algoritmo per calcolarela somma dei numeri naturali compresi fra due dati numeri naturali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 97: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 6

Risolvere

Risolvere problemi è il compito specificodell’intelligenza e l’intelligenza è la dotespecifica dell’uomo. La capacità di aggi-rare un ostacolo, di prendere una via indi-retta quando non si presenta nessuna viadiretta, innalza l’animale intelligente al disopra di quello ottuso, eleva l’uomo enor-memente al di sopra degli animali più in-telligenti e gli uomini di talento al di sopradei loro simili.G. Polya, La scoperta matematica

In questo capitolo vengono presentate alcune metodologie per risolvere iproblemi mediante degli algoritmi. Vengono forniti dei suggerimenti alla se-guente domanda: "Come si sviluppa una soluzione algoritmica di un dato pro-blema?" Verranno analizzate delle situazioni di problemi per la cui soluzionenon è sufficiente una semplice applicazione di varie conoscenze e regole, ma sirichiede di elaborare delle strategie risolutive in base alle conoscenze acquisite,all’esperienza accumulata ed ad una buona dose d’intuito e fantasia.

87

Page 98: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

88 CAPITOLO 6. RISOLVERE

6.1 Soluzione dei problemiLa ricerca di una soluzione di un problema è un’attività complessa ed arti-colata che si colloca in uno scenario popolato da due tipologie di personaggi:solutori, esecutori che si parlano mediante un linguaggio. Solitamente, il ruo-lo del solutore è interpretato dall’uomo che, grazie alle sue capacità logichee creative gioca il ruolo attivo di ideazione del procedimento risolutivo delproblema; gli esecutori sono delle entità passive, gli strumenti che eseguono ilprocedimento: si tratta delle macchine programambili che, grazie all’elevatavelocità di elaborazione, forniscono prontamente il risultato del problema.

Molti sono stati i filosofi e gli informatici che hanno suggerito delle in-dicazioni per la soluzione dei problemi. A seguire sono riportati alcunistralci.

Dividete ciascun problema che state esaminando in tante parti quantepotete e quante ve ne occorrono per risolverlo più facilmente.

[Cartesio, Discorso sul metodo]

Questa regola di Cartesio serve poco finché l’arte di dividere [...] rimaneinspiegata [...]. Dividendo il suo sottoproblema in parti non convenienti,il risolutore di problemi inesperto può aumentare la sua difficoltà.

[Leibnitz, Scritti filosofici]

Le tecniche di costruzione dei programmi si basano su un unico principio:scomporre l’azione necessaria per risolvere un problema in azioni piùsemplici, e suddividere (di conseguenza) il problema in sottoproblemi.

[N.Wirth, Principi di programmazione strutturata]

Molte sono le strade per risolvere tantissimi problemi e molte sono anchele soluzioni degli stessi. Questa situazione non rende più facile il compitodi risolvere i problemi: messi dinanzi a una molteplicità di linee di attac-co possibili, è normalmente difficile riuscire a capire rapidamente qualepercorso è probabilmente infruttuoso e quale può essere produttivo.

[R.G.Dromey, How to solve it by computer ]

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 99: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.2. LA METODOLOGIA TOP-DOWN 89

6.2 La metodologia top-down

La maggior parte dei problemi che si incontrano presenta notevoli difficoltàed una prima analisi non consente di individuare subito un percorso risolu-tivo. Una valida strategia risolutiva che si applica alla soluzione di genericiproblemi è nota con il nome di metodologia top-down o dei raffinamentisuccessivi; consiste nella risoluzione dei problemi affrontandoli, dall’alto ver-so il basso, scomponendoli in sottoproblemi più semplici che vengono via-viarisolti per approfondimenti successivi. Tale approccio risulta particolarmenteindicato quando i problemi non sono di immediata soluzione.

La metodologia top-down per la soluzione di un problema (classe di proble-mi) P può essere descritta come segue. Indicheremo con A�P � la struttura diuna scomposizione di un problema P in sottoproblemi, ossia un algoritmo incui compaiono delle istruzioni non direttamente comprensibili dall’esecutore.Queste istruzioni costituiranno i sottoproblemi da raffinare e dettagliare in fasisuccessive. Adottando queste notazioni, la soluzione di un problema mediantela metodologia top-down può essere espressa come una sorta di meta-algoritmorivolto ad un solutore e può essere formulata come descritto nell’algoritmo 26.

Algoritmo 26 - Meta-algoritmo di risoluzione di problemiInput: problema P da risolvereOutput: procedimento per la soluzione di P1: if la soluzione del problema P è direttamente esprimibile then2: esprimi la soluzione del problema P3: else4: scomponi il problema P secondo una struttura A�P �5: risolvi mediante la metodologia top-down i sottoproblemi Pi in A�P �6: ricomponi le soluzioni A�Pi� innestandole nella soluzione A�P �7: end if

Nello sviluppo degli algoritmi mediante la metodologia top-down dobbiamoassumere un atteggiamento ottimistico, pensare di avere a disposizione unesecutore sufficientemente potente ad eseguire delle azioni complesse (e speraredi poter esprimere tali azioni in termini delle azioni elementari effettivamenteeseguibili da un esecutore reale).

I vantaggi più evidenti indotti dall’applicazione della metodologia top-down per la soluzione dei problemi possono essere riassunti nei seguenti punti:

• Un problema viene scomposto in sottoproblemi più piccoli e quindi piùfacilmente risolvibili

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 100: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

90 CAPITOLO 6. RISOLVERE

• In ogni istante si ha una visione complessiva dell’intero problema e dellastruttura dell’algoritmo risolutivo

• Aumenta la leggibilità dell’algoritmo

• La soluzione di un problema può essere affidata a più persone diverse

• La soluzione può essere ripresa in tempi successivi e sviluppata a blocchi

• Se nella scomposizione vengono evidenziate delle parti di problema similifra loro, esse possono essere risolte da uno stesso algoritmo

• Le varie fasi di sviluppo dell’algoritmo fungono da documentazione perle successive fasi di maggior dettaglio

• Viene semplificata la localizzazione e la correzione di eventuali errori

Osservazione. Sopra si è preferito usare il termine metodologia anzichéil termine più deterministico metodo in quanto quest’ultimo dà l’idea che sipossa cercare la soluzione a colpo sicuro. La ricerca di una soluzione richiede,invece, dei tentativi, delle prove di avvicinamento, dei ritorni sui propri passie pertanto il termine metodologia meglio si adatta ad esprimere questa ricercadella soluzione che si realizza circuendo il problema fino a vincerlo. Usandoun linguaggio figurato, si tratta di catturare una preda che tenta di fuggire,piuttosto che un tiro al bersaglio. In altri termini potremmo esprimerci affer-mando che non esiste un algoritmo (generale) per sviluppare gli algoritmi maun algoritmo viene esplicitato seguendo una sorta di fiuto felino che porta allapreda. E neanche il fiuto felino può essere sufficiente a raggiungere la metama deve essere unito ad una buona dose d’inventiva, guidato da intelligenzae sorretto da costanza. Il problema di base consiste nel riuscire ad indivi-duare una buona scomposizione. A questo proposito risultano appropriate leseguenti parole di Hofstadter.

Non vi è alcuna garanzia che il metodo della riduzione a sottoproblemifunzionerà. Vi sono molte situazioni nelle quali fallisce. Si consideri,per esempio, questo problema. Sei un cane e un amico uomo ti haappena gettato il tuo osso preferito in un altro giardino al di là di unarete metallica. Tu vedi l’osso attraverso la rete: eccolo là sull’erba, chesembra dire “mangiami, mangiami!”. Lungo la rete, a circa venti metridall’osso, c’è un cancello aperto. Che cosa fai? Alcuni cani corronosemplicemente fino alla rete e restano lí ad abbaiare. Altri si lancianoverso il cancello aperto e poi tornano indietro verso l’osso ambito. Sipuò dire che entrambi i cani hanno applicato la tecnica della riduzione

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 101: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.2. LA METODOLOGIA TOP-DOWN 91

a sottoproblemi. Essi, però, rappresentano il problema nella loro mentein modi diversi, e in ciò sta tutta la differenza. Il cane che abbaia vedecome sottoproblemi

1. correre alla rete2. attraversarla3. correre all’osso

ma quel secondo sottoproblema è un osso duro: da cui l’abbaiare. L’altrocane vede come sottoproblemi

1. raggiungere il cancello2. attraversare il cancello3. correre verso l’osso

Si noti come tutto dipende dal modo in cui si rappresenta lo spazio deiproblemi: cioè, da cosa si percepisce come riduzione del problema (mo-vimento in avanti verso l’obiettivo globale) e che cosa si percepisce comeingrandimento del problema (movimento all’indietro che allontana dal-l’obiettivo). Alcuni cani cercano di correre direttamente verso l’osso e,quando incontrano la rete, qualcosa scatta nel loro cervello; cambianosubito direzione e corrono verso il cancello. Questi cani si rendono con-to che ciò che a prima vista sembrava dover aumentare la distanza trala situazione iniziale e quella desiderata (cioè, allontanarsi dall’osso percorrere verso il cancello aperto) in realtà l’avrebbe diminuita. Inizial-mente confondono la distanza fisica con la distanza nel problema. Ognimovimento che allontani dall’osso sembra per definizione una Cosa Cat-tiva. Ma poi, in qualche modo, si rendono conto che possono spostare lapercezione di ciò che li porterà più vicini all’osso. In uno spazio astrat-to opportunamente scelto, il muoversi verso il cancello è una traiettoriache porta il cane più vicino all’osso! In ogni istante, il cane si sta av-vicinando, nel nuovo senso, all’osso. Quindi l’utilità della riduzione asottoproblemi dipende da come ci si rappresenta mentalmente il proble-ma stesso. Ciò che in uno spazio sembra un indietreggiamento può inun altro spazio apparire un rivoluzionario passo in avanti.

[Tratto da: D.R.Hofstadter: Gödel, Escher, Bach]

Esempio 27. Consideriamo il problema di disegnare, mediante la grafica dellatartaruga, una figura a croce come quella riportata nella figura che segue.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 102: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

92 CAPITOLO 6. RISOLVERE

Adottando la metodologia top-down la figura può essere disegnata median-te l’algoritmo 27.

Algoritmo 27 - Disegno di una croceInput: croce con lato di lunghezza l1: repeat 42: disegna A �P1�3: ruota α �P2�4: end repeat

Le istruzioni 2. e 3. nell’algoritmo 27 costituiscono due sottoproblemi chepossono essere risolti con le seguenti porzioni di algoritmo:1: # soluzione sottoproblema P1:2: repeat 33: forward(l)4: left(90)5: end repeat

1: # soluzione sottoproblema P2:2: right(180)

Ricomponendo le soluzioni dei sottoproblemi P1 e P2 all’interno dell’algo-ritmo 28 si ottiene il seguente algoritmo complessivo.

Algoritmo 28 - Disegno di una croceInput: croce con lato di lunghezza l1: repeat 42: repeat 33: forward(l)4: left(90)5: end repeat6: right(180)7: end repeat

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 103: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.3. LA METODOLOGIA BOTTOM-UP 93

6.3 La metodologia bottom-upDiversamente da quanto avviene per la metodologia top-down, l’approccio adun problema mediante la metodologia bottom up consiste nell’iniziare dallivello dei problemi più elementari risalendo verso il livello del problema darisolvere. Si cerca di individuare e risolvere subito dei problemi che servirannoper soluzione del problema generale la quale viene costruita ricomponendo lesoluzioni dei problemi elementari già risolti.

La metodologia bottom-up prevede un approccio intellettualmente diversodalla metodologia top-down in quanto si risolvono dapprima i problemi ele-mentari preparando i blocchi risolutivi che, assemblati, forniranno la soluzionedel problema complessivo. Ma anche qui si vede che la metodologia top-downinterviene (almeno in modo latente) in quanto ci si deve preventivamente porrela domanda: Quali sono i problemi elementari da risolvere?

La metodologia top-down offre il vantaggio di delineare subito la scompo-sizione del problema; ciò può comportare lo svantaggio che delle scelte erratead un livello elevato compromettano tutte le fasi successive dei livelli più ele-mentari. La metodologia bottom-up, invece, incentiva il riutilizzo di soluzionidi (sotto)problemi già affrontati e risolti in precedenza.

Le metodologie top-down e bottom-up non devono essere considerate al-ternative: l’atteggiamento più proficuo consiste nel considerarle come deglistrumenti che si integrano. Ad esempio, quando si evidenzia un sottopro-blema si deve generalizzarlo opportunamente affinché possa risultare utile persituazioni future. È questo un atteggiamento bottom-up.Esempio 28. Il seguente problema illustra in modo schematico un confrontofra la metodologia top-down e la metodologia bottom-up nella soluzione diun problema; il problema consiste nel suddividere in quadrati una data figurapiana composta da quadrati unitari.

Nel primo caso (soluzione top-down) si può pensare di scomporre la figura inquadrati usando delle forbici, nel secondo (soluzione bottom-up) si può pen-sare di ricostruire la figura incollando assieme dei tasselli quadrati di diversedimensioni. Dalle due soluzioni riportate nella figura 6.1 si può notare, purdalla banalità dell’esempio proposto, che le metodologie top-down e bottom-uppossono portare a dei diversi procedimenti risolutivi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 104: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

94 CAPITOLO 6. RISOLVERE

���+

QQQs

@@@@R

��

��

@@R

��

@@R

AAAU

����

�� @@R

Scomposizione top-down Composizione bottom-up

Figura 6.1: Illustrazione della scomposizione top-down e della composizionebottom-up. Con segmenti più marcati sono indicate le linee di taglio (nellascomposizione top-down) e di unione (nella composizione bottom-up).

Osservazione. L’aspetto più caratterizzante della metodologia top-downconsiste nel trovare delle buone ed utili scomposizioni dei problemi. Le mag-giori difficoltà per la soluzione di un problema risiedono, infatti, non tantonell’esplicitazione della soluzione dei singoli sottoproblemi elementari, quantonella capacità di trovare delle adeguate scomposizioni in sottoproblemi. La fa-se di scomposizione deve tendere a ridurre (in un qualche senso) la complessitàdel problema originale.

Esempio 29. Consideriamo il problema di disegnare, mediante la grafica dellatartaruga, la figura che segue.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 105: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.3. LA METODOLOGIA BOTTOM-UP 95

Questa figura può essere disegnata mediante diverse scomposizioni, co-me illustrato nella figura che segue in cui viene descritta la traiettoria dellatartaruga.

�a� �b� �c� �d�Queste diverse scomposizioni riflettono diverse gradazioni di applicazione

delle metodologie top-down e bottom-up, come descritto ai punti che seguono.

�a� scomposizione infelice, in quanto non evidenzia gli elementi di simme-tria e di ripetitività della figura; addirittura non si evidenzia alcunascomposizione in sottofigure

�b� scomposizione efficace in quanto la figura viene scomposta in sottofigureuguali (quadrati); questa soluzione assomma una parte di metodologiabottom-up in quanto il disegno di un quadrato è una figura elementaregià risolta

�c� la scomposizione in due rettangoli è una soluzione altamente top-downin quanto il disegno di un rettangolo è una figura non ancora risolta erichiede quindi un ulteriore passo di analisi per arrivare alla soluzione

�d� scomposizione altamente bottom-up in quanto sia il quadrato interno ela croce esterna sono delle sottofigure già risolte

Osservazione. Come si deduce dal precedente esempio, le metodologietop-down e bottom-up vengono spesso usate congiuntamente; addirittura laqualificazione della metodologia (top-down e bottom-up) dipende dal conte-sto, ossia dalle precedenti soluzioni dei sottoproblemi; di più, l’uso dell’una odell’altra metodologia dipende dalle intenzioni del solutore: se si scompone ilproblema P in un sottoproblema Q, se il solutore non dispone della soluzio-ne Q, allora si sta adottando la metodologia top-down; se invece il solutoreevidenzia nella scomposizione un sottoproblema Q perché lo ha già risolto sitratta di metodologia bottom-up.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 106: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

96 CAPITOLO 6. RISOLVERE

6.4 Forme di scomposizione/composizioneUn oggetto (problema, soluzione, figura, . . . ) può essere scomposto (meto-dologia top down) o composto (metodologia bottom up) in diverse modalità,descritte a seguire mediante degli esempi nell’ambiente delle figure geometricheche può essere usato come una palestra di allenamento per queste metodologie.

6.4.1 Scomposizione sequenziale

Un quadrato suddiviso in quattro quadrati mediante due linee che unisconoi punti medi dei lati opposti può essere visto come l’unione di due figure: ilquadrato esterno e la croce interna, come si vede nella figura che segue.

Questa scomposizione corrisponde all’algoritmo 29.

Algoritmo 29 - Scomposizione sequenziale1: disegna j2: disegna �

La scomposizione sequenziale può essere vista come un’operazione, deno-tata con il simbolo `, e può essere descritta con lo schema che segue:

>

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 107: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.4. FORME DI SCOMPOSIZIONE/COMPOSIZIONE 97

6.4.2 Scomposizione iterativa

La figura del quadrato suddiviso in quattro quadrati come descritto sopra puòessere scomposta in modo alternativo come si vede nella figura che segue.

Questa scomposizione corrisponde all’algoritmo 30.

Algoritmo 30 - Scomposizione iterativa1: repeat 42: disegna A3: end repeat

La scomposizione iterativa può essere vista come un’operazione, denotatacon il simbolo `, e può essere descritta con lo schema che segue:

4

@

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 108: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

98 CAPITOLO 6. RISOLVERE

Nella composizione/ripetizione di figure, a differenza di quanto avvieneper le operazioni sui numeri, è decisivo, oltre agli ’operandi’, anche il loroposizionamento nel piano. Ad esempio l’operazione

4a A

può produrre come risultato due diverse figure a seconda di come vengonodisposte le varie componenti:

Nella grafica della tartaruga questo fatto si traduce nella definizione di un’azio-ne di raccordo (rotazione, spostamento della tartaruga) interposta fra i disegnidelle varie componenti della figura.

Combinando le operazioni unione ` e ripetizione a come sopra descritte, sipuò definire una sorta di algebra che permette di esprimere una figura medianteun’espressione, come descritto nel seguente esempio.Esempio 30. Usando le seguenti tipologie di forme di componenti lineari ruo-tabili e ridimensionabili:

costruiamo la seguente ’casetta’:

È ammesso usare più istanze della stessa tipologia.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 109: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.4. FORME DI SCOMPOSIZIONE/COMPOSIZIONE 99

La figura della ’casetta’ può essere definita mediante la seguente espressio-ne:

4

> @

>

6.4.3 Scomposizione ricorsiva

La metodologia ricorsiva per la soluzione dei problemi consiste nel suddividereil problema in sottoproblemi più semplici della stessa forma. In altri termini ilproblema viene ridefinito in termini di se stesso. Svolto questo passaggio deci-sivo, il problema risulta quasi risolto: basta solamente definire direttamente lasoluzione nel caso di una semplice istanza. Sembra quasi un metodo magicoed inconsistente in quanto la definizione del problema diventa la sua stessasoluzione. Il problema da risolvere è generalmente definito in termini di unnumero naturale n che ne rappresenta la dimensione; il nocciolo della tecnicaricorsiva consiste nello scomporre il problema P �n� in un problema P �n�1� didimensione n�1. A sua volta il problema P �n�1� viene scomposto in un pro-blema P �n� 2� e così via. La soluzione si concretizza definendo direttamentela soluzione per l’istanza minima del problema, generalmente P �0�.L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 110: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

100 CAPITOLO 6. RISOLVERE

Talune figure hanno la caratteristica di avere al proprio interno una partesimile alla figura stessa; ad esempio, in una spirale, come quella raffiguratanella figura che segue, si nota che essa è costituita da un segmento e da unaspirale (con un lato in meno).

In casi come questo si può ricorrere, oltre che ad un algoritmo iterativo, adun algoritmo ricorsivo che richiama se stesso, come si vede nell’algoritmo 31.

Algoritmo 31 - Scomposizione ricorsiva: spirale�n, l, k�Input: numero n di segmenti, lunghezza l del lato iniziale, incremento k1: if n A 0 then2: forward(l)3: left(90)4: spirale�n � 1, l � k, k�5: end if

6.5 Criteri di scomposizioneAbbiamo visto che una figura può essere scomposta in più modi. Emerge cosìl’esigenza di individuare dei criteri in base ai quali scegliere la scomposizionemigliore. Nel caso di disegno di figure con la grafica della tartaruga si puòadottare il criterio di minimizzare la lunghezza del percorso della tartaruga.Come conseguenza di questa scelta risultano preferibili i percorsi che non ri-passano su una linea già tracciata. A parità di lunghezza del percorso, dalpunto di vista della programmazione risultano preferibili i percorsi definibilimediante la ripetizione di un pattern di base.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 111: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.5. CRITERI DI SCOMPOSIZIONE 101

Esempio 31. Consideriamo la seguente figura:

La forma più spontanea di scomposizione consiste nell’individuare cinquequadrati, come evidenziato nella figura che segue.

Questa scomposizione, per quanto risulti la più naturale e la più immediatanon è la più conveniente in quanto richiede una manovra di raccordo costituitada pennasu / avanza / pennagiu / ruota. Risulta più comoda la seguente

che corrisponde ai seguenti due algoritmi 32 e 33.

Algoritmo 32 - Figura1: repeat 42: disegna �j

3: end repeat

Algoritmo 33 - Figura �j

1: disegna �2: disegna j

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 112: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

102 CAPITOLO 6. RISOLVERE

Esempio 32. Mediante la grafica della tartaruga ed applicando le metodologietop-down e bottom-up, disegniamo la figura riportate sotto.

Questa figura può essere scomposta in vari modi, come evidenzia la figurache segue:

�a� �b� �c�Una soluzione ottimale, corrispondente alla scomposizione �c�, evidenzia

che la figura è composta da una sequenza di cornici concentriche. Una cornicepuò si basa sulla composizione delle seguenti forme di elementi:

gradino�l� scala�n, l� cornice�k, l�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 113: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

6.6. ESERCIZI 103

6.6 Esercizi

1. Illustrare, mediante degli esempi, in cosa consistono le metodologia top-down e bottom-up per la soluzione dei problemi, evidenziando i vantaggiche esse offrono.

2. Si consideri il caso di un bambino che gioca con i mattoncini Lego percostruire una casetta. Si spieghi, in questo contesto, in cosa consistonole metodologie top-down e bottom-up.

3. Una qualità desiderabile per un algoritmo di disegno di una figura me-diante la grafica della tartaruga consiste nel disegnare l’intera figuramediante un percorso euleriano, ossia senza ripassare su un tratto giàtracciato e senza alzare la penna dal piano di tracciamento. Analizza-re ed individuare quali delle scomposizioni �a�, �b�, �c� e �d� presentatenell’esempio 29 soddisfano a questa condizione.

4. Individuare delle possibili scomposizioni per ciascuna delle seguenti fi-gure e scrivere dei corrispondenti algoritmi per disegnarle mediante lagrafica della tartaruga.

5. Definire una classe di figure che comprenda come casi particolari le tretipologie di figure descritte nel precedente esercizio 4. Scrivere un algo-ritmo per disegnare una generica figura della classe. Particolarizzare idati dell’algoritmo in modo che produca il disegno di ciascuna delle tretipologie di figure sopra descritte.

6. Con riferimento alla figura ’casetta’ descritta nell’esempio 30, scomporrela figura nelle seguenti due situazioni:

(a) usando il minor numero possibile di tipologie di forme(b) usando tutte quattro le tipologie di forme

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 114: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

104 CAPITOLO 6. RISOLVERE

7. Mediante la grafica della tartaruga ed applicando le metodologie top-down e bottom-up, disegnare le due figure riportate sotto.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 115: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 7

Disegnare

La geometria della Tartaruga è uno stile digeometria diverso dagli altri, come lo sti-le assiomatico d’Euclide e lo stile analiticodi Cartesio erano anch’essi differenti l’unodall’altro. Lo stile d’Euclide è logico, quel-lo di Cartesio è algebrico. Lo stile dellageometria della tartaruga è informatico.S. Papert, Mindstorm

Una delle prime attività che compiamo da bambini, quando ancora l’e-spressione verbale è incerta e ridotta a dei nomi, è quella di scarabocchiarecon una matita o pennarello colorato su un foglio. Parallelamente allo svi-luppo di ciascun individuo, anche nell’evoluzione storica dell’uomo una delleprime manifestazioni culturali svolte dall’uomo preistorico è stata la raffigu-razione all’interno delle caverne di disegni che avevano principalmente scopopropiziatorio o documentativo delle attività svolte dall’uomo (si trattava spes-so di scene di caccia). Successicamente il disegno venne usato sempre più conscopi di rappresentazione e passò da una modalità grafico espressiva ad unamodalità sempre più stilizzata e simbolica. Si giunse, dopo un lungo per-corso, alla rappresentazione di figure geometriche ed al loro disegno mediantestrumenti quali la riga ed il compasso. Una modalità alternativa di disegno èfornita dalla grafica della tartaruga, una tecnica molto intuitiva, adottata ini-zialmente dal linguaggio Logo, che si basa sulla movimentazione di un automanoto come tartaruga.

105

Page 116: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

106 CAPITOLO 7. DISEGNARE

7.1 La geometria della tartarugaL’ambiente della geometria della tartaruga è caratterizzato da un automa rap-presentato da una tartaruga che, muovendosi, lascia una traccia disegnandodelle figure. Il piano di movimento della tartaruga è costituito da un fogliovirtuale rappresentato dal video del calcolatore; la tartaruga è posizionatasul foglio ed ha una propria direzione di avanzamento (modificabile medianteappositi comandi). Alla tartaruga è attaccata una penna che, muovendosiassieme alla tartaruga, lascia un segno mediante il quale viene costruito il di-segno. La tartaruga esegue gli ordini che le vengono impartiti: mediante degliappositi comandi la tartaruga può essere fatta ruotare sul posto, a sinistra eda destra, e fatta avanzare.

L’ambiente della tartaruga, nonostante l’apparenza, è un ambiente moltoricco e versatile: la tartaruga diventa un pretesto su cui realizzare contesti peril disegno, per la geometria e per il calcolo. Per questo motivo si parla anchedi grafica della tartaruga e geometria della tartaruga.

L’ambiente della tartaruga è primitivo rispetto a qualsiasi tipo di concet-tualizzazione geometrica in quanto non richiede alcuna specifica conoscenzadello spazio geometrico ma solamente una consapevolezza del rapporto delproprio corpo rispetto allo spazio esterno. La caratteristica interessante epeculiare della geometria della tartaruga consiste nella possibilità di poterevitare il ricorso ad un sistema di riferimento di coordinate, in quanto ogniazione grafica fa riferimento alla posizione e direzione attuale della tartaruga.

All’interno di molti linguaggi di programmazione è predisposta una com-ponente di linguaggio imperativo costituita dai comandi della grafica dellatartaruga, similmente a quanto si ritrova anche nel linguaggio Logo. Qui diseguito sono schematicamente riportati alcuni comandi di base della graficadella tartaruga che saranno utilizzati più avanti:

forward�n� avanza di n passileft�a� gira a sinistra di un angolo aright�a� gira a destra di un angolo a

Gli angoli di rotazione sono espressi in gradi sessagesimali.Questi semplici comandi consentono il disegno di figure geometriche, come

descritto nel seguente esempio.Esempio 33. Nell’algoritmo che segue viene disegnato un quadrato con lato dilunghezza 100.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 117: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.1. LA GEOMETRIA DELLA TARTARUGA 107

Algoritmo 34 - quadrato di lato 1001: forward�100�2: left(90)3: forward�100�4: left(90)5: forward�100�6: left(90)7: forward�100�

Se si vuole tracciare una linea che inizia in un punto diverso dalla posizionecorrente della tartaruga si possono adottare due strategie alternative:

1. sollevare ed abbassare la penna sul foglio; naturalmente, un movimentocon la penna abbassata ha l’effetto di lasciare una linea mentre un mo-vimento con la penna alzata non produce alcun effetto grafico. Questapossibilità si fonda sull’uso dei seguenti due comandi:

penup alza la pennapendown abbassa la penna

2. far saltare la tartaruga in avanti di un dato numero di passi; il comandocorrispondente è il seguente:

jump�n� salta in avanti di n passi

Osservazione. Seguendo la tradizione, la geometria della tartaruga vie-ne presentata secondo un’impostazione procedurale: esiste una tartaruga allaquale si inoltrano i comandi che, eseguiti, producono un effetto su video. Al-ternativamente, in modo più aderente al paradigma funzionale, si può vedereun comando rivolto alla tartaruga come un’espressione che, elaborata, pro-duce un risultato che, riprodotto su video, produce un effetto grafico. Nonsi tratta di un’impostazione funzionale pura in quanto il risultato dell’elabo-razione dipende dallo stato della tartaruga e, d’altra parte, l’elaborazione diun’espressione può modificare lo stato della tartaruga.

Osservazione. Nella geometria della tartaruga si adotta un’impostazionecostruttiva; ad esempio, una circonferenza non viene definita dichiarativa-mente mediante una proprietà caratterizzante (come avviene nella geometriaeuclidea o cartesiana) ma viene costruita: la circonferenza viene specificatamediante un algoritmo che la disegna.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 118: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

108 CAPITOLO 7. DISEGNARE

7.2 Ripetere i comandiUno degli aspetti caratterizzanti la programmazione risiede nella capacità difar ripetere delle azioni. Già dal precedente esempio 33 di disegno di unquadrato si capisce che se si dovesse scrivere le istruzioni per disegnare unpoligono regolare di parecchi lati servirebbe una lunga sequenza di istruzioni.Per questo motivo la maggior parte dei linguaggi di programmazione prevededei particolari meccanismi per aggregare e ripetere degli elementi di base, comedescritto nell’esempio che segue.Esempio 34. Il disegno di un quadrato di lato 100 unità può essere generatomediante il seguente schema di ripetizione dei comandi:

1: repeat 42: forward�100�3: left(90)4: end repeat

7.3 Istruire la tartarugaL’ambiente grafico predisposto mediante i comandi grafici descritti nei para-grafi precedenti può essere arricchito mediante la definizione di nuovi comandida parte dell’utente. Questa possibilità può essere vista come un meccanismoper istruire la tartaruga, insegnandole nuovi comandi.Esempio 35. Per disegnare un generico esagono di lato l si può definire ilseguente algoritmo.

Algoritmo 35 - esagono�l�Input: lunghezza l del lato1: repeat 62: forward�l�3: left(60)4: end repeat

Per disegnare un esagono di lato 100 basta richiamare il precedente algo-ritmo mediante l’istruzione

esagono(100)

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 119: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.4. DISEGNO DI FIGURE 109

7.4 Disegno di figurePer arrivare a scrivere l’algoritmo per disegnare una figura è convenientesvolgere delle fasi di analisi che portano ad individuare i seguenti elementi:

1. parametri che definiscono la classe delle figure

2. elementi che si ripetono

3. schema ripetitivo

Esempio 36. Le stelle costituiscono delle tipiche strutture ripetitive che siprestano ad generate mediante la grafica della tartaruga. Una generica stellaè individuata dal numero n di punte, dalla lunghezza l del lato e dall’angoloα in punta. La figura che segue illustra una stella a 7 punte.

Il procedimento per disegnare una stella ad n punte può essere sviluppatocome segue: indicando con α � 180 � a l’angolo di rotazione a sinistra chela tartaruga esegue trovandosi in una punta della stella e con β l’angolo dirotazione a destra quando la tartaruga si trova su uno spigolo interno, devevalere la relazione nα�nβ � 360 da cui si ricava: β � α�360~n. Il procedimentoè descritto nell’algoritmo 36.

Algoritmo 36 - stella�n, l, a�Input: numero n di punte, lunghezza l del lato, angolo a in punta1: α � 180 � a2: β � α � �360~n�3: repeat n4: forward�l�5: left(α)6: forward�l�7: right(β)8: end repeat

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 120: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

110 CAPITOLO 7. DISEGNARE

7.5 La tartaruga si muove nel pianoUna significativa evoluzione della grafica della tartaruga consiste nel denotarecon dei nomi identificativi i punti di stazionamento della tartaruga, in mododa poterli utilizzare nel seguito del programma, precisandoli mediante i loronomi. La funzione here fornisce il punto in cui si trova la tartaruga. Pertanto,per denotare con un nome, ad esempio P , il punto di stazionamento attualedella tartaruga viene utilizzata l’istruzione di assegnazione

P � here

Avendo, in questo modo, la possibilità di denotare con dei nomi i punti delpiano, risultano coerenti e ben fondate le seguenti istruzioni:

move�P � muove la tartaruga sul punto P , senza disegnaredraw�P � sposta la tartaruga sul punto P , disegnando una linealook�P � orienta la tartaruga verso il punto P , senza spostarladist�P � distanza della tartaruga dal punto P

Le primitive move e draw non modificano l’angolo di avanzamento della tar-taruga e lo stato su/giù della penna.

Sono predisposti anche i seguenti comandi per gestire l’angolo di avanza-mento della tartaruga:

angle angolo di avanzamento attualetoward�α� imposta ad α l’angolo di avanzamento

Esempio 37. Il disegno di un triangolo rettangolo di cateti a e b può essererealizzato mediante il seguente algoritmo.

Algoritmo 37 - triangoloRettangolo�a, b� - triangolo rettangolo di cateti a, bInput: lunghezze a e b dei cateti1: P � here2: forward�a�3: A� here4: move�P �5: right�90�6: forward�b�7: draw�A�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 121: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.5. LA TARTARUGA SI MUOVE NEL PIANO 111

Insegnando alla tartaruga delle nuove istruzioni è possibile realizzare unlivello di funzionalità in cui la tartaruga non viene più percepita come tale,ma diventa uno strumento invisibile che lascia trasparire delle funzionalitàpuramente geometriche. Ciò è confermato dagli algoritmi 39, 38 e 40.

Algoritmo 38 - segmento�A,B� - disegno del segmento fra due punti A e BInput: punti A e B1: move�A�2: draw�B�

Algoritmo 39 - dist�A,B� - distanza fra due punti A e BInput: punti A e B1: move�A�2: return dist�B�

Algoritmo 40 - medio�A,B� - punto medio fra i due punti A e BInput: punti A e B1: move�A�2: look�B�3: forward�dist�B�~2�4: return here

Osservazione. Le funzioni look e dist permettono di avvicinarsi al concettodi robot con sensori in quanto permettono alla tartaruga di interagire conl’ambiente esterno. Combinando le funzionalità di questi due sensori con lecapacità di movimentazione e rotazione si possono simulare dei semplici masignificativi problemi della robotica.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 122: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

112 CAPITOLO 7. DISEGNARE

L’esempio che segue ingloba tutte le modalità operative della tartarugaprecedentemente esaminate.Esempio 38. Un grafo completo è la figura che si ottiene unendo con dei seg-menti i vertici di un poligono regolare in tutti i modi possibili. La figura chesegue descrive un grafo completo di 7 vertici.

L’idea base per disegnare un grafo completo è sintetizzata nell’algorit-mo 41.

Algoritmo 41 - grafo�n, l� : grafo completo - ver.1Input: numero n dei vertici, lunghezza l del lato1: congiungi ciascun vertice con ciascuno dei vertici che seguono

Per poter dettagliare l’idea descritta nell’algoritmo 41 denominiamo conP1, P2, . . . , Pn gli n vertici del poligono. L’algoritmo che disegna il grafo puòesprimersi come segue:

Algoritmo 42 - grafo�n, l� : grafo completo - ver.2Input: numero n dei vertici, lunghezza l del lato1: for i from 1 to n do2: congiungi il vertice Pi con ciascuno dei vertici Pi�1, Pi�2, . . . , Pn

3: end for

Il sottoproblema descritto nella linea 2 dell’algoritmo 42 può essere risoltomediante le linee 2 � 4 che compaiono nel seguente dell’algoritmo 43.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 123: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.5. LA TARTARUGA SI MUOVE NEL PIANO 113

Algoritmo 43 - grafo�n, l� : grafo completo - ver.3Input: numero n dei vertici, lunghezza l del lato1: for i from 1 to n do2: for j from i � 1 to n do3: congiungi il vertice Pi con il vertice Pj

4: end for5: end for

A questo punto rimane da risolvere il problema di determinare un genericopunto del poligono: P1 viene inizializzato con la posizione iniziale della tar-taruga (linea 2 dell’algoritmo 44); i successivi punti Pi vengono determinaticon un’azione di avanzamento e rotazione (linee 12 � 13 dell’algoritmo 44); ipunti Pj vengono calcolati con un ciclo di azioni di avanzamento e rotazione, apartire da Pi (linee 5�8 dell’algoritmo 44). In questo modo si arriva definitivoalgoritmo 44).

Algoritmo 44 - grafo�n, l� : grafo completo - ver.4Input: numero n dei vertici, lunghezza l del lato1: for i from 1 to n do2: Pi � here3: a� angle4: for j from i � 1 to n do5: repeat j � 1 times6: jump�l�7: left�360~n�8: end repeat9: draw�Pi�

10: toward�a�11: end for12: jump�l�13: left�360~n�14: end for

Una soluzione alternativa consiste nel far fare alla tartaruga un giro peri-ferico sul bordo del poligono, memorizzando in un array i vertici del poligono;dopodicché con due cicli for annidati si disegna facilmente il grafo completo.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 124: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

114 CAPITOLO 7. DISEGNARE

7.6 La tartaruga come calcolatoreLa funzione dist permette di utilizzare la tartaruga come un rudimentale stru-mento di calcolo, combinando le sue capacità di spostamento, rotazione emisurazioni di distanza della tartaruga da un dato punto. La tecnica consistenell’allontanare la tartaruga dal punto iniziale, seguendo un percorso descrit-to dall’algoritmo; alla fine si ottiene il risultato misurando la distanza dellatartaruga dal punto iniziale.Esempio 39. Il calcolo di

º2 può essere svolto mediante il seguente algorit-

mo 45 che si basa sul teorema di Pitagora applicato ad un triangolo rettangolodi cateti di lunghezza unitaria.

Algoritmo 45 - Calcolo diº

2Input: nessun datoOutput: valore di

º2

1: P � here2: forward�1�3: left�90�4: forward�1�5: return dist�P �

Per usare l’algoritmo precedente senza vedere effetti collaterali grafici èsufficiente muovere la tartaruga con la penna alzata oppure eseguire gli spo-stamenti mediante il comando jump.

Esempio 40. Generalizzando il procedimento descritto nell’algoritmo 45 si puòcalcolare la radice quadrata di un generico numero naturale, basandosi sullacostruzione della spirale di Teodoro descritta nell’esercizio 16 . Si lascia peresercizio la stesura dell’algoritmo.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 125: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.7. ESERCIZI 115

7.7 Esercizi1. Con riferimento alla geometria della tartaruga, discutere quali delle

seguenti equivalenze sono vere:

forward�x � y� equivale a forward�x�, forward�y�left�a � b� equivale a left�a�, left�b�left�a � b� equivale a left�a�, right�b�left�360 � a� equivale a left�a�left�360 � a� equivale a right�a�left�180 � a� equivale a right�180 � a�left�180 � a� equivale a right�180 � a�

2. Dimostrare che per disegnare un poligono regolare la tartaruga compiedelle rotazioni che sommate danno un angolo giro. Dimostrare che que-sto risultato vale per disegnare un generico poligono (anche non regolare)convesso. Disegnare un poligono regolare di n lati di lunghezza l.

3. Determinare, senza eseguire al computer, le figure disegnate mediante leseguenti porzioni di algoritmi:

(a) 1: repeat 82: forward�l�3: left�45�4: forward�l�5: end repeat

(b) 1: repeat 82: forward�l�3: repeat 44: left�45�5: forward�l�6: end repeat7: end repeat

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 126: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

116 CAPITOLO 7. DISEGNARE

4. Mediante la grafica della tartaruga, un poligono regolare può essere dise-gnato equivalentemente mediante rotazioni a sinistra o a destra. Stabi-lire la relazione (uguaglianza, equivalenza, isometria, similitudine, sim-metria, . . . ) che esiste fra due poligoni disegnati l’uno con rotazioni asinistra, l’altro con rotazioni a destra, partendo, nei due casi, dalla stessaposizione ed orientamento iniziale della tartaruga.

5. Sia F una sequenza di espressioni per disegnare una figura. Stabi-lire quale relazione (uguaglianza, equivalenza, isometria, similitudine,simmetria, . . . ) intercorre fra la figura F e le seguenti:

F1: jump�x�, FF2: left�a�, FF3: jump�x�, left�a�, FF4: left�a�, jump�x�, F

6. Sia F �α� una figura definita mediante la geometria della tartaruga, conangoli di rotazione di ampiezza f�α�, essendo f una funzione lineare diα. Stabilire le relazioni esistenti fra le seguenti figure: F �α�, F �α�90�,F �α � 180�, F �α � 360�, F �α~2�.

7. Sia F �x� una figura composta da segmenti aventi lunghezze proporzio-nali a x. Stabilire la relazione che intercorre tra la figura F �x� e lafigura F �k x�, essendo k un parametro reale positivo.

8. Disegnare una figura costituita da una sequenza di triangoli equilatericiascuno avente per vertici i punti medi del triangolo nel quale è inscritto.Calcolare la lunghezza complessiva dei tratti costituenti la figura.

9. Disegnare una figura formata da una serie di quadrati concentrici, coas-siali ed equispaziati. Calcolare la lunghezza complessiva dei tratticostituenti la figura.

10. Disegnare una spirale avente lo stesso angolo di rotazione fra i lati edavente i lati le cui misure costituiscono una progressione aritmetica.Calcolare la lunghezza complessiva dei tratti costituenti la figura.

11. Disegnare una �n�k�-stella avente i vertici su n-poligono regolare di latodi lunghezza l, avente i lati costruiti saltando di k vertici sul poligono;per k � 1 si ottiene un poligono regolare. Analizzare per quali valori din e k la stella passa per tutti i vertici del poligono con un solo percorsociclico.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 127: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.7. ESERCIZI 117

12. Disegnare le seguenti figure. Si richiede di usare negli spostamenti dellatartaruga solo numeri naturali o razionali.

������

@@

@@

@@

���

@@@

@@@

��� �

�����

@@@

@@@

13. Disegnare le seguenti figure composte da segmenti che uniscono i verticidi un pentagono regolare. Generalizzare al caso di un poligono di nvertici.

14. Disegnare le seguenti figure composte da raggi equispaziati.

15. Disegnare le seguenti figure composte da raggi che uniscono i vertici diun poligono regolare.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 128: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

118 CAPITOLO 7. DISEGNARE

16. Disegnare la spirale di Teodoro, così chiamata perché tracciata per laprima volta da Teodoro di Cirene (V secolo a.C.). La spirale vienecostruita disegnando un triangolo equilatero isoscele con cateti unitarie utilizzando poi l’ipotenusa dell’ultimo triangolo disegnato come cate-to del successivo, l’altro cateto restando unitario, come mostrato nellafigura che segue.

Figura 7.1: I primi 18 lati della spirale di Teodoro.

17. Disegnare un triangolo di vertici A,B,C.

18. Disegnare un triangolo isoscele di base b ed altezza h.

19. Disegnare un triangolo di lati di lunghezze a, b, c.

20. Usando la tartaruga, determinare la lunghezza di un poligono intrecciatocostituito da una stella a 5 punte congiungente i vertici di un pentagonoregolare di lato 100.

21. Usando la tartaruga calcolare il valore assoluto della differenza (distanza)fra due dati numeri.

22. Usando la tartaruga, dati tre punti A, B, C, determinare l’ampiezzadell’angolo ÅABC.

23. Usando la tartaruga determinare il perimetro di un triangolo avente duelati di lunghezza a e b e l’angolo fra essi compreso di ampiezza α.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 129: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

7.7. ESERCIZI 119

24. Usando la tartaruga come calcolatore, calcolareº

5.

25. Usando la tartaruga come calcolatore, calcolare il valore delle seguentiespressioni, essendo a e b numeri naturali:

(a)ºa

(b) a � bº

2(c) a �

ºb

(d)ºa �

ºb

26. Usando la tartaruga come robot, utilizzando solamente il sensore dist didistanza da un punto, posizionarla

(a) su un dato punto(b) sul punto medio fra due dati punti

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 130: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

120 CAPITOLO 7. DISEGNARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 131: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 8

Operare

I numeri naturali li ha fatti il buon Dio,tutto il resto è opera dell’uomo.L. Kronecker

Sin dai tempi più remoti della storia umana i numeri sono stati utilizzatiper contare. Nel VI sec. a.C. i Greci associarono i numeri alle entità geometri-che, in particolare con l’obiettivo di rendere possibile l’operazione di misurare(lunghezze, aree). Dopo aver elaborato il concetto di numero l’uomo ha ela-borato il concetto di operazione sui numeri. La sollecitazione per raggiungerequesto livello di astrazione è stata data da esigenze di carattere essenzialmentepratico.

Nei secoli il sistema dei numeri è stato arricchito mediante l’introduzio-ne di nuove operazioni, dando avvio allo sviluppo di diversi e sempre piùcompleti sistemi di numeri al fine di rendere possibili sempre più operazioni.Nella matematica e nell’informatica le operazioni costituiscono lo strumentofondamentale per generare nuovi elementi a partire da elementi già disponibili.

121

Page 132: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

122 CAPITOLO 8. OPERARE

8.1 Operazioni sui numeri

Si ritiene che il primo embrione del concetto di operazione sia nato dall’os-servazione che era possibile contare il numero di elementi dell’unione di dueinsiemi sommando i due numeri ottenuti dal conteggio di ciascuno dei dueinsiemi 1. In modo analogo si sono evolute le altre operazioni elementari. Adun certo stadio della sua evoluzione l’uomo conosceva i numeri naturali e di-sponeva delle operazioni elementari di addizione, sottrazione, moltiplicazionee divisione fra numeri naturali e conosceva le proprietà fondamentali di questeoperazioni.

Parallelamente allo sviluppo delle operazioni vennero elaborati, oltre ai nu-meri naturali, altri sistemi numerici, ottenuti come ampliamento di un sistemanumerico preesistente e noto, al fine di poter svolgere in modo più generale leoperazioni. I numeri interi sono stati introdotti per poter eseguire sottrazionidella forma 5 � 7, dove il minuendo è maggiore del sottraendo; i numeri fra-zionari, detti anche razionali, sono stati introdotti per poter dare significatoa divisioni della forma 7 � 3 in cui il dividendo non è un multiplo del diviso-re; i numeri reali per svolgere l’operazione di radice della forma

º2 in cui il

radicando non è un quadrato perfetto; i numeri complessi per poter eseguirel’operazione di radice quadrata in casi come

º�1 in cui compaiono radicandi

negativi.Da un certo punto in poi, databile attorno al XIX secolo, i sistemi numerici

sono stati dapprima studiati in modo teorico e formale e solo successivamentehanno trovato delle reali applicazioni pratiche, come ad esempio i quaternioniche, ideati da Hamilton nell’anno 1843, hanno trovato importanti applicazioninella Fisica del XX secolo e nella grafica tridimensionale per rappresentare lerotazioni nello spazio.

Come il conteggio permette di stabilire una corrispondenza fra il mondoreale degli oggetti ed il mondo astratto dei numeri, permettendo di rappre-sentare, memorizzare dei frammenti di informazione, così l’introduzione delleoperazioni sui numeri ha permesso di agire in modo astratto sui numeri esuccessivamente interpretare il risultato nel mondo reale, come descritto nellafigura 8.1.

Esempio 41. La maestra ha un sacchetto di caramelle da distribuire equamenteai suoi bambini, trattenendo per sè quelle che avanzano perché non consenti-rebbero un’equa ripartizione. La soluzione di questo problema può svolgersicon diverse strategie. Un metodo elementare consiste nel distribuire una ad

1Utilizzando il linguaggio matematico moderno, indicando con SAS il numero di elementidi un generico insieme A, questa osservazione verrebbe scritta nella forma SA8BS � SAS� SBS.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 133: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.2. I NUMERI NATURALI 123'

&

$

%

mondo deglioggetti reali

mondo astrattodei numeri

contare

operare

interpretare

9º3

-

?�

r r rrrrrrr

r r rr r rr r r

Figura 8.1: Schema di corrispondenza fra mondo degli oggetti reali e mondoastratto dei numeri. Il problema descritto è il seguente: Dati degli oggetti,dovendo disporli in un quadrato, determinare il lato del quadrato.

una le caramelle a ciascun bambino, ritirando l’ultima caramella consegnatanel caso non si riesca a completare il giro di distribuzione. In questo modo nonserve neanche contare e tantomeno fare operazioni. Un metodo alternativoconsiste nel contare le caramelle, i bambini e fare un’operazione di divisioneintera, considerando il resto come il numero delle caramelle che avanzano.

8.2 I numeri naturali

Il convincimento di Kronecker, espresso nella citazione riportata all’inizio diquesto capitolo, riflette una situazione di fatto che s’incontra in matemati-ca: i numeri naturali sono degli enti primitivi, i mattoni, mediante i quali siedificano molteplici branche della matematica.

Il concetto di numero naturale è così radicato nell’uomo da risultare ovvioe far correre il rischio di dare delle definizioni e stabilire delle proprietà suinumeri che risultano viziate da una circolarità che le rende inconsistenti. Ilprimo matematico che tentò, con successo, di dare una definizione rigorosa econsistente di numero naturale è stato Giuseppe Peano (1858-1932). Peanoha mostrato che l’intera teoria dei numeri naturali può essere dedotta da treidee primitive (zero, numero, successivo) e da cinque proposizioni fondamen-tali (dette postulati di Peano), in aggiunta a quelle della logica. Seguendol’impostazione di Peano, per economia di pensiero, si definiscono i numeri na-turali in modo assiomatico, ossia si definiscono delle proprietà caratterizzanti,in modo tale da chiamare numeri naturali quegli enti che le soddisfino. Perben comprendere la teoria assiomatica dei numeri naturali (ma il discorso va-le per qualsiasi sistema formale) bisogna guardare ai numeri naturali come a

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 134: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

124 CAPITOLO 8. OPERARE

delle entità mai viste prima; non bisogna accettare alcunché per scontato senon gli assiomi e ciò che da essi è già stato dedotto.

In base al metodo assiomatico di Peano, l’insieme N dei numeri naturaliè definito come un insieme di elementi, di natura qualsiasi, soddisfacenti aiseguenti assiomi:

1. Esiste un numero naturale chiamato zero e denotato con il simbolo 0.

2. Esiste una funzione � � N � N che fa corrispondere ad ogni numeronaturale n un altro numero detto il successivo di n, indicato con n�.

3. Non esiste alcun numero naturale n tale che n� � 0; ossia non esiste alcunnumero naturale che abbia zero come suo successivo.

4. Due numeri naturali m e n sono uguali se e solo se m� � n�, ossia lafunzione � è iniettiva.

5. Se S è un sottoinsieme di N contenente 0 e se S è chiuso rispetto all’o-perazione di successivo allora S � N, ossia: �S b N,0 > S,n > S � n� >S�� �S � N�.

Si può dimostrare che i cinque postulati sopra formulati sono indipendenti.Coerentemente con il significato che attribuiamo ai numeri naturali, per

comodità si conviene di indicare con n la scrittura

0

n apici¬��� �

Ad esempio indicheremo 0 � � � con il simbolo 3.

8.3 Le operazioni sui numeri naturali

La definizione rigorosa delle operazioni sui numeri naturali si fonda sul seguen-te

TEOREMA 5 (Teorema di ricorsione). Sia S un insieme, g � S � S, a > S.Esiste una ed una sola applicazione f � N � S soddisfacente alle seguenticondizioni:

1. f�0� � a, a > S2. f�n�� � g�f�n�� per ogni n > N

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 135: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.3. LE OPERAZIONI SUI NUMERI NATURALI 125

In base al concetto di numero naturale e di successivo, si possono defi-nire, basandosi sul teorema di ricorsione, le quattro operazioni aritmetichefondamentali.

L’operazione di addizione a n di un numero naturale k viene definitaprendendo, nel teorema di ricorsione, a � k e per g l’applicazione n � n�

di successivo; pertanto si definisce

0 � k � k

n� � k � �n � k��Una volta introdotta la definizione di addizione, si può scrivere n � 1 al postodi n�, intendendo per definizione 0 � � 1.

Una volta definita l’operazione di addizione, l’operazione di moltiplicazio-ne di n per un numero naturale k viene definita prendendo, nel teorema diricorsione, a � 0 e per g l’applicazione n� n � k; pertanto si definisce

0 � k � 0n � � k � �n � k� � k

Le operazioni sopra descritte soddisfano a molte proprietà; le più frequen-temente utilizzate sono riportate nella lista che segue.

PROPRIETÀ 2. Siano a, b, c generici numeri naturali; valgono le seguentiproprietà:

1. �a � b� � c � a � �b � c� associatività dell’addizione2. a � b � b � a commutatività dell’addizione3. �a � b� � c � a � �b � c� associatività della moltiplicazione4. a � b � b � a commutatività della moltiplicazione5. a � �b � c� � �a � b� � �a � c� distributività6. �a � c � b � c�� a � b cancellazione dell’addizione7. �a � c � b � c, c x 0�� a � b cancellazione della moltiplicazione

Osservazione. In informatica e nei linguaggi di programmazione bisognatenere presente che queste proprietà possono non valere sempre, in quanto alposto dei numeri naturali si considerano dei numeri appartenenti ad un’imple-mentazione dei numeri naturali costituita da un sottoinsieme proprio e finitodei numeri naturali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 136: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

126 CAPITOLO 8. OPERARE

Sull’insieme dei numeri naturali è definito l’usuale criterio d’ordine di mi-nore uguale fra numeri, denotato con il simbolo B. Di conseguenza rimangonodefiniti gli altri operatori di confronto @, �, A, C, x, con gli usuali significati. Ilrisultato di un’operazione coinvolgente un operatore di confronto è un valorelogico, vero o falso.

La seguente importante proprietà sta a fondamento dell’operazione di di-visione sui numeri naturali.

PROPRIETÀ 3. Dati due numeri naturali a e b, con b x 0, esistono esono unici due numeri naturali q e r, detti rispettivamente quoziente e resto,soddisfacenti alle seguenti due condizioni:

Q1 � a � b q � r

Q2 � r @ b

Tale proprietà può essere dimostrata basandosi solamente sugli assiomi chedefiniscono i numeri naturali.

Le operazioni di sottrazione e divisione costituiscono le operazioni inver-se, rispettivamente, dell’addizione e della moltiplicazione. Generalmente, inmatematica, la sottrazione e la divisione fra numeri naturali sono operazioniparziali: la sottrazione n � k è definita per n C k e la divisione n~k è definitaper k x 0. In informatica risulta comodo estendere queste due operazioniin modo da renderle totali, ossia definite per qualsiasi valore del dominio; aquesto scopo si definisce

n � k � � h se esiste h > N tale che n � h � k0 se non esiste alcun h > N tale che n � h � k

n ~ k � � � se k � 0massimo q > N tale che q � k B n

dove con � si è denotato il valore nullo.

Esempi: 5 � 3 � 2, 4 � 6 � 0, 8~2 � 4 , 9~4 � 2, 7~0 � �.

Assieme all’operazione di divisione è spesso utilizzata l’operazione di restodella divisione intera fra due numeri naturali; quest’operazione viene denotatamediante l’operatore % utilizzato in notazione infissa 2 . Ad esempio: 9%4 � 1.

2In alcuni linguaggi di programmazione l’operatore di divisione intera e l’operatore diresto della divisione intera vengono denotati con le parole div e mod; ad esempio 9 div 4 � 2e 9 mod 4 � 1.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 137: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.4. ALTRI TIPI DI NUMERI 127

DEFINIZIONE 2. Si dice che un numero naturale a è un multiplo di unnumero naturale b se esiste un numero naturale q tale che a � b q (tale q saràunico, in base alla proprietà precedente). Equivalentemente si dice ancheche b divide a o che b è un divisore di a. Per esprimere ciò si usa anche lanotazione aSb. Dati due numeri naturali a e b si dice che il numero naturalem è il loro massimo comune divisore se dSa e dSb ed inoltre se nSa e nSb alloranSm.

Si può dimostrare che il massimo comune divisore fra due numeri naturalia e b esiste sempre ed è unico. Viene solitamente denotato con mcd�a, b�. Siconviene di porre mcd�0,0� � 0.

Particolarmente importanti e frequenti sono le funzioni aventi come do-minio i numeri naturali, a tal punto che a questa classe di funzioni è statariservata una specifica denominazione. Sia A un generico insieme. Unafunzione s � N � A viene detta successione. Per le successioni viene spessousata una particolare notazione per indicare l’immagine di un dato elementodel dominio: indicando con a un generico elemento di A, con an si denotal’immagine del numero naturale n.

8.4 Altri tipi di numeriNel corso della storia l’uomo ha ideato molti sistemi di numeri, generalmen-te ampliando i sistemi costruiti ed utilizzati precedentemente. Tale evo-luzione è stata quasi sempre sollecitata dall’esigenza di poter svolgere sen-za vincoli le operazioni. Ad esempio, il sistema dei numeri interi, Z ��. . . ,� 2,� 1,0,1,2, . . .� è stato introdotto per poter eseguire la differenza fradue numeri naturali anche quando il minuendo è minore del sottraendo; il si-stema dei numeri razionali Q costituito dalle usuali frazioni numeriche è statointrodotto per poter eseguire la divisione fra due numeri naturali anche quandoil dividendo non è un multiplo intero del divisore; il sistema R dei numeri realiè stato introdotto per poter trattare con numeri che non sono esprimibili sottoforma di frazione; il sistema dei numeri complessi C è stato originariamenteintrodotto per poter eseguire l’operazione di estrazione di radice quadrata dinumeri negativi; come generalizzazione dei numeri complessi nel XIX secolo,senza che ci fossero particolari esigenze di ordine pratico, è stato costruitoil sistema numerico dei quaternioni, ad opera di Hamilton; successivamentequesto sistema numerico ha trovato importanti applicazioni in fisica.

In molti casi, in matematica, si incontrano delle affermazioni quali Lalunghezza della diagonale di un quadrato di lato unitario è uguale a

º2; in

questo caso la scritturaº

2 denota quel numero che moltiplicato per se stesso

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 138: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

128 CAPITOLO 8. OPERARE

dà 2 come risultato. La scoperta che quel numero, pur non conoscendolo (ossianon sapendo come esprimerlo mediante delle altre conoscenze considerate note,i numeri naturali) non è esprimibile come frazione, fu un trauma devastanteper la cultura greca del IV secolo a.C., al pari della rivoluzione copernicana inambito astronomico. Un analogo discorso vale per il numero π che denota ilrapporto fra la lunghezza di una circonferenza e del suo diametro.

I numeri comeº

2 e π ci si accontenta di scriverli in modo simbolico; i calco-latori tradizionali risultano però impotenti nell’eseguire operazioni su numericome questi in quanto essi non non sono rappresentabili in modo digitale nel-la memoria dei calcolatori. Per queste categorie di numeri si adottano dellestrategie diverse: vengono elaborati simbolicamente. Ad esempio, mediantele tradizionali forme di elaborazione simbolica dell’algebra, si possono eseguiredelle trasformazioni come le seguenti:

�º2 � 1��º2 � 1�� �º2�2 �º

2 �º

2 � 1� 2 � 1� 1

sin�π4�� 1º

2�

º2

2In alternativa a queste forme di elaborazione simbolica i numero reali pos-

sono essere elaborati rappresentandoli in modo approssimato, come avvienesolitamente in varie forme di elaborazione.

8.5 I valori logici

I primi studi riguardanti la logica si possono attribuire ad Aristotele, anche sela parte da lui trattata si riferisce principalmente all’analisi di alcune regoledi ragionamento che vengono sinteticamente, anche se in modo semplicistico,prototipizzate nel celebre sillogismo “Tutti gli uomini sono mortali, Socrate èun uomo, quindi Socrate è mortale”. Gli studi sulla logica vennero successi-vamente approfonditi fino alla fine del 1700 quando, con il filosofo ImmanuelKant, sembrava che si fosse pervenuti ad un corpo di conoscenze ormai defini-tivo. Si ebbe una svolta decisa verso la metà del 1800 quando il matematicoinglese George Boole (1815-1864), un autodidatta di modeste origini, ebbe labrillante idea di denotare con dei nomi e con dei simboli le proposizioni e leloro connessioni logiche, sviluppando un sistema algebrico funzionale e produt-tivo. Tale sistema venne descritto nel famoso lavoro di Boole An investigationon the laws of thougth del 1854. L’intendimento di Boole era di sviluppareuna sorta di algebra della logica. Il sistema da lui ideato e sviluppato vennein seguito denominato, in suo onore, algebra di Boole. Successivamente il

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 139: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.5. I VALORI LOGICI 129

formalismo ed alcune impostazioni di Boole vennero modificate, integrate eperfezionate da parte di vari logici che seguirono, anche se l’impianto base,fondato sulle idee originali di Boole, venne mantenuto.

Dal nome di Boole, con B si denota l’insieme dei valori logici compostoda due soli elementi, convenzionalmente denominati FALSE (falso) e TRUE(vero). Sull’insieme B sono definiti gli operatori logici , (and), - (or), (not)il cui significato è descritto mediante la tavola di verità riportata nella tabella8.1.

p q p , q p - q p

FALSE FALSE FALSE FALSE TRUEFALSE TRUE FALSE TRUE TRUETRUE FALSE FALSE TRUE FALSETRUE TRUE TRUE TRUE FALSE

Tabella 8.1: Tavola di verità degli operatori logici fondamentali.

Gli operatori di implicazione logica (�) ed equivalenza logica (�) non sonogeneralmente predisposti all’interno degli usuali linguaggi di programmazione.Possono comunque essere definiti mediante gli operatori logici fondamentalicome segue:

p� q equivale a � p� - qp � q equivale a �p� q� , �q� p�

Per gli operatori logici di implicazione logica ed equivalenza logica, oltre al-la possibilità di scriverli in termini degli operatori logici di base come sopra de-scritto, viene offerta la seguente elegante alternativa: l’insieme dei valori logiciviene dotato di una struttura di ordine stretto, assumendo FALSE @ TRUE;in tale modo gli operatori di implicazione ed equivalenza logica possono essereespressi come segue:

p� q equivale a p B q

p � q equivale a p � q

Per convincersene basta semplicemente predisporre la tavola di verità delleoperazioni p B q e p � q.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 140: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

130 CAPITOLO 8. OPERARE

8.6 Operazioni

Un’operazione (binaria) è una legge della forma A�A� B che fa corrispon-dere ad una coppia di elementi �x1, x2� di un insieme A un elemento y di uninsieme B. Nel caso in cui sia A � B, l’operazione si dice interna, altrimenti sidice esterna. Un’operazione viene solitamente denotata mediante un simbolo.In generale un’operazione viene denotata con x1 X x2 (notazione infissa); ilsegno X che denota la funzione viene detto operatore e gli elementi x1 ed x2vengono detti operandi.Esempio 42. Le operazioni di addizione, moltiplicazione, sottrazione e divisionefra numeri naturali sono operazioni interne denotate mediante i tradizionalioperatori �,�,�, ~.Esempio 43. Nel piano, a due generici punti si può associare il loro punto medioo anche la loro distanza; nel primo caso si tratta di un’operazione interna, nelsecondo di un’operazione esterna.

8.7 Precedenza ed associatività

Nella valutazione di un’espressione in cui compaiono più operatori è necessarioconsiderare la precedenza di applicazione degli operatori, ossia l’ordine con ilquale sono applicati gli operatori; vengono valutati per primi gli operatoricon la più alta precedenza. La precedenza di valutazione degli operatori puòessere cambiata usando le parentesi.Esempio 44. Per le operazioni aritmetiche è stabilito che gli operatori molti-plicativi (� e ~) hanno priorità più alta rispetto agli operatori addittivi (� e�). L’espressione 2 � 3 � 4 viene intesa come 2 � �3 � 4� in quanto l’operatore� di moltiplicazione ha precedenza sull’operatore � di addizione. Nel caso sivoglia che l’operatore � venga applicato prima dell’operatore � è necessarioscrivere esplicitamente le parentesi.

Un’operazione binaria X � A2� B dicesi

commutativa se x X y � y X x per ogni x, y > A

associativa se x X �y X z� � �x X y� X z per ogni x, y, z > A

L’associatività determina l’ordine di applicazione degli operatori nel casoin cui gli operatori abbiano la stessa precedenza. Gli operatori con associati-vità a sinistra vengono valutati da sinistra a destra mentre gli operatori conassociatività a destra vengono valutati da destra a sinistra. Nel caso in cui

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 141: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.8. TIPOLOGIE DI OPERAZIONI 131

compaia più volte lo stesso operatore ed esso sia commutativo l’associativitàrisulta ininfluente.Esempio 45. L’espressione 2�3�4 viene valutata come fosse scritto �2�3��4in quanto gli operatori � e � hanno la stessa precedenza e sono associativi asinistra. L’operazione di esponenziazione, generalmente denotata con l’ope-ratore ˆ, è associativa a destra; quindi l’espressione 4ˆ3ˆ2 viene valutata come4ˆ�3ˆ2�.8.8 Tipologie di operazioniLe operazioni vengono solitamente classificate in base al tipo degli argomenti,in base al tipo dei risultati ed alla funzione espletata.

Le operazioni aritmetiche corrispondono alle usuali quattro operazioni�, �, �, ~ sui numeri (addizione, sottrazione, moltiplicazione e divisione).

Le operazioni logiche , (and), - (or) e (not) sono caratterizzatedall’avere ingressi ed uscite costituiti da valori logici vero e falso.

Le operazioni relazionali, dette anche comparatori, eseguono dei con-fronti su valori appartenenti ad insiemi (numeri, stringhe, ...) sui quali siastabilita una relazione di uguaglianza. Vengono denotate mediante i tradizio-nali operatori � e x. Se su un insieme è definita anche una relazione d’ordine,allora si possono usare anche gli operatori @,A,B,C. Il risultato di questeoperazioni è sempre un valore logico.

8.9 FunzioniIl particolare status di privilegio delle operazioni binarie è motivato dal fattoche esse sono le più frequenti e per il fatto che su di esse si sviluppa la teoriaalgebrica dei gruppi e degli anelli. In informatica si presenta spesso l’esigenzadi estendere questa meccanismo, ammettendo che un’operazione possa agiresu un numero di operandi diverso da 2, come precisato nella definizione chesegue.

Una funzione è una legge della forma A1 � A2 � � � An � B che aduna lista di n elementi �x1, x2, . . . , xn�, con xi > Ai, associa un elemento y diB. Gli elementi x1, x2,�, xn vengono detti argomenti. Una funzione vienesolitamente denotata mediante un identificatore, nella forma f�x1, x2, . . . , xn�,detta notazione funzionale.Esempio 46. La radice quadrata di un numero x è una funzione che associaad un generico numero x la sua radice quadrata, denotata con la tradizionalescrittura

ºx oppure, in notazione funzionale, con sqrt(x).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 142: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

132 CAPITOLO 8. OPERARE

Esempio 47. Le costruzioni geometriche con riga e compasso possono esse-re realizzate mediante delle funzioni coinvolgenti le entità geometriche (pun-ti, segmenti, rette, circonferenze, . . . ). Queste operazioni vengono spessoespresse in notazione funzionale.

Il numero n degli argomenti di una funzione viene detto arietà. Peruniformità i valori (numeri o altro) vengono considerati come operandi diarietà 0. Anche nei casi di arietà diversa da 2, una funzione viene talvoltachiamata ancora operazione.

Le operazioni possono essere classificate in base alla loro arietà; i casi piùfrequenti ed interessanti sono i seguenti:

n � 0 l’operazione dicesi nullaria ed il risultato è una costante di B;l’operazione viene indicata mediante la costante stessa;ad esempio, 123, �4,1936.27, TRUE, ”stringa”

n � 1 l’operazione dicesi unaria in quanto ha un solo argomento;ad esempio, �23, FALSE, 7!,

º4, S�8S

n � 2 l’operazione dicesi binaria in quanto opera su due argomenti;ad esempio, 7 � 3, 4 @ 2, FALSE - TRUE

n � 3 l’operazione dicesi ternaria in quanto opera su tre argomenti;ad esempio, min�x, y, z�

8.10 Operazione condizionale ifL’operazione condizionale if è un’operazione ternaria che serve per selezio-nare una fra due alternative x ed y in base al valore di verità di una condizionec. Viene scritta con la notazione funzionale

if�c, x, y�ed ha il seguente significato: se la condizione c è vera allora il risultato è x,altrimenti il risultato è y.Esempio 48. Il risultato dell’operazione if �1 � 2,3,4� è 4 in quanto la condi-zione 1 � 2 è falsa.Esempio 49. Valore assoluto di un numero reale x:

if�x C 0, x,�x�Esempio 50. Minimo fra due valori x ed y:

if�x @ y, x, y�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 143: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

8.11. ESERCIZI 133

Esempio 51. Distanza fra due numeri x ed y:

if�x @ y, y � x,x � y�Esempio 52. Minimo fra tre valori x, y e z:

if�x @ y, if�x @ z, x, z�, if�y @ z, y, z��Esempio 53. L’operatore condizionale if permette di esprimere li operatorilogici and, or e not come segue:

p , q equivale a if�p, q,FALSE�p - q equivale a if�p, TRUE, q� p equivale a if�p,FALSE,TRUE�

8.11 Esercizi1. Per ogni coppia di postulati scelta fra i postulati di Peano, trovare un

insieme A con un elemento 0 ed un’operazione unaria � che soddisfi a talidue assiomi ma non al terzo.

2. Dimostrare che l’assioma di induzione è equivalente al seguente principio:Ogni sottoinsieme non vuoto di N ha un elemento minimo.

3. Discutere i diversi significati delle seguenti scritture:5 � � 6 � 6 � 1 7

4. Scrivere la tavola di verità degli operatori di implicazione logica edequivalenza logica.

5. Utilizzando gli operatori logici fondamentali, scrivere un’espressione boo-leana equivalente all’operatore di or esclusivo fra due dati valori booleanip e q.

6. Scrivere la tavola di verità degli operatori logici and e or nella logicaa tre valori avente come supporto di dominio e codominio il seguenteinsieme: �Ù, FALSE,TRUE�.

7. Scrivere la tavola di verità della seguente espressione booleana, essendop e q due valori booleani:

�p , q� - � �p - q��L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 144: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

134 CAPITOLO 8. OPERARE

8. Sia p una variabile logica. Decidere se la seguente espressione è unatautologia. ��p @ p� @ p� � p

9. Siano p, q, r valori booleani. Dimostrare l’associatività dell’operatore diuguaglianza, ossia

��p � q� � r� � �p � �q � r��10. Si consideri il predicato P �x� � �x A 0, x > R�. Dimostrare che

P �xy� � �P �x� � P �y��Riconoscere, sotto al formalismo, la nota regola dei segni della moltipli-cazione.

11. Adottando le usuali convenzioni sulle priorità delle operazioni aritmeti-che, descrivere mediante un albero la seguente espressione:

a � b � c � d ~ e � f � g12. Usando l’operazione condizionale if , determinare

(a) massimo fra due numeri x ec y(b) minimo fra tre numeri x, y, z(c) mediano fra tre numeri x, y, z(d) somma dei due più grandi fra tre numeri x, y, z

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 145: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 9

Denotare

Irritato da questa confusione, cercai diorientarmi ricorrendo a uno degli strata-gemmi prediletti dai filosofi: cominciai adassegnare un nome alle cose.D. C. Dennet, Brainstorm

La nascita della cultura può essere fatta partire nel momento in cui l’uomoha iniziato a descrivere i fatti, le conoscenze e le emozioni, sulle pareti dellecaverne, mediante disegni, grafiti ed incisioni. Similmente, nello sviluppocognitivo di un bambino un passo significativo è rappresentato dal momentoin cui il bambino inizia a chiamare per nome le persone e le cose che gli stannointorno.

135

Page 146: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

136 CAPITOLO 9. DENOTARE

9.1 Segno, significato e veritàIl rapporto fra segno, significato e verità costituisce una delle problematichecruciali dell’epistemologia e della filosofia ed ha avuto una particolare riconsi-derazione ed analisi in connessione all’elaborazione mediante computer. Di-stinguiamo, mediante un esempio, tre distinti livelli di analisi, corrispondenticiascuno ai tre diversi concetti sopra elencati; consideriamo la scrittura

2+2=5

Al livello dei segni, quanto scritto nella riga precedente può essere analizzatoe portare a delle affermazioni come le seguenti:

1. La stringa è composta da 5 caratteri (si noti che il 5 che qui viene uti-lizzato rappresenta un numero e costituisce qualcosa di completamentediverso dal segno 5 che compare nella stringa).

2. Nella stringa compare il carattere + (sarebbe sbagliato, in questo conte-sto, chiamare tale segno con il termine (operatore di) addizione).

3. Il segno 2 compare 2 volte (si noti qui l’artificio tipografico di utilizzarefont diversi per differenziare i diversi piani descrittivi).

Indagando il significato, ossia interpretando i segni, la stringa può portarea delle affermazioni della forma:

1. La frase esprime il confronto fra due espressioni numeriche.

2. Nella frase compare un’operazione di addizione fra due numeri.

3. Il numero 2 compare 2 volte.

4. I due 2 che compaiono nell’affermazione precedente hanno significatidiversi.

5. Le stringhe due e 2 riportate nella frase precedente hanno due diversisignificati.

Un’analisi più approfondita, che ci richiede uno sforzo di elaborazione, cifa concludere che La frase è falsa.

In questo particolare esempio il livello di indagine relativo al significato edil livello relativo all’indagine di verità, essendo entrambi immediati, si confon-dono; in realtà si tratta di due livelli ben distinti, come si può intuire dallaseguente frase (scritta nell’usuale linguaggio matematico):

§a, b, c, n > N, n A 2 � an � bn� cn

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 147: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.2. LA CODIFICA DEI NUMERI 137

Si tratta del famoso Ultimo teorema di Fermat. In questo caso un calcolodiretto non porterebbe ad alcuna conclusione; fidandoci di quello che ha scrittoWiles nel 1994, possiamo dire che la frase è falsa.

La distinzione fra segno e significato richiede, sul piano descrittivo, unacorrispondente distinzione fra il piano degli oggetti descritti ed il piano del testoche descrive gli oggetti ed il loro significato. A livello tipografico la distinzionefra questi due piani può essere fatta racchiudendo fra apici la stringa denotata,come ad esempio nella seguente scrittura:

”tre” è una stringa composta da tre caratteri.

Tipograficamente si può ricorrere all’uso di font diversi, come nella scritturache segue:

110100 è la codifica del numero 100 in base 2.

Adottando questa convenzione, con x+3 denoteremo una stringa di 3 caratteri,mentre con x � 3 si denoteremo un binomio.

Osservazione. Certe volte si è indotti a lavorare sui segni, guidati so-lamente dalle regole formali, disinteressandosi del significato che sta sotto aisegni, confidando che le elaborazioni formali portino a conclusioni sensate. Fuproprio con questa fiducia in animo che gli algebristi del XVI secolo iniziaronoa lavorare su degli strani segni della forma

º�a, con a numero reale positivo,

sostituendo scritture della forma �º�a�2 con i a. I loro tentativi sono staticoronati da successo dando vita ai numeri complessi, un sistema funzionalee produttivo che ha trovato molteplici applicazioni in settori all’apparenzalontani, dalla matematica alla fisica ed all’elettrotecnica.

9.2 La codifica dei numeriUna volta stabilito il meccanismo di conteggio mediante una corrispondenzabiunivoca del tipo "tante tacche - altrettante pecore", subentra un problema diordine pratico: diventa difficile rappresentare una quantità elevata di pecore.La soluzione che è stata adottata consiste nel assegnare significati diversi aisimboli che vengono utilizzati; ad esempio, come fecero i romani oltre duemilaanni fa, il simbolo I per denotare una pecora, il simbolo X per denotare diecipecore, il simbolo C per denotare cento pecore e similmente per le altre cifreromane V, L, D ed M.

Agli inizi del secondo millenio iniziarono a diffondersi in Europa, attraversodelle traduzioni in latino, molte opere arabe; fra queste ebbe particolare suc-cesso l’opera del matematico ed astronomo arabo al-Khuwarizmi. L’italiano

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 148: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

138 CAPITOLO 9. DENOTARE

Leonardo Pisano (Pisa, 1175 - Pisa, 1235), più noto con il nome di Fibonacci,ebbe modo di accedere a una traduzione in latino dell’opera di al-Khuwarizmie, nel suo Liber abaci, presentò e discusse problemi e metodi algebrici dellacultura araba, e, in particolare, si fece sostenitore dell’uso delle cifre indo-arabiche. L’abbandono del vecchio sistema numerico romano avvenne peròmolto lentamente. Nel Medioevo il sistema di numerazione posizionale in base10 conobbe forti ostilità tra i tradizionalisti, estimatori dell’abaco, i cosiddet-ti abacisti che calcolavano con l’abaco; a questi si contrapposero gli algoristiche calcolavano usando le nuove cifre arabe. Per molti secoli vi fu una fortecompetizione tra abacisti e algoristi rappresentata nella figura 9.2. Il confron-to si concluse solo nel Cinquecento con la vittoria degli algoristi: superate lediffidenze nei confronti dei nuovi numeri, lo zero e il sistema di numerazioneindo-arabico diventarono popolari anche al di fuori degli ambienti matematici.

Figura 9.1: Nella illustrazione, tratta dall’ope-ra enciclopedica Margarita Philosophica, un li-bro tedesco di introduzione all’aritmetica scrit-to da Gregor Reisch nel 1503, è rappresentatala contrapposizione fra i due modi di calcolareentrambi ancora usati in quel periodo. L’Arit-metica, una donna in piedi, ha tra le mani duelibri per i due diversi sistemi di calcolo; a de-stra Pitagora che utilizza il tavolo con i gettonimentre a sinistra Boezio utilizza le cifre arabeper i suoi calcoli scritti.

9.3 Sistemi di numerazione

I metodi usati per la rappresentazione dei numeri sono passati attraverso variefasi durante le quali i simboli usati ed il metodo di rappresentazione simbolicasono cambiati.

Le forme più primitive sono iconiche in quanto rimandano ad un’immagineo ad un oggetto. Alcune fra queste sono:

• costituire un insieme di cardinalità pari al numero che si vuole rappre-sentare, utilizzando piccoli oggetti concreti (sassolini, conchiglie, semi,. . . )

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 149: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.4. TIPOLOGIE DEI VALORI 139

• intagliare in un oggetto (osso, legno) un numero di segni pari alla quan-tità che si vuole rappresentare

• utilizzare parti del proprio corpo (ad esempio le dita delle mani)

Contrapposte alle rappresentazioni iconiche ci sono quelle simboliche ba-sate su un sistema di segni più o meno astratti. Il sistema di questo tipopiù semplice ed intuitivo è il sistema unario che si basa sull’uso di un unicosimbolo, per denotare l’unità e, con la ripetizione di questo segno, ogni altronumero.

A partire dal sistema unario si sono sviluppati numerosi altri tipi di rappre-sentazione simbolica. Fra questi si distinguono due grandi famiglie: i sistemiadditivi e i sistemi posizionali.

• nei sistemi additivi, ogni numero viene indicato accostando una serie dicifre fino a quando la somma dei numeri corrispondenti alle diverse cifrepari al numero che si vuole rappresentare; ad esempio il numero ventitreviene denotato con la sequenza di simboli XXIII, corrispondentementeall’identità

10 � 10 � 1 � 1 � 1 � 23

• nei sistemi posizionali, la posizione delle diverse cifre nel numero è fon-damentale. Viene scelta una base e vengono definite una serie di cifreche indicano tutti i numeri naturali più piccoli della base, compreso lozero. Tutti gli altri numeri vengono espressi in funzione di potenze dellabase. Ad esempio, il numero ventitre viene denotato con la sequenza disimboli 23, corrispondentemente all’identità

2 � 10 � 3 � 1 � 23

Nella pratica sono frequentemente utilizzati il sistema binario ed il si-stema decimale.

9.4 Tipologie dei valoriNella sua evoluzione l’uomo ha utilizzato inizialmente i numeri naturali e suc-cessivamente, sollecitato dalla necessità di fare operazioni più avanzate, haideato, in un periodo di svariati secoli, i numeri frazionari, i numeri reali, inumeri interi, i numeri complessi ed altri ancora. Nel XIX secolo, accanto ainumeri, fecero capolino ad opera di George Boole, nel contesto di un’algebraben definita, i valori logici falso e vero, tradizionalmente denotati con FALSE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 150: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

140 CAPITOLO 9. DENOTARE

e TRUE. Successivamente, specialmente in ambito informatico, si iniziò adutilizzare caratteri, stringhe, testi con la disinvoltura dei valori numeri e perqueste nuove tipologie di valori si definirono delle specifiche operazioni.Esempio 54. Nei linguaggi di programmazione di tipo visuale il tipo dei valoriviene evidenziato in modo grafico con una particolare tipologia di forma (even-tualmente colorata) contenente il dato valore. Nei linguaggi Scratch e Snap!i valori booleani vero e falso vengono rappresentati mediante un esagono, inumeri in ovalie le stringhe in rettangoli, come esemplificato nella figura 9.2.

����3.141592 TRUE��

@@

@@

��ciao

Figura 9.2: Rappresentazione dei valori logici, numerici e testo nei linguaggiScratch e Snap!.

9.5 Denotazione degli oggetti

Nello sviluppo del pensiero scientifico un decisivo passo di avanzamento è con-sistito, con un importante atto di astrazione, nel denotare gli oggetti (numeri,entità geometriche, . . . ) mediante dei nomi simbolici. Ciò ha costituito la basesulla quale si è sviluppata l’algebra. Questo artificio è di fondamentale impor-tanza anche in informatica dove, per denotare i valori e gli oggetti, vengonoutilizzati dei nomi costituiti da sequenze di caratteri, detti identificatori.

Per indicare il fatto che un identificatore è associato con un determinatovalore, si usa scrivere �identificatore, valore�mentre per indicare che un identificatore è indefinito, ossia che non è associatoad alcun valore, si usa scrivere

�identificatore,Ù�A seconda che l’associazione fra identificatore ed oggetto sia statica (non

ridefinibile) o dinamica (ridefinibile) il simbolo che denota il valore è dettorispettivamente costante o variabile. In molti linguaggi di programmazioneviene adottata la convenzione che gli identificatori delle costanti siano compostida caratteri maiuscoli mentre gli identificatori delle variabili inizino con unalettera minuscola.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 151: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.6. VARIABILI E RIFERIMENTI 141

Esempio 55. Negli usuali linguaggi di programmazione gli identificatori vengo-no costruiti rispettando le seguenti regole sintattiche: il primo carattere deveessere alfabetico (a,...,z,A,...,Z), i caratteri successivi al primo possono esserealfabetici, numerici (0,...,9) oppure alcuni caratteri speciali (_). Ad esem-pio sono corretti i seguenti identificatori: altezza_triangolo, numeroPrimo,x1, prodotto mentre non lo sono i seguenti: questo_nome_non_e’_corretto,neanche questo, 2a, 1720bis, a7/b.

9.6 Variabili e riferimentiDiversamente da quanto avviene in matematica, nel contesto informatico e,in particolare, nella programmazione a paradigma imperativo risulta coerentee comodo considerare una variabile come un contenitore, localizzato in unazona di memoria interna al calcolatore, contenente un valore che può esseremodificato durante le varie fasi di elaborazione. Per poter essere manipolatele variabili vengono denotate mediante un identificatore. Per questo è invalsala significativa abitudine di descrivere l’associazione fra un identificatore ed unvalore mediante un contenitore avente il nome dell’identificatore e contenenteil valore ad esso associato, come illustrato nella figura 9.3.

id

val��

��

��

Figura 9.3: Denotazione del valore val mediante l’identificatore id.

Nel caso in cui il valore sia costituito da un oggetto (generalmente compostoda valori elementari) il meccanismo di denotazione, detto referenziazione, èrealizzato mediante l’uso di uno o più identificatori, detti riferimenti, chereferenziano l’oggetto, come descritto nella figura 9.4.

����oggetto

id1 id2

- �

Figura 9.4: Denotazione di un oggetto mediante due riferimenti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 152: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

142 CAPITOLO 9. DENOTARE

Esempio 56. In alcuni linguaggi visuali (Scratch e Snap!) per descrivere l’as-sociazione fra un identificatore id ed un valore val si usa la notazione riportatanella figura 9.5. �

���id val

Figura 9.5: Rappresentazione grafica dell’associazione fra l’identificatore id edil valore val.

9.7 Notazioni delle operazioni

Le operazioni vengono denotate con vari formalismi, di tipo testuale e di tipografico. Per talune notazioni è necessario ricorrere a delle parentesi tondeper precisare gli argomenti sui quali opera ciascun operatore e per imporrela corretta priorità di valutazione. A seguire sono descritte alcune fra lenotazioni più frequentemente utilizzate.

9.7.1 Notazioni testuali

Nelle notazioni testuali le operazioni vengono denotate mediante un simbolooppure mediante un nome identificativo.

Nel caso in cui l’operazione coinvolga due operandi, viene frequentementeutilizzata la notazione infissa in cui il segno di operazione viene scritto frai due operandi su cui si esercita l’operazione. Indicando con X un genericooperatore e con a e b due operandi l’operazione si esprime nella forma

a X b

La notazione polacca inversa (RPN, Reverse Polish Notation) deve ilsuo nome al matematico e filosofo Jan Lukasiewicz che la utilizzò per la primavolta intorno all’anno 1920 per descrivere il calcolo proposizionale. Sebbenenon sia più utilizzata nell’ambito della logica, la notazione ha con il tempoacquisito una importanza in informatica, per denotare le espressioni matema-tiche. In questa notazione gli operatori vengono scritti dopo gli operandi suiquali agiscono:

a b X

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 153: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.7. NOTAZIONI DELLE OPERAZIONI 143

Nella notazione Lisp, caratteristica del linguaggio omonimo, il segno dioperazione X e gli operandi a1 . . . an� vengono inseriti in una lista:

�X a1 . . . an�La notazione funzionale, che deriva dalla classica notazione matematica

usata per denotare una funzione, costituisce una delle forme più usate per de-scrivere un’operazione: indicando con op il nome identificativo dell’operazionee con a1, . . . , an gli argomenti dell’operazione, l’operazione viene indicata conla notazione testuale

op �a1, . . . , an�La notazione puntata, tipica della programmazione orientata agli ogget-

ti, è caratterizzata dalla sintassi:

a.op �a1, . . . , an�dove a è l’oggetto sul quale viene riferita l’operazione op ed a1, . . . , an sono gliargomenti dell’operazione.Esempio 57. A seguire è riportata l’addizione fra due generici numeri a ed bnelle diverse notazioni sopra descritte.

a � b notazione algebricaa b � notazione polacca inversa�� a b� notazione Lispadd�a, b� notazione funzionalea.add�b� notazione puntata

Esempio 58. Nella seguente tabella sono indicate alcune notazioni corrispon-denti all’espressione algebrica con operatori binari infissi a � �b � c� � d.� � a � b c d notazione polacca direttaa b c � � d � notazione polacca inversa�� a �� b c� d� notazione Lispadd�add�a,mul�b, c��, d� notazione funzionalea.add�b.mul�c� �.add�d� notazione puntata

Esempio 59. La notazione RPN ha il pregio di evitare l’uso di parentesi e iproblemi e convenzioni legate alla precedenza degli operatori. Ad esempiol’espressione algebrica 7 � �9 � 3�~�8 � 3 � 2� � 5 in notazione RPN si scrive

7 9 3 � 8 3 2 � � ~ � 5 �

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 154: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

144 CAPITOLO 9. DENOTARE

Per migliorare la leggibilità e l’espressività delle scritture, viene talvoltausata una notazione in cui il simbolo di operatore viene suddiviso in più partie distribuito fra gli argomenti (notazione distribuita), come illustrato neicasi riportati nell’esempio che segue.Esempio 60. A seguire sono riportate alcune operazioni in notazione distribui-ta:

SxS operazione unaria di valore assolutoa�3� operazione binaria di accesso agli elementi di un arrayx � y �mod n� operazione ternaria di equivalenza modulo n

9.7.2 Notazioni grafiche

Per descrivere la struttura sintattica di un’espressione viene spesso utilizzatala notazione ad albero, dove nella radice (in alto) viene posto il simbolodell’operazione e nei nodi figli (in basso) vengono indicati gli operandi. Lafigura che segue denota una generica operazione X fra due operandi a e b.

mXma mb

JJJJ

Una notazione alternativa consiste nel rappresentare un’operazione me-diante un blocco avente come ingressi i dati e come uscite i risultati; poiché idati fluiscono attraverso dei fili connessi al blocco, tale notazione viene dettanotazione data-flow. Con questa notazione l’operazione X fra a e b vienedenotata mediante il seguente schema:

Xb

aa X b

In alcuni linguaggi di programmazione visuali (Scratch, Snap!) un’ope-razione viene descritta in modo grafico mediante una notazione a bloc-chi. Con questa notazione l’operazione X fra a e b viene denotata medianteil seguente schema:

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 155: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.7. NOTAZIONI DELLE OPERAZIONI 145'&

$%

����a X

����b

Esempio 61. Adottando le notazioni descritte sopra, l’espressione aritmetica�a � b� c, può essere denotata come descritto nella figura 9.6.

m�m� mc

����

@@@@

ma mb

JJJJ

� �

cb

a �a � b� � c

'

&

$

%#"

!

��� a �

��� b �

��� c

Figura 9.6: Diverse notazioni dell’espressione aritmetica �a � b� c: notazionenotazione ad albero, notazione data-flow, notazione a blocchi.

9.7.3 Notazioni tabellari

Nel caso in cui l’insieme di elementi sui quali si svolge l’operazione abbia unacardinalità finita ed in particolare quando sia costituito da pochi elementi, unformalismo spesso utilizzato per descrivere un’operazione binaria è consiste in

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 156: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

146 CAPITOLO 9. DENOTARE

una tabella bidimensionale in cui gli elementi rappresentano il risultato fral’elemento di testa delle righe e delle colonne.

Esempio 62. La seguente tabella descrive l’operazione di addizione fra i primi5 numeri naturali.

+ 0 1 2 3 40 0 1 2 3 41 1 2 3 4 52 2 3 4 5 63 3 4 5 6 74 4 5 6 7 8

Esempio 63. Un’operazione non binaria viene solitamente descritta medianteuna tabella bidimensionale composta da tante colonne quanti sono complessi-vamente gli insiemi costituenti il dominio ed il codominio. A seguire è ripor-tato l’esempio relativo all’operazione di minimo e massimo fra alcune terne dinumeri.

a b c min�a, b, c� max�a, b, c�4 1 2 1 43 4 6 3 61 3 1 1 32 4 3 2 47 3 5 3 7

9.8 Dare un nome agli algoritmiCome ogni altra cosa, anche i procedimenti possono essere denotati e richia-mati mediante un nome identificativo. Poiché gli algoritmi sono caratterizzatidai dati di input, nella denotazione si conviene di indicare anche la lista deinomi dei dati, detta lista degli argomenti (o parametri) formali. Al momentodell’uso dell’algoritmo su una specifica istanza di problema, vengono indicati,in corrispondenza della lista degli argomenti formali, la lista degli argomentiattuali che specificano la particolare istanza di problema da risolvere. Dareun nome agli algoritmi risulta fondamentale nell’adozione della metodologiatop-down e bottom-up, specialmente, ma non solo, quando l’algoritmo debba

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 157: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.9. ALBERI DI OPERAZIONI BINARIE 147

essere utilizzato in più punti. Risulta fondamentale anche nella tecnica ricor-siva. Come vantaggio collaterale, dare un nome ad un algoritmo fornisce unmeccanismo sintattico che permette di astrarre come l’algoritmo opera al suointerno.Esempio 64. L’algoritmo per il calcolo del massimo comune divisore fra duenumeri naturali può essere denotato conmcd�m,n�. Quando questo algoritmoviene utilizzato verranno specificati i valori degli argomenti attuali, ad esempiomcd�12,54�.9.9 Alberi di operazioni binarieConsideriamo un’operazione binaria associativa X � �x1, x2� ( y che denotere-mo in modo grafico come descritto nella figura 9.7.

s sc

���

@@@

x1 x2

y

Figura 9.7: Schema di un generico operatore binario che agli ingressi x1, x2associa l’uscita y.

Consideriamo un’espressione composta da più operazioni della forma

x1 X x2 X � � � X xn

La proprietà di associatività permette di costruire alberi equivalenti ma didiversa topologia; queste diverse topologie di alberi presentano efficienze si-gnificativamente diverse nel caso di esecuzione parallela.

In queste ipotesi l’operatore su più operandi x1, x2, . . . , xn può essere de-notato mediante un albero come descritto nella figura 9.8, corrispondente allaseguente scrittura associativa a sinistra:

������x1 X x2� X x3� X x4� X x5� X x6� X x7� X x8

Un albero equivalente può essere ottenuto organizzando gli operandi con unaparentizzazione bilanciata, come descritto nella nella figura 9.9, corrispondentealle scrittura bilanciata:

��x1 X x2� X �x3 X x4�� X ��x5 X x6� X �x7 X x8��L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 158: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

148 CAPITOLO 9. DENOTARE

Gli alberi descritti nelle figure 9.8 e 9.9 sono topologicamente diversi maequivalenti dal punto di vista computazionale. Questi due alberi hanno lastessa efficienza nel caso di esecuzione sequenziale ma manifestano, invece,un’efficienza sostanzialmente diversa nel caso di esecuzione parallela: nell’ipo-tesi che ciascun operatore impieghi un tempo di esecuzione unitario, il primoalbero impiega un tempo pari a n mentre il secondo impiega un tempo pari alog2 n.

s s s s s s s sc cc cc cc

��������������

@@

@@@@

@@

@@@

@@

@@@

@@

@@

@@@

@@@@

@@@

@@@

@@@

@@

@@

@@

@@

@@@

@@@

x1 x2 x3 x4 x5 x6 x7 x8

y

Figura 9.8: Albero di operazioni binarie che agli ingressix1, x2, x3, x4, x5, x6, x7, x8 associa l’uscita y, mediante una valutazionebasata sull’associatività a sinistra.

s s s s s s s sc c c cc cc��@@

��@@

��@@

��@@

����

HHHH

����

HHHH

������

XXXXXX

X

x1 x2 x3 x4 x5 x6 x7 x8

y

Figura 9.9: Albero di operazioni binarie che agli ingressix1, x2, x3, x4, x5, x6, x7, x8 associa l’uscita y, mediante una valutazionebasata su una parentizzazione bilanciata.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 159: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

9.10. ESERCIZI 149

9.10 Esercizi

1. Analizzare, sul piano dei segni, del significato e della verità, le seguentiaffermazioni:

(a) I 2 2 che compaiono in questa affermazione hanno significati diversi.(b) I due 2 che compaiono in questa affermazione hanno significati

diversi.(c) I due due che compaiono in questa affermazione hanno significati

diversi.(d) I 3 2 che compaiono in questa affermazione hanno significati diversi.

2. Completare e correggere la frase riportata nel seguente riquadro in modoche risulti sintatticamente e semanticamente corretta e che risulti vera.

Questa fra è composta da 6 parole.

3. Discutere la seguente scrittura:

10102 � 10

In particolare si analizzi il livello dei segni, dei concetti, dell’interpreta-zione, dei significati, dei valori di verità, delle ambiguità, delle conven-zioni sulle parti sottintese.

4. Analizzare il significato del segno - che compare nelle seguenti scritture:

�4 � 4 � x 7 � 4 74

5. Individuare le operazioni coinvolte nella seguente espressione:»S � 3S!6. Adottando le usuali convenzioni sulle precedenze e sulle associatività,

valutare le seguenti espressioni:

(a) 15 � 7 � 8(b) 7 � 3 � 2(c) 16~8~4

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 160: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

150 CAPITOLO 9. DENOTARE

7. Le seguenti espressioni in notazione funzionale determinano il massimofra tre dati elementi a, b, c. Analizzarle e discuterne le differenze.

max�a, b, c�max�max�a, b�, c�max�a,max�b, c��

8. Descrivere in notazione infissa, RPN e funzionale mediante le operazioniadd, sub, mul, div le seguenti espressioni:

(a) �a � b��a � b�(b) a2 � b2

(c) ax � by � c(d) ax2 � bx � c

9. Usando le seguenti funzioni:

add�x, y� : addizione x � ymul�x, y� : moltiplicazione x � ychs�x� : x cambiato di segnopow�x, y� : potenza xy

scrivere in notazione funzionale la seguente espressione:»�x1 � x2�2 � �y1 � y2�2

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 161: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 10

Esprimere

Un tale scriveva ad un venditore di ani-mali: «mandatemi 1 o 2 gatti». Dopoqualche giorno si vede arrivare una gros-sa gabbia piena di gatti, accompagnata dauna lettera del venditore che diceva: «perora vi mando 58 gatti; la settimana prossi-ma manderò gli altri 44.». Donde è natol’equivoco?G. Peano, Giochi di aritmetica e problemiinteressanti

Nel contesto di un generico linguaggio, esprimere significa scrivere espres-sioni. In un linguaggio naturale, quale ad esempio l’italiano o l’inglese, leespressioni sono costituite da componenti elementari quali nomi, articoli, ag-gettivi, predicati verbali, organizzati secondo specifiche regole grammatica-li; similmente nel linguaggio matematico ed informatico le espressioni sonocostituite da valori, da operatori e da altri elementi quali le parentesi.

Le espressioni costituiscono uno degli oggetti matematici più tipici ed im-portanti ed intervengono in molte questioni tradizionalmente di dominio dellamatematica. Sulle espressioni vengono eseguite operazioni quali: valutazionedi un’espressione, ossia esecuzione dei calcoli indicati ed ottenimento di unvalore come risultato; controllo di equivalenza fra due espressioni, ossia inda-gine se forniscono gli stessi valori; riduzione di un’espressione ad una formaequivalente ma più semplice; e molte altre.

151

Page 162: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

152 CAPITOLO 10. ESPRIMERE

10.1 EspressioniLe espressioni sono composte da due tipologie di elementi: operandi ed ope-ratori. Combinando secondo delle specifiche regole operandi (valori o oggettidenotati mediante un identificatore) ed operatori (in una qualche notazione(infissa, funzionale, . . . )) si ottengono delle espressioni. Per talune di questenotazioni, la struttura delle espressioni può avvalersi dell’uso di parentesi chedescrivono la priorità di esecuzione delle operazioni.

Un’espressione è una scrittura sintatticamente corretta composta da valori,operatori e parentesi. Nel caso estremo più semplice un’espressione può esserecostituita da un solo valore.

Per mantenere il livello della presentazione molto elementare non vengonoqui descritte in modo formale le regole sintattiche per la costruzione delleespressioni ma ci si limita a fornire degli esempi significativi.Esempio 65. A seguire sono riportate delle espressioni; gli identificatori checompaiono in queste espressioni denotano numeri decimali.

a) 327

b) 5 � 12

c) ��45 � 13� � 3 � 8�~2 � 4 � �9 � 3�d) x � y � 3

e) �a � b� @ �a � b�Esempio 66. Le espressioni possono essere descritte in varie notazioni (alge-brica, RPN, funzionale, . . . ) come riportato nelle seguenti scritture, tutte cor-rispondenti alla lunghezza della diagonale di un quadrato di lati di lunghezzaa e b.

a)»x2 � y2 (notazione algebrica)

b) x x � y y � �º (notazione RPN)

c) sqrt�add�sqr�x�, sqr�y��� (notazione funzionale)

10.2 Espressioni e problemiLe espressioni costituiscono un importante meccanismo per descrivere la so-luzione di una ampia classe di problemi. Per questi problemi i dati costitui-scono gli operandi dell’espressione, le capacità dell’esecutore costituiscono glioperatori e l’espressione stessa costituisce la soluzione del problema.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 163: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.2. ESPRESSIONI E PROBLEMI 153

I problemi risolti mediante un’espressione possono essere classificati in basealla forma ed al tipo dell’espressione che costituisce la soluzione.

10.2.1 Problemi aritmetici

Le espressioni che, valutate, forniscono dei numeri permettono di esprimere lasoluzione di molti problemi di tipo computazionale ed algebrico, come descrittonegli esempi che seguono.Esempio 67. La soluzione del problema:

Determinare l’n-esimo numero dispari.

è costituita dall’espressione2 � n � 1

Esempio 68. La soluzione del problema:

Determinare l’area di un trapezio avente le basi di lunghezzaB e b e l’altezza h.

è data dalla nota espressione

�B � b� � h2

10.2.2 Problemi decisionali

Le espressioni che, valutate, forniscono dei valori logici si prestano a descriverela soluzione di molti problemi di tipo decisionale. Gli esempi che seguonoillustrano alcuni casi interessanti.Esempio 69. Consideriamo il seguente problema:

Decidere se un dato un numero naturale di 3 cifre, consideratoin base 10, è palindromo, ossia se si legge indifferentemente dasinistra a destra e da destra a sinistra. Ad esempio il numero373 è palindromo.

Un numero di tre cifre è palindromo se la cifra delle centinaia è ugualealla cifra delle unità. Pertanto, indicando con n il numero dato, esso risultapalindromo se e solo se �n~100� � �n%10�Questa espressione costituisce la soluzione del problema.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 164: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

154 CAPITOLO 10. ESPRIMERE

Esempio 70. La soluzione del seguente problema:

Stabilire se 3 dati numeri x, y, z sono in ordine crescente.

è data dall’espressione �x B y� , �y B z�Esempio 71. Consideriamo il seguente problema:

Decidere se un dato anno è bisestile (un anno è bisestile se èdivisibile per 4 ma non per 100, oppure è divisibile per 400; adesempio sono bisestili gli anni 1996, 2000, 2004, mentre non losono gli anni 1900, 2010, 2100).

Indicando con a l’anno che costituisce il dato del problema, l’espressione cheesprime la condizione di essere bisestile si scrive:

���a%4� � 0� , ��a%100� x 0�� - ��a%400� � 0�Tale espressione può essere denotata significativamente con bisestile�a�.10.2.3 Problemi condizionali

L’operatore condizionale if consente di costruire particolari espressioni, detteespressioni condizionali, che costituiscono la soluzione di molteplici problemi,come confermato dagli esempi che seguono.Esempio 72. Consideriamo il problema:

Determinare il minimo fra 3 dati numeri x, y, z.

Ricorrendo all’operatore condizionale if la soluzione del problema è data dal-l’espressione

if�x @ y, if�x @ z, x, z�, if�y @ z, y, z��Esempio 73. Consideriamo il problema:

Dati tre numeri reali, determinare la somma dei due numeripiù grandi.

Indicando con a, b, c i tre numeri dati, la somma dei due numeri più grandi èdata da �a � b � c� �min�a, b, c�L’espressione funzionale min�a, b, c� può essere esplicitata mediante l’opera-tore if come segue:

if�a @ b,min�a, c�,min�b, c��L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 165: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.3. COSTRUZIONE DI ESPRESSIONI 155

Le qui riportate espressioni funzionali della forma min�x, y� possono essereesplicitate come segue:

if�x @ y, x, y�In definitiva, un’espressione complessiva risolvente il problema proposto è:

�a � b � c� � if�a @ b, if�a @ c, a, c�, if�b @ c, b, c��Esempio 74. Il seguente problema costituisce un frequente test di controllo suidati di problemi di tipo geometrico:

Decidere se tre assegnati valori numerici a, b, c possonocostituire le misure dei lati di un triangolo.

Dalla geometria la condizione di costruibilità di un triangolo si esprime:

Ogni lato deve essere minore della somma degli altri due.

che è equivalente a

Il lato maggiore deve essere minore della somma degli altri due.

ossia:

max�a, b, c� @ ��a � b � c� �max�a, b, c��ossia:

�2 �max�a, b, c�� @ �a � b � c�e quest’ultima può essere espansa mediante l’operatore if come segue:

�2 � if�a A b, if�a A c, a, c�, if�b A c, b, c��� @ �a � b � c�10.3 Costruzione di espressioni

In molti casi la costruzione di un’espressione che costituisce la soluzione di unproblema può essere sviluppata adottando le metodologie top-down e bottom-up. Gli esempi che seguono illustrano questa situazione.Esempio 75. Consideriamo il problema:

Dati tre numeri naturali g, m, a, da interpretarsi come giorno,mese, anno, decidere se essi costituiscono una data corretta.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 166: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

156 CAPITOLO 10. ESPRIMERE

La soluzione è suggerita dalla celebre filastrocca ”trenta giorni ad april, consettembre, giugno e novembre, ...” ; si individua così facilmente l’espressioneche caratterizza una data corretta (si osservi che qui le virgole che separanole condizioni fra parentesi tonde vanno intese come operatore logico and):

�m > �4,6,9,11�, g B 30�oppure�m � 2, �a è bisestile, g B 29� oppure �g B 28��oppure�m > �1,3,5,7,8,10,12�, g B 31�

Ad un livello di raffinamento tipico dei linguaggi di programmazione, lacondizione sopra può essere espressa come segue:

���m � 4� - �m � 6� - �m � 9� - �m � 11�� , �g B 30��-�m � 2� , �bisestile�a� , g B 29� - �g B 28��-��dispari�m� , in�m,1,7�� - �pari�m� , in�m,8,12��� , �g B 31��

Le espressioni corrispondenti a pari, dispari e in possono essere scritte rispet-tivamente come segue:

pari�m� ( �m%2� � 0dispari�m� ( �m%2� � 1in�m,a, b� ( �a Bm� , �m B b��

Si noti come nello sviluppo della soluzione del problema di questo esempio sisia usata in alcuni passaggi la metodologia top-down ed in altri la metodologiabottom-up.

10.4 Espressioni come funzioniPer indicare che nell’espressione E compaiono gli identificatori x1, x2, . . . , xn

useremo la notazioneE�x1, x2, . . . , xn�

Il processo di valutazione di un’espressione consiste nell’eseguire i calcoliindicati, ottendo come risultato un valore. Le espressioni assumono valori

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 167: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.5. ESPRESSIONI ED INSIEMI DI ENTITÀ 157

diversi a seconda dei valori che vengono associati agli identificatori coinvoltinelle espressioni stesse. In questo modo un’espressione può essere consideratacome una funzione che dipende dagli identificatori coinvolti nell’espressione,facendo corrispondere loro il valore ottenuto nel processo di valutazione.Esempio 76. L’espressione algebrica x2�2xy�y2 identifica la funzione anonima

�x, y�( �x � y�2

Per questioni di leggibilità e di usabilità un’espressione viene talvolta de-notata mediante un identificatore.Esempio 77. La seguente espressione divisibile da come risultato un valorelogico che esprime la condizione di divisibilità del numero m per il numero n:

divisibile�m,n�( �m%n� � 0

10.5 Espressioni ed insiemi di entità

Le espressioni costituiscono uno strumento per definire e descrivere sottoin-siemi delle entità di una classe C avente parametri caratteristici �x1, . . . , xn�.Un’espressione logica E coinvolgente i parametri x1, . . . , xn individua il sot-toinsieme delle entità di C soddisfacenti alla condizione E�x1, . . . , xn�.Esempio 78. I punti del piano cartesiano sono individuati da una coppia �x, y�di valori numerici reali che denotano le coordinate nel riferimento cartesianoconsiderato. In questo contesto l’insieme dei punti appartenenti alle bisettricidei quadranti e diversi dall’origine risulta individuato dall’espressione

��x � y� - �x � �y�� , �x x 0�Generalizzando, un sistema di congiunzione (o sistema di intersezione) di

k condizioni ¢¦¤E1�x1, . . . , xn��

Ek�x1, . . . , xn�individua le entità soddisfacenti a tutte le condizioni indicate. Un tale sistemarisulta equivalente alla singola condizione

E1�x1, . . . , xn� , � � � ,Ek�x1, . . . , xn�Analogamente, un sistema di disgiunzione (o sistema di unione) di k condizioni

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 168: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

158 CAPITOLO 10. ESPRIMERE

<@@@@@>E1�x1, . . . , xn��

Ek�x1, . . . , xn�individua le entità soddisfacenti ad almeno una delle condizioni indicate. Untale sistema risulta equivalente alla singola condizione

E1�x1, . . . , xn� - � � � -Ek�x1, . . . , xn�Esempio 79. I numeri reali compresi nell’intervallo �0,1� possono essere espres-si mediante il sistema di congiunzione

� x C 0x B 1

mentre i numeri esterni allo stesso intervallo possono essere descritti medianteil sistema di unione � x @ 0

x A 1Esempio 80. I sistemi di congiunzione e disgiunzione risultano utili per de-scrivere delle figure nel piano cartesiano, dove un punto risulta individuatomediante le sue coordinate ed una figura (lineare o bidimensionale) può essereindividuata mediante un’espressione che coinvolge le coordinate �x, y� di ungenerico punto della figura. La circonferenza di raggio 1 e centro l’origine (o,equivalentemente, l’insiemi dei punti �x, y� che hanno distanza 1 dall’origine)è individuata dall’espressione »

x2 � y2 � 1

Il semicerchio delimitato dalla precedente circonferenza ed appartenente alsemipiano delle ordinate positive è descritto dal sistema di congiunzione

� »x2 � y2 B 1

y A 0

Questo sistema puè essere espresso in modo equivalente mediante la condizione

�x2 � y2B 1� , �y A 0�

La porzione di piano delimitata dal quadrato di vertici �1,1�, ��1,1�, ��1,�1�,�1,�1) è descritto dal sistema di congiunzioni

� SxS B 1SyS B 1

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 169: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.6. LIMITI DELLE ESPRESSIONI 159

Questo sistema è equivalente alla condizione

�SxS B 1� , �SyS B 1�che può essere esplicitata nella forma

��1 B x� , �x B 1� , ��1 B y� , �y B 1�Esempio 81. La croce posta sugli assi cartesiani, avente centro nell’origine edavente i 4 lati di lunghezza 1 può essere descritta come unione di due segmenti,mediante il seguente sistema misto:

<@@@@@@@@@@@@>

¢¦¤�1 B xx B 1y � 0¢¦¤x � 0�1 B yy B 1

oppure, in modo equivalente, come intersezione della circonferenza unitaria dicentro l’origine e gli assi coordinati, mediante il seguente sistema misto:

¢¦¤x2 � y2 B 1

� x � 0y � 0

10.6 Limiti delle espressioniIl fatto che fra dati e risultati di un problema esista una relazione funzionaledella forma risultati � algoritmo�dati�, può lasciar supporre che un proble-ma possa essere risolto mediante un’espressione che assolve al compito dellatrasformazione dell’algoritmo. Ma non tutti i problemi ammettono una solu-zione esprimibile mediante un’espressione in quanto non tutte le funzioni sonoesprimibili mediante un’espressione. Ad esempio la soluzione del problema:Determinare l’n-esimo numero primo. oppure: Decidere se un dato numeronaturale è primo richiede un algoritmo più articolato.

Per risolvere la totalità dei problemi risolvibili servono dei meccanismi piùpotenti. Adottando il paradigma imperativo si fa uso di variabili che memo-rizzano lo stato della computazione; tali variabili vengono modificate mediantedelle assegnazioni, come si vedrà nel prossimo capitolo; il tutto viene poi cor-redato dalla possibilità di fare ricorso a dei controlli (in particolare dei cicliche permettono la ripetizione delle istruzioni). Alternativamente, adottando ilparadigma funzionale si fa affidamento sul meccanismo delle funzioni ricorsive.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 170: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

160 CAPITOLO 10. ESPRIMERE

10.7 Esercizi

1. Risolvere l’equivoco del problema di Peano riportato nella citazioneall’inizio di questo capitolo.

2. Gianni va dal cartolaio con 4 monete da 2 euro, 2 monete da 50 cente-simi per prendere 3 quaderni da 1.4 euro l’uno, 4 penne da 45 centesimidi euro l’una, 4 buste del costo di 10 centesimi di euro l’una, con cor-rispondenti francobolli da 81 centesimi di euro l’uno. Con i soldi cherimangono, Gianni acquista delle bustine di figurine; ciascuna bustinacosta 16 centesimi di euro e contiene 5 figurine. Scrivere un’espressionearitmetica che, valutata, fornisca il numero di figurine che Gianni riescea comperare.

3. Si possiede una somma di s euro con la quale acquistare delle pentole concorrispondenti coperchi. Una pentola costa p euro mentre un coperchione costa c. Quante pentole complete di coperchio si possono acquistare?Quanti euro rimangono?

4. Discutere la differenza di forma dei problemi proposti nei due precedentiesercizi.

5. Determinare il numero di sbarrette (intere) di ferro di lunghezza d che sipossono ritagliare da n sbarre di lunghezza l. Determinare la lunghezzacomplessiva del ferro sprecato.

6. Determinare il (massimo) numero di quadrati di lato fissato che si pos-sono ritagliare da una forma rettangolare di date dimensioni.

7. Determinare il (massimo) numero di rettangoli di date dimensioni chesi possono ritagliare da una forma rettangolare di date dimensioni. Sinoti che questo problema, pur sembrando una banale generalizzazione delproblema precedente, risulta di difficile soluzione. In questo problemarisulta operativamente interessante anche determinare la disposizione deirettangoli da ritagliare. Problemi di questo genere rientrano nella vastaclasse dei problemi di allocazione delle risorse trattati in un ramo dellaMatematica noto come Ricerca Operativa e Programmazione Lineare.

8. Fissato un numero naturale k, determinare il successivo di un numeronaturale n, n B k, in sequenza circolare secondo il seguente schema:

0� 1, 1� 2, 2� 3, . . . , k � 1� k, k � 0

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 171: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.7. ESERCIZI 161

9. Dato il numero naturale n, considerato in base dieci, determinare

(a) la cifra delle unità di n(b) la cifra delle decine di n(c) la cifra delle centinaia di n

10. Dato il numero naturale n, determinare

(a) il più piccolo numero pari maggiore o uguale a n(b) il numero di decine di n(c) il valore di n troncato alle centinaia(d) il valore di n arrotondato alle centinaia(e) il più piccolo numero divisibile per 10 e per n

11. Dato il numero naturale n, scrivere delle espressioni corrispondenti alleseguenti condizioni:

(a) n è pari(b) n è dispari(c) n è divisibile per 10(d) n è composto da 2 cifre decimali

12. Siano m, n due numeri naturali. Utilizzando gli operatori aritmeti-ci �,�,�, ~, scrivere un’espressione che corrisponda alla funzione δ diKronecker definita come segue:

δ�m,n� � � 0 se m x n1 se m � n

13. Dato un numero naturale n di due cifre decimali e non multiplo di 10, de-terminare il numero ottenuto da n invertendo le sue cifre. Analogamenteper il caso in cui n sia costituito da tre cifre decimali.

14. Siano m, n due generici numeri naturali. Utilizzando gli operatoriaritmetici �,�,�, ~ e sfruttando la definizione che m � n � 0 se m B n(sottrazione parziale), determinare

(a) il minimo fra m ed n(b) il massimo fra m ed n(c) la distanza Sm � nS fra m ed n

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 172: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

162 CAPITOLO 10. ESPRIMERE

(d) il confronto di ordine fra m ed n (1 se m B n, 0 altrimenti)(e) il segno di n (0 se n � 0; 1 altrimenti)(f) la parità di n (0 se n è pari, 1 altrimenti).

15. Dati due numeri naturali m e n, Usando solo le quattro operazioniaritmetiche �,�,�, ~, determinare

(a) il resto della divisione intera fra m ed n(b) il valore naturale arrotondato della divisione fra m ed n(c) il più grande multiplo di m minore o uguale ad n(d) il valore di n arrotondato al più vicino multiplo di k

16. Determinare il numero di multipli di k compresi fra due dati numeri med n, m @ n.

17. Determinare la somma di tutti i multipli di un dato valore naturale kcompresi fra due numeri naturali m ed n, m B n.

18. Sia �a, b� l’intervallo chiuso dei numeri reali compresi fra a e b. Usandogli operatori di confronto e gli operatori logici, scrivere delle espressioniequivalenti ai seguenti due predicati:

(a) x > �a, b�(b) x ¶ �a, b�

19. Sia �a, b� un insieme di due elementi. Usando gli operatori di confrontoe gli operatori logici, scrivere delle espressioni equivalenti ai seguenti duepredicati:

(a) x > �a, b�(b) x ¶ �a, b�

20. Dati tre numeri reali, determinare

(a) il minimo dei tre numeri(b) il massimo dei tre numeri(c) il numero di mezzo dei tre numeri(d) l’ampiezza del più piccolo intervallo contenente i tre numeri(e) la somma dei due numeri più grandi fra i tre numeri(f) il numero dei numeri distinti fra i tre numeri

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 173: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.7. ESERCIZI 163

(g) la somma dei due numeri più piccoli(h) la somma dei due numeri più grandi

21. Dati quattro numeri reali, determinare:

(a) il minimo ed il massimo fra quattro numeri(b) la somma dei due numeri più grandi

22. Date le lunghezze a, b, c dei lati di un triangolo, scrivere delle espressionilogiche corrispondenti alle seguenti condizioni:

(a) il triangolo è scaleno(b) il triangolo è isoscele(c) il triangolo è equilatero(d) il triangolo è acutangolo(e) il triangolo è rettangolo(f) il triangolo è ottusangolo

23. Decidere se tre assegnati numeri naturali costituiscono una terna pita-gorica.

24. Decidere se un triangolo di lati di lunghezze a, b, c è copribile medianteun altro triangolo di lati di lunghezze x, y, z.

25. Decidere se tre dati numeri reali possono costituire le misure dei lati diun triangolo.

26. Decidere se quattro numeri reali possono costituire le misure dei lati diun quadrilatero.

27. Determinare, usando il minor numero possibile di operatori if , il minorefra 8 valori. Determinare quanti operatori if servono per determinareil minimo fra n valori.

28. La coppia �i, j� rappresenta le coordinate di una casella di una scacchie-ra 8 � 8. Scrivere delle espressioni logiche corrispondenti alle seguenticondizioni:

(a) la coppia �i, j� corrisponde ad una casella della scacchiera(b) la casella �i, j� è situata sul bordo della scacchiera(c) la casella �i, j� è situata su una delle due diagonali

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 174: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

164 CAPITOLO 10. ESPRIMERE

29. Siano �i, j� e �h, k� le coordinate di due caselle di una scacchiera 8 � 8.Scrivere delle espressioni logiche corrispondenti alle seguenti condizioni:

(a) le due caselle si trovano su una stessa riga o su una stessa colonna(b) le due caselle sono dello stesso colore

30. Siano �i, j� e �h, k� le coordinate, su una scacchiera 8 � 8, delle casellenelle quali sono posizionati due pezzi degli scacchi, uguali ma di colorediverso. Scrivere delle espressioni logiche che rappresentino le seguenticondizioni:

(a) le due torri si attaccano(b) i due alfieri si attaccano(c) i due cavalli si attaccano(d) le due regine si attaccano

Per chi non sa giocare a scacchi: due torri si attaccano se si trovanosu una stessa riga o su una stessa colonna; due alfieri si attaccano sesi trovano su una stessa linea diagonale; due regine si attaccano se sitrovano su una stessa riga, su una stessa colonna o su una stessa lineadiagonale; due cavalli si attaccano se si trovano alle estremità di unrettangolo di 2� 3 caselle. Suggerimento: esprimere la condizione per laregina come combinazione della condizione di torre ed alfiere.

31. Discutere se l’espressione

�x � y� � �y � z�esprime il fatto che i tre elementi x, y, z sono tutti uguali fra loro.Spiegare perché, nella formulazione di questo quesito, x, y, e z possonoessere elementi qualsiasi (e non necessariamente numeri).

32. Siano a, b, c le lunghezze dei lati di un triangolo. Stabilire il tipodi triangolo (scaleno, isoscele, equilatero), sapendo che soddisfano allacondizione �a � b� � �b � c�

33. Siano x, y, z tre numeri reali. Discutere se le seguenti condizioni sonofra loro equivalenti.

(a) �x � y� - �y � z� - �x � z�(b) �x � y� � �y � z� � �x � z� � 0

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 175: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.7. ESERCIZI 165

34. Siano x, y, z tre numeri reali. Stabilire quali delle seguenti condizioniesprimono il fatto che i tre numeri x, y, z siano tutti distinti fra loro.

(a) �x x y� , �y x z�(b) �x � y� � �x � z� � �y � z� x 0(c) �x � y� @ ��x x z� , �y x z��(d) ��x � y� - �x � z� - �y � z��(e) �x @ y� , �y A z�

35. Siano x, y, z tre numeri reali. Scrivere delle espressioni logiche corri-spondenti alle seguenti condizioni:

(a) I tre numeri sono in ordine crescente.(b) I tre numeri sono in ordine decrescente.(c) I tre numeri sono in ordine (crescente o decrescente).(d) I tre numeri sono non sono in alcun ordine.

36. Dati quattro numeri x1, x2, x3, x4 da interpretarsi come coordinate di dueintervalli �x1, x2�, �x3, x4�, x1 B x2, x3 B x4, in un riferimento cartesianosu una retta, scrivere delle espressioni che rappresentino:

(a) la condizione di intersezione dei due intervalli(b) la lunghezza dell’intervallo intersezione(c) la lunghezza del più piccolo intervallo contenente entrambi gli in-

tervalli.

37. Fissato un sistema di riferimento cartesiano, decidere se un dato seg-mento di estremi �x1, y1�, �x2, y2� interseca l’asse delle ascisse.

38. Siano �x1, y1�, �x2, y2�, �x3, y3�, �x4, y4� le coordinate di quattro puntiin un sistema di riferimento cartesiano. Decidere se i quattro punti sono

(a) vertici di un quadrato(b) vertici di un rettangolo(c) vertici di un trapezio(d) allineati

39. Usando in notazione funzionale gli operatori aritmetici, gli operatori diconfronto (eq, ne, lt, gt, le, ge) e l’operatore condizionale ternario if ,scrivere un’espressione che rappresenti la distanza fra due dati numerireali a e b.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 176: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

166 CAPITOLO 10. ESPRIMERE

40. Usando l’operatore condizionale if, esprimere gli operatori logici and, or,not e xor (or esclusivo).

41. Usando solamente gli operatori di confronto, esprimere l’operatore logicoxor (or esclusivo).

42. Dato nel piano cartesiano un punto di coordinate �x, y�, scrivere un’e-spressione equivalente alla seguente condizione: Il punto sta sulla croceposta sugli assi cartesiani, avente centro nell’origine ed avente i 4 latidi lunghezza 1.

43. Scrivere delle espressioni che risolvano i seguenti problemi:

(a) Decidere se una circonferenza del piano cartesiano interseca gli assicartesiani.

(b) Decidere se una data circonferenza è completamente contenuta nelprimo quadrante.

44. Siano �x, y� le coordinate di un punto P del piano cartesiano. Scriveredelle espressioni che esprimano le seguenti condizioni:

(a) il punto P si trova nel primo quadrante(b) il punto P sta sul primo o terzo quadrante(c) il punto P sta su uno degli assi(d) il punto P non sta su un asse(e) il punto P non sta sull’origine(f) il punto P sta sugli assi ma è diverso dall’origine(g) il punto P sta su una delle bisettrici dei quadranti(h) il punto P sta sull’asse x ma è diverso dall’origine(i) il punto P dista dall’origine meno di 1 unità(j) il punto P sta su una delle semirette positive degli assi(k) il punto P sta su un asse o su una delle due bisettrici dei quadranti(l) il punto P sta sulla croce posta sugli assi cartesiani, avente centro

nell’origine ed avente i 4 lati di lunghezza 1 ed è diverso dall’origine(m) il punto P sta all’interno della circonferenza unitaria incentrata

nell’origine.(n) il punto P dista dagli assi meno di un’unità

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 177: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

10.7. ESERCIZI 167

45. Scrivere un’espressione che descriva, in un sistema di assi cartesiani, l’in-sieme dei punti contenuti nel triangolo QABC descritto dalla seguentefigura, dove A � �0,0�, B � �1,0�, C � �1,1�.

C

BA

46. Dato nel piano cartesiano un punto di coordinate �x, y�, scrivere delleespressioni equivalenti alle seguenti condizioni:

(a) Il punto si trova all’interno del quadrato ��1,1� � ��1,1�.(b) Il punto sta all’interno del quadrato avente per vertici i punti di

coordinate �1,0�, �0,1�, ��1,0�, �0,�1�.(c) Il punto sta all’interno della circoferenza unitaria incentrata nel-

l’origine.

47. Dati i raggi r1 ed r2 e la distanza d dei centri di due cerchi, scrivereun’espressione logica che esprima il fatto che i due cerchi si intersecano.

&%'$����&%'$���� &%'$����&%'$����

vero vero falso

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 178: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

168 CAPITOLO 10. ESPRIMERE

48. Dati i raggi r1 ed r2 e la distanza d dei centri di due circonferenze,scrivere un’espressione logica che esprima il fatto che le due circonferenzesi intersecano.

&%'$����&%'$���� &%'$����&%'$����

vero falso falso

49. Dati i raggi r1 ed r2 e la distanza d dei centri di due circonferenze, scrivereun’espressione logica che esprima il fatto che le due circonferenze sonofra loro tangenti (internamente o esternamente).

50. Con riferimento alla seguente piantina di una casa, indicando con x ilfatto che la porta x è aperta, scrivere una condizione che esprima il fattoche ci sia corrente d’aria.

��a

��b

��e��f

��c

��d

Stabilire se dall’espressione è possibile risalire alla topologia della pian-tina.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 179: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 11

Elaborare

La scienza è ciò che noi comprendiamosufficientemente bene da spiegarlo al com-puter. L’arte è qualsiasi altra cosa noifacciamo.

D. E. Knuth,dalla presentazione al testo A=B, 1995

L’argomento di fondo di questo capitolo riguarda i meccanismi di trasfor-mazione delle espressioni. Un’espressione può essere trasformata con variemodalità: può essere valutata, eseguendo un calcolo basato sulle regole internedell’insieme dei valori componenti le espressioni; può essere ridotta in modosimbolico, secondo delle regole algebriche. Oltre a queste, l’operazione piùimportante da eseguirsi sulle espressioni è l’elaborazione che si basa sulla possi-bilità di sostituire agli identificatori che compaiono in un’espressione dei valorio altre espressioni. Esistono inoltre delle trasformazioni indotte dai costruttidi controllo, come sarà visto nei prossimi capitoli.

169

Page 180: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

170 CAPITOLO 11. ELABORARE

11.1 Valutazione delle espressioni

Una delle più frequenti forme di elaborazione di un’espressione composta soloda valori costanti consiste nell’eseguire i calcoli basandosi sulle regole interneall’insieme dei valori cha la compongono. Tale forma di elaborazione vie-ne detta valutazione e produce come risultato un singolo valore, secondo ilseguente schema di trasformazione:

Espressione� V alore

Negli usuali linguaggi di programmazione la valutazione di un’espressioneviene considerata come una capacità di base dell’esecutore. Di conseguen-za, in questi casi, il compito del solutore si riduce a scrivere espressioni checostituiscono il procedimento risolutivo del problema.Esempio 82. A seguire sono riportati alcuni esempi di valutazione di espres-sioni. Il simbolo � denota il processo di valutazione dell’espressione.

a) �13 � 6� � 3� 7 � 3� 21

b) �7 � 2� B 5� 5 B 5� TRUE

c) �1 @ 2� @ �3 @ 4�� TRUE @ TRUE � FALSE

Se il valore che si ottiene dalla valutazione di un’espressione appartienead un insieme T , si dice che l’espressione è di tipo T ; in particolare, se T èun insieme numerico, l’espressione viene detta espressione aritmetica, se T ècostituito dall’insieme dei valori logici �FALSE,TRUE�, l’espressione vienedetta espressione logica o espressione booleana o condizione.Esempio 83. Osservando che @ è l’operatore principale che compare nella se-guente espressione, si deduce immediatamente che la seguente è un’espressionelogica: �x � y� @ �2 � �x � y��

Osservazione. Per automatizzare la valutazione di un’espressione si pos-sono intraprendere due strade:

1. descrivere le espressioni mediante delle notazioni alternative in modo daconformarsi alla struttura interna della calcolatrice

2. adattare (programmare) il funzionamento interno della calcolatrice inmodo da semplificare la valutazione di espressioni parentizzate.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 181: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.2. VALUTAZIONE IN UN AMBIENTE 171

11.2 Valutazione in un ambienteUn’espressione risulta valutabile direttamente se non contiene identificatori.Nel caso contenga identificatori, un’espressione risulta valutabile se si esegueuna fase di elaborazione preventiva in cui ogni identificatore venga sostitui-to dal valore ad esso associato. A questo scopo risulta utile la seguentedefinizione.

DEFINIZIONE 3. Dicesi ambiente di valutazione un insieme di iden-tificatori con il loro valore associato, ossia in insieme di coppie della forma�id, val� dove id è un generico identificatore e val è il valore ad esso asso-ciato. Useremo la notazione �id,Ù� per indicare che l’identificatore id non èassociato ad alcun valore o, equivalentemente, che è associato al valore nullo.Un ambiente di valutazione dicesi completo rispetto ad un’espressione E secontiene la definizione dei valori associati a ciascun identificatore che comparenell’espressione E .

Esempio 84. Un ambiente A di valutazione può essere descritto mediante unoschema grafico come segue:

'

&

$

%8

5

b

a

oppure mediante una notazione lineare della forma

A � ��a,5�, �b,8��Tale ambiente risulta completo rispetto all’espressione a�a� 2� b mentre nonlo è rispetto all’espressione a � x � b.

11.3 Espressioni equivalentiSi possono avere espressioni formalmente diverse ma equivalenti, come attestail seguente esempio.Esempio 85. A seguire sono riportate delle espressioni algebriche diverse maequivalenti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 182: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

172 CAPITOLO 11. ELABORARE

a) a � x � x � b � x � c

b) �a � x � b� � x � cL’esempio precedente motiva la seguente definizione.

DEFINIZIONE 4. Due espressioni si dicono equivalenti se, per ogni pos-sibile ambiente di valutazione completo rispetto ad entrambe, le espressioni,forniscono lo stesso valore.

Esempio 86. Da banali considerazioni algebriche si deduce che l’espressionea � b � a è equivalente all’espressione 2 � a � b.

11.4 Riduzione delle espressioniUna generica espressione algebrica può essere trasformata in modo simboli-co, secondo delle regole algebriche: ridurre o semplificare un’espressione Esignifica trasformare, secondo delle prefissate regole, l’espressione E ricondu-cendola ad un’altra espressione E � più semplice ed equivalente ad E . Qui iltermine più semplice può essere inteso in modo informale, nel senso di “piùcorta” o “più facile da valutare”.

La fase di riduzione di un’espressione è più generale che non la valutazionein quanto permette di eseguire il processo di trasformazione anche se l’espres-sione contiene degli identificatori non associati a dei valori. La riduzione diun’espressione è in genere una fase preparatoria alla valutazione.

Senza essere esaustivi, vengono nel seguito riportati alcuni esempi di ridu-zione di espressioni.Esempio 87. Eseguendo le operazioni aritmetiche indicate (ossia valutandol’espressione o le sue parti valutabili), si hanno le seguenti riduzioni:

2 � 3 � 4� 2 � 12� 14

�2 � 3� � a� 5 � a

Esempio 88. Usando le proprietà dell’algebra:

�º3 �º

2� � �º3 �º

2�� 1

a � b � 2 � �a � 1� � 3 � a� b � 2

�x � y�2 � �x � y�2� �x2 � 2xy � y2� � �x2 � 2xy � y2��

x2 � 2xy � y2 � x2 � 2xy � y2� 4xy

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 183: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.5. RISOLUZIONE DI CONDIZIONI 173

Esempio 89. Usando le proprietà e le formule dell’algebra e della trigonome-tria:

sin2 x � cos2 x� 1

sin 2x~ sinx� �2 sinx � cosx�~ sinx� 2 cosx

Esempio 90. Usando le leggi dell’algebra di Boole:

p - �p , q�� p - q

p , �p - q�� p , q

Esempio 91. L’espressione �x � x� � x risulta semanticamente corretta se xè un valore logico. Si può notare inoltre che l’espressione vale FALSE sex � FALSE e vale TRUE se x � TRUE. Pertanto si può ridurre come segue:

�x � x� � x� x

Esempio 92. In base alla definizione dell’operatore if si possono eseguire leseguenti riduzioni:

if�2 @ 3,4 � 5,6 � 7�� 9

if�a @ b, a � b, a @ b�� FALSE

if��x � x� x �y � y�, x, y�� y

if�a � a, forward�2 � 3�, left�x��� forward�5�Esempio 93. La riduzione di un’espressione viene generalmente applicata adun’equazione prima di applicare i metodi per la soluzione dell’equazione. Adesempio, un’equazione di secondo grado viene ridotta alla forma ax2�bx�c � 0per applicare la formula risolutiva delle equazioni di secondo grado.Esempio 94. Un’espressione logica della forma E�x1, . . . , xn� � TRUE può es-sere ridotta all’espressione E�x1, . . . , xn�; analogamente, un’espressione logicaE�x1, . . . , xn� � FALSE può essere ridotta all’espressione E�x1, . . . , xn�.11.5 Risoluzione di condizioniLe espressioni costituiscono la base per definire molti concetti e trattare conquestioni tipiche della matematica. Molti problemi relativi alle espressioni

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 184: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

174 CAPITOLO 11. ELABORARE

consistono nel determinare i valori delle variabili che compaiono in una condi-zione affinché essa risulti soddisfatta. In questi contesti le variabili vengonodette anche incognite. Risolvere una condizione significa determinare i valoridelle variabili in modo che la soddisfino. Nel caso in cui non esista alcun valo-re delle variabili che soddisfi all’equazione, si dice che l’equazione è impossibileo insoddisfacibile.Esempio 95. Risolviamo la condizione

�x @ 3� @ �x B 4�Tale condizione è equivalente al sistema

� �x @ 3� � FALSE�x B 4� � TRUEche risulta riducibile al sistema

� x C 3x B 4�

Pertanto la condizione è soddisfatta per x > �3,4�.Esempio 96. La condizione �x - y� , � x�è soddisfatta per �x, y� � �FALSE,TRUE�. Per verificarlo basta costruirela tabella di verità della condizione, verificando tutte le combinazioni di valoripossibili per la coppia di variabili x ed y.

Le condizioni si trovano spesso espresse in forme particolari. Se E�x1, . . . , xn�,F �y1, . . . , ym� sono due espressioni si dice che la condizione

E�x1, . . . , xn� � F �y1, . . . , ym�è un’equazione. Se E ed F sono espressioni numeriche, tale equazione vienesolitamente scritta nella forma

G�x1, . . . , xk� � 0

Esempio 97. L’equazione �x , x� � �x � x�può essere ridotta secondo le sequenti trasformazioni:

�x , x� � �x � x�� �x , x� � TRUE � x , x� x

Pertanto essa è soddisfatta per x � TRUE. Per verificarlo basta costruire latabella di verità dell’equazione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 185: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.6. ASSEGNAZIONI 175

Esempio 98. L’equazione �x , y� � �x @ y�è soddisfatta per �x, y� � �FALSE,FALSE� e per �x, y� � �TRUE,FALSE�.

Un’equazione che risulta verificata per qualsiasi istanziazione delle varia-bili, viene detta identità.Esempio 99. Alcuni esempi di identità:

a) �x � y� � �x � y�b) x � x � y � y � �x � y� � �x � y�c) �a � x � b� � x � c � a � x � x � b � x � c

11.6 Assegnazioni

Nei precedenti paragrafi si è visto che il valore che si ottiene dall’elaborazionedi un’espressione dipende dall’ambiente. In questo capitolo verranno descrittii meccanismi per definire un ambiente e per modificarlo. Avere a disposizioneun ambiente (modificabile) equivale ad introdurre il concetto di ”stato di unaelaborazione”; ciò costituisce il meccanismo portante di tutta la programma-zione a paradigma imperativo. In un linguaggio di programmazione questapossibilità si traduce nell’avere a disposizione delle variabili sulle quali potereseguire delle assegnazioni.

L’operazione fondamentale sulle variabili, che giustifica il loro uso e checaratterizza tutti i linguaggi di programmazione di tipo imperativo, è quelladi assegnazione o assegnamento che consiste nell’attribuire un valore ad unavariabile. Tale operazione viene indicata con diversi formalismi, a seconda dellinguaggio di programmazione 1 usato. Nel seguito sarà usata la notazione

id� valore

Più in generale un’espressione può avere il seguente formato:

id� espressione

1Le notazioni più utilizzate per indicare l’operazione di assegnazione sono le seguenti:id� valore (notazione generica)id �� valore (linguaggio Gauss, Peano, Pascal, Ada)id � valore (linguaggio BASIC, FORTRAN, C/C++, Java)

set id to valore (linguaggio Scratch/Snap!)

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 186: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

176 CAPITOLO 11. ELABORARE

Con una tale scrittura si intende che all’identificatore id viene associato ilvalore ottenuto dalla valutazione dell’espressione che compare sulla destra delsegno �. È da tenere presente la sequenza di esecuzione dell’operazione diassegnazione è la seguente:

1. elaborazione dell’espressione nell’ambiente attuale, ottenendo un valore

2. assegnazione alla variabile id del valore ottenuto dalla valutazione

Pertanto, il significato da dare alla precedente scrittura è il seguente:

variabile� η�espressione�dove con η si denota la funzione di valutazione. Questa osservazione èindispensabile quando nell’espressione compare la variabile da assegnare.Esempio 100. Nell’ambiente ��a,2�, �b,3�� il processo di esecuzione dell’asse-gnazione a� a� b può essere descritto mediante il seguente schema da leggereda destra a sinistra:

5 5 a � b� �� η

id valore espressione

L’istruzione di assegnamento di una variabile è a tutti gli effetti un’azioneche produce una modifica nell’ambiente.Esempio 101. Nel seguente esempio è riportato l’ambiente prima e dopo diun’istruzione di assegnamento.

ambiente iniziale � ��a,2�, �b,3��a� a � b

ambiente finale � ��a,5�, �b,3��11.7 Soluzioni mediante assegnazioniNella programmazione vengono spesso utilizzate le espressioni semplici costi-tuite da un solo operatore binario, come ad esempio 2�3, a @ b. Questa formadi espressioni corrisponde alle capacità elaborative di un computer che è in gra-do di eseguire una sola operazione alla volta. Con il ricorso all’assegnazione ed

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 187: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.7. SOLUZIONI MEDIANTE ASSEGNAZIONI 177

a delle variabili ausiliarie per memorizzare i risultati intermedi, un’espressionecomplessa può essere valutata mediante una sequenza di espressioni semplici.

Molti problemi possono essere risolti in modo sequenziale con l’uso dei solistrumenti costituiti dalle variabili e dall’operazione di assegnazione.Esempio 102. Supponiamo di disporre di un esecutore capace di eseguire sola-mente le quattro operazioni +, -, *, / fra numeri naturali. Usando solamenteistruzioni di assegnazione semplice della forma a� b X c, dove X è un genericooperatore binario infisso, scriviamo una sequenza di istruzioni che abbia l’ef-fetto di assegnare alla variabile r il resto della divisione intera fra due numerinaturali m ed n. Il resto della divisione intera fra due numeri naturali m edn è esprimibile mediante le quattro operazioni aritmetiche fondamentali comedescritto nell’algoritmo 46.

Algoritmo 46 - resto della divisione intera fra due numeri naturaliInput: numeri naturali m ed nOutput: resto della divisione intera fra m ed n1: r �m~n2: r � r � n3: r �m � r4: return r

Esempio 103. Supponiamo di voler descrivere un algoritmo per calcolare lasomma dei primi n numeri naturali, nell’ipotesi che siano utilizzabili solo asse-gnazioni semplici della forma a� b X c, dove a, b, c sono generiche variabili e Xè un generico operatore aritmetico binario ��,�,�, ~,%�. L’espressione dellasomma è n��n�1�~2; da questa espressione può essere ricavato l’algoritmo 47.

Algoritmo 47 - sommatoria di una sequenza di numeri naturali consecutiviInput: numero naturale n che specifica l’ultimo addendoOutput: sommatoria dei numeri naturali 1 � 2 � � � � � n1: r � n � 12: r � r � n3: r � r~24: return r

Esempio 104. Usando solamente istruzioni di assegnazione semplice della for-ma a� b X c, dove X è un generico operatore binario infisso, usando la sola va-riabile y, valutare il valore della seguente espressione, assegnando alla variabile

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 188: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

178 CAPITOLO 11. ELABORARE

y il valore della valutazione, essendo x un valore numerico dato:

1 � x � x2 � x3

Scrivere questa espressione in un’unica notazione funzionale, utilizzando iseguenti operatori espressi in notazione funzionale:

s�a, b� addizione fra a e bp�a, b� prodotto fra a e b

Adottando la seguente scomposizione:

1 � x � x2 � x3� ��x � 1�x � 1�x � 1

si ha la seguente soluzione:

Algoritmo 48 - valutazione di un’espressione polinomialeInput: numero reale xOutput: valore di 1 � x � x2 � x3

1: y � x � 12: y � y � x3: y � y � 14: y � y � x5: y � y � 16: return y

In notazione funzionale l’espressione iniziale si scrive:

1 � x � x2 � x3� s�p�s�p�s�x,1�, x�,1�, x�,1�

Si può notare che i precedenti due esempi sono sostanzialmente equivalentialla costruzione di una macchina combinatoria.

Nota. Gli esempi precedenti suggeriscono la seguente domanda: È possibilevalutare qualsiasi espressione disponendo di un esecutore capace di valutaresolo espressioni semplici? La risposta affermativa a questa domanda discendedirettamente dal meccanismo di costruzione delle espressioni, in base a cui èpossibile scrivere un algoritmo che genera un algoritmo per la valutazione diespressioni generali.Esempio 105. Calcolare l’ampiezza del più piccolo intervallo contenente letre cifre (in base 10) di un dato numero naturale di tre cifre. Ad esempio,

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 189: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.7. SOLUZIONI MEDIANTE ASSEGNAZIONI 179

Algoritmo 49 - ampiezza intervallo contenente le tre cifre di un numeroInput: numero naturale n di tre cifreOutput: ampiezza intervallo contenente le cifre di n1: scomponi n nelle sue tre cifre a (unità), b (decine), c (centinaia)2: p�min�a, b, c�3: q �max�a, b, c�4: r � q � p5: return r

l’ampiezza del più piccolo intervallo contenente le cifre del numero 427 è 5 ��7 � 2�.

Un possibile algoritmo è il seguente:

Ad un ulteriore livello di dettaglio questo algoritmo si esprime come segue:

Algoritmo 50 - ampiezza intervallo contenente le tre cifre di un numeroInput: numero naturale n di tre cifreOutput: ampiezza intervallo contenente le cifre di n1: a� n%102: b� �n~10�%103: c� n~1004: p� if�a @ b, if�a @ c, a, c�, if�b @ c, b, c��5: q � if�a A b, if�a A c, a, c�, if�b A c, b, c��6: r � q � p7: return r

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 190: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

180 CAPITOLO 11. ELABORARE

11.8 Esercizi1. Valutare le seguenti espressioni:

(a) 2 � 3 � 4~2(b) �1 @ 2� � �2 � 3�(c) ��1 @ 2� @ �3 @ 4�� @ �5 @ 6�

2. Valutare nell’ambiente ��a,1�, �b,2�, �c,3�� le seguenti espressioni:

(a) �a � 2� @ b(b) ��a � b� A c�(c) ��a � b� � c� , ��b � c� @ a�

3. Supponendo che gli operandi che compaiono nella seguente espressionesiano di tipo numerico, dedurre qual è il tipo della seguente espressione:

�a @ �b � 1�� , ��2 A b� - � �a @ 10���Valutare l’espressione nell’ambiente ��a,2�, �b,1��.

4. Dire quali fra le seguenti espressioni sono semanticamente corrette, as-sumendo che i valori che intervengono siano tutti numeri. Nel caso diespressioni sintatticamente corrette, valutarne il tipo (numerico o logico).Nei casi in cui sia possibile, determinarne il valore.

(a) a � a � 1(b) �a @ b� � �a � b�(c) �a � b�(d) � �a @ b��(e) �a @ b� - ��a � 1� A b�

5. Dire quali fra le seguenti espressioni sono semanticamente corrette, as-sumendo che le variabili m ed n siano di tipo numerico e p e q di tipologico. Nel caso di espressioni sintatticamente corrette, valutarne il tipo.Nei casi in cui sia possibile, determinarne il valore.

(a) �p @ q� , �p A q�(b) p - � �m @ n��(c) �m @ n� � �p A q�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 191: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.8. ESERCIZI 181

(d) �m � n� � �p - q�(e) m @ �p , q�(f) �m � n� � �p � q�(g) m � �m � n�(h) p � �p � q�(i) �m � n� � �m x n�

6. Stabilire il tipo delle variabili coinvolte nella seguente espressione affinchérisulti corretta. �x @ y� @ zDiscutere se e quando l’operatore di confronto @ è associativo.

7. Stabilire se la seguente scrittura può costituire un’espressione sintatti-camente corretta: �x @ x� @ xIn caso affermativo, stabilire, motivando le affermazioni, il tipo dellavariabile x affinché risulti sintatticamente corretta. Stabilire il valoredell’espressione in funzione del valore della variabile x.

8. Stabilire il tipo delle seguenti espressioni, assumendo che le variabili p,q, r siano di tipo logico e le variabili x, y, z siano di tipo numerico:

(a) p � �x � y�(b) �p � q� � r(c) �x � y� � �y � z�(d) �x @ y� @ �p @ q�(e) �p @ �x @ y�� @ q

9. Individuare, motivando le affermazioni, il tipo delle variabili che compa-iono nelle seguente espressione ad una incognita; risolvere le condizioni.

(a) x � �x � x�(b) x @ �x @ x�(c) x � �x @ x�(d) x @ �x � x�(e) �x , x� � �x - x�(f) �x A 7� A �x C 5�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 192: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

182 CAPITOLO 11. ELABORARE

10. Individuare, motivando le affermazioni, il tipo delle variabili che compa-iono nelle seguenti espressioni a due incognite; risolvere le condizioni.

(a) x � �x @ y�(b) �x � y� @ x(c) x A �x @ y�(d) �x � y� x x(e) �x A y� A �y � 10�(f) �x @ y� � �x A 2�

11. Stabilire per quali valori delle variabili x e y sono soddisfatte le seguenticondizioni:

(a) x A �x @ y�(b) x � �x @ y�

12. Individuare, motivando le affermazioni, il tipo delle variabili che compa-iono nel seguente sistema di espressioni:

� x � �y A 2��y @ 3� , xRisolvere il sistema.

13. Semplificare le seguenti espressioni:

(a) �n x 13� - �n � 32�(b) �n x 13� , �n � 32�(c) �n � 13� - �n � 32�(d) �n � 13� , �n � 32�

14. Discutere l’equivalenza delle seguenti espressioni sui numeri naturali:

(a) �m � n�~p(b) m � �n~p�(c) �m~p� � n

15. Discutere l’equivalenza delle seguenti espressioni, dove x è una variabilelogica:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 193: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.8. ESERCIZI 183

(a) x

(b) x � FALSE(c) x x x(d) x @ TRUE(e) if�x,FALSE,TRUE�

16. Esprimere mediante l’operatore condizionale if, senza fare uso degli ope-ratori logici ,, -, , un’espressione equivalente alla seguente:

�p , q� - r17. Esprimere mediante gli operatori logici (in modo cortocircuitato) un’e-

spressione equivalente alla seguente:

if�c1, FALSE, if�c2, TRUE,α��18. Dimostrare che la seguente espressione è vera se e solo se i tre oggetti x,

y, z sono uguali fra loro:

if�x � y, x � z, x � y�19. Valutare la seguente espressione, essendo x ed y il numero di caratteri

del proprio cognome e nome:

if�if�x B y, x @ y, x � y�, y � x,x � y�20. Siano c1 e c2 due generiche condizioni. Dimostrare che, se c2 è valutabile,

le seguenti due espressioni sono equivalenti:

(a) if�c1, if�c2, x, y�, y�(b) if�c1 , c2, x, y�

21. Discutere se ed in quali casi le seguenti due coppie di espressioni sonofra loro equivalenti.

(a1) if�c1 , c2, x, y�(b1) if�c1, if�c2, x, y�, y�(a2) if�c1 - c2, x, y�(b2) if�c1, x, if�c2, x, y��

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 194: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

184 CAPITOLO 11. ELABORARE

22. Stabilire il tipo delle seguenti espressioni, assumendo che le variabili checompaiono siano tutte di tipo numerico.

(a) if�a @ b, a, b�(b) if�a A b, a @ b, a � b�(c) if�a � b, a, if�a A b, a � b, b � a��

23. Definire il tipo di ciascuna delle variabili che compaiono nelle seguentiespressioni ed assegnazioni in modo che risultino corrette:

(a) if�x , �y @ z�, y � 1, z�(b) x� x @ y

24. Dimostrare che la seguente sequenza di assegnazioni ha l’effetto di asse-gnare alla variabile p il valore TRUE se e solo se r è una radice dell’e-quazione di secondo grado ax2 � bx � c � 0. Suggerimento: eseguire latraccia dell’esecuzione.

y � a � r

y � y � b

y � y � r

y � y � c

p � y � 0

Esprimere la precedente sequenza di assegnazioni mediante un’unicaistruzione di assegnazione.

25. Stabilire qual è l’effetto della seguente sequenza di assegnazioni:

x� x � yy � x � yx� y � x

26. Mediante una sequenza di assegnazioni semplici della forma x � p X q,dove x, p, q sono generiche variabili e X è un generico operatore aritmeticobinario (�, �, �, ~), valutare nel modo più efficiente possibile le seguentiespressioni. Dire, motivando le affermazioni, se ed in quali casi si pos-sono verificare degli errori nella valutazione delle espressioni in fase diesecuzione.

(a) �a � b� � c � �d~e�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 195: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

11.8. ESERCIZI 185

(b) �a � b�2 � 2 � �a � b� � �a � b�(c) x � ��x~y� � y�(d) x3 � x2

(e) ax4 � bx2 � c

(f) 1~�x4 � x2 � 1�(g) 1 � 1~x � 1~x2 � 1~x4

27. Dimostrare che qualsiasi espressione algebrica può essere valutata me-diante assegnazioni aventi la parte destra costituita da un’espressionesemplice.

28. Dato un numero naturale di 3 cifre (in base 10), determinare il numeropiù grande che può essere costruito usando le tre cifre del numero dato.

29. Dato un numero naturale di 3 cifre (in base 10), decidere se è compostoda tre cifre consecutive, indipendentemente dall’ordine con il quale com-paiono. Ad esempio i numeri 453, 102, 765 sono composti da tre cifreconsecutive.

30. Dato il perimetro di un quadrato, determinarne l’area.

31. Dato il perimetro esterno e l’area di una corona quadrata delimitata dadue quadrati concentrici e coassiali, determinarne lo spessore.

32. Si consideri la corona circolare delimitata da due circonferenze concen-triche, l’una inscritta e l’altra circoscritta ad un medesimo quadrato.Determinare il lato del quadrato conoscendo l’area della corona.

33. Ad un distributore automatico si possono usare monete da 1 euro, 50,20, 10, 5 centesimi. Il distributore fornisce delle caramelle del costo di 5centesimi l’una. Si può introdurre una sola moneta e scegliere il numerodi caramelle da acquistare. Assumendo come dati il valore della monetaintrodotta (in centesimi di euro) ed il numero di caramelle selezionato,determinare il numero di monete dei diversi tagli che si ottengono comeresto, tenendo conto che il distributore dà come resto il minor numeropossibile di monete (senza imbrogliare). Ad esempio, introducendo unamoneta da 50 centesimi e desiderando avere 3 caramelle, si ottengono diresto 3 monete: una da 20, una da 10 e una da 5 centesimi.

34. Mediante delle assegnazioni aventi come parte destra delle espressionisemplici, usando gli operatorimin emax in notazione funzionale, scrivere

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 196: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

186 CAPITOLO 11. ELABORARE

una sequenza di assegnazioni per valutare l’espressione

max�min�a, b�,min�c, d��35. Mediante delle assegnazioni, determinare il più grande numero naturale

n composto dalle cifre di un dato numero naturale m composto di al piùtre cifre decimali (0 Bm B 999). Ad esempio, dato il numero m � 376, ilrisultato è n � 763.

36. In una vasca a forma di parallelepipedo rettangolo, posta a livello e pienad’acqua fino ad una data altezza, viene immerso un corpo pesante (chesi adagia sul fondo) a forma di parallelepipedo rettangolo. Determinarela distanza fra il livello dell’acqua ed il bordo della vasca e di quantosporge o è coperto il corpo immerso.

37. Mediante delle assegnazioni, usando gli operatorimin emax in notazionefunzionale, ordinare quattro valori numerici a, b, c, d.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 197: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 12

Spostare

Solo in casi estremi il materiale è completa-mente inerte e inutile. Un cavallo intrap-polato in un angolo forse un giorno potràscappare e giocare un ruolo decisivo nellabattaglia.G. Kasparov, Gli scacchi, la vita

Spostare un oggetto da una posizione ad un’altra costituisce una delle formedi elaborazione più frequentemente eseguite. Solitamente lo spostamento diun elemento è inserito in un processo di una sequenza di spostamenti chetrasformano una situazione iniziale assegnata in una finale obiettivo.

I problemi di spostamento si caratterizzano dal contesto in cui avvengo-no gli spostamenti, dai vincoli imposti agli spostamenti e dall’obiettivo daraggiungere.

187

Page 198: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

188 CAPITOLO 12. SPOSTARE

12.1 Scambio di cavalli degli scacchiConsideriamo il seguente problema:

Su una scacchiera 3�3 sono disposti tre cavalli bianchi e tre cavalli neri,posti ai lati opposti della scacchiera, come descritto nella figura chesegue. Il problema consiste nello scambiare fra loro i cavalli bianchicon quelli neri, nel minor numero possibile di mosse, alternando lemosse del bianco e del nero e rispettando le modalità di movimentodei cavalli secondo le regole del gioco degli scacchi.

Operando direttamente sulla scacchiera ci si convince che il problema non èdi immediata soluzione. Il problema si sbroglia rappresentando la scacchieratramite un grafo; ogni nodo del grafo rappresenta una casella della scacchie-ra; due nodi del grafo vengono congiunti se si può passare da uno all’altromediante una mossa del cavallo. Convenendo di etichettare ciascuna casellacon un numero naturale da 1 a 9, si ottiene la rappresentazione e successivatrasformazione, come indicato nella figura che segue.

������HHH

HHHAAAAAA����������

��HH

HHHHAAAAAA�

�����

7 8 9

4 5 6

1 2 3

8 3 4 9

1 6 7 2

Muovendo i cavalli con riferimento alla figura a destra è facile ricavare laseguente soluzione (fra le tante che esistono):

�1� 6,8� 1,3� 8,9� 4,4� 3,2� 9,7� 2,6� 7�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 199: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.2. IL GIOCO DEL 15 189

12.2 Il Gioco del 15Intorno al 1870 l’americano Sam Loyd, uno dei più famosi enigmisti ed inven-tori di giochi, propose il Gioco del 15, un puzzle che si gioca su una scacchiera4 � 4 dove delle tessere numerate da 1 a 15 vengono fatte scorrere, orizzontal-mente e verticalmente, grazie ad una posizione vuota. Il gioco consiste nelrimettere in ordine le tessere partendo da una configurazione casuale.

Figura 12.1: Il Gioco del 15. Nella situazione descritta in figura si può eseguireuno dei seguenti spostamenti: muovere la tessera 1 in basso, la tessera 5 asinistra oppure la tessera 8 in alto.

Loyd mise in palio la cifra di mille dollari come premio per chi fosse riuscitoa risolvere la configurazione del gioco costituita dai numeri ordinati a partireda 1 ma con i numeri 14 e 15 scambiati. L’autore sapeva che nessuno avrebbemai potuto esigere il pagamento del premio in quanto la situazione obiettivoè irragiungibile.

In generale, il problema del gioco del 15 si esprime mediante una delleseguenti due formulazioni:

• stabilire se una configurazione è risolvibile, ossia se esiste una sequenzadi mosse che conduce alla situazione ordinata (la configurazione propostada Loyd non è risolvibile)

• determinare una sequenza di mosse che conduce alla situazione ordinata(possibilmente la più breve)

Questi problemi vengono risolti con considerazioni di tipo matematico basatesulle permutazioni di elementi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 200: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

190 CAPITOLO 12. SPOSTARE

12.3 Sistemare i piattiIn molte situazioni della vita quotidiana (quando sistemiamo i libri della bi-blioteca, quando teniamo in mano le carte da gioco e moltissime altre) siamoalle prese con problemi di spostamento di oggetti con l’obiettivo di sistemarliin ordine.

Il seguente problema, pur riferendosi ad una situazione di vita quotidiana,è interessante dal punto di vista algoritmico.

Su un gocciolatoio sono disposti dei piatti piani e delle fondinein modo da occupare tutte le posizioni. Si vuole sistemareordinatamente i piatti in modo da avere tutti i piatti pianisulla sinistra e le fondine sulla destra. Si suppone di potereseguire uno scambio fra due piatti, prendendo un piatto allavolta in ciascuna mano e senza la possibilità di appoggiare ipiatti fuori dal gocciolatoio.

Questo problema può essere risolto come descritto nell’algoritmo 51 che sifonda su un’idea sfruttata nell’algoritmo di ordinamento quicksort che saràdescritto più avanti.

Algoritmo 51 - Algoritmo di ordinamento dei piattiInput: fila dei piatti da ordinareOutput: fila di piatti ordinata1: poni le mani alle estremità della fila dei piatti2: while le mani non si sono incontrate do3: while la mano sinistra è su un piatto piano do4: avanza la mano verso destra5: end while6: while la mano destra è su un piatto fondo do7: avanza la mano verso sinistra8: end while9: if i piatti che hai in mano sono fuori ordine then

10: scambiali11: end if12: sposta la mano sinistra di un posto a destra13: sposta la mano destra di un posto a sinistra14: end while15: la fila di piatti è ordinata

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 201: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.4. IL PROBLEMA DELLA TORRE DI HANOI 191

12.4 Il problema della Torre di HanoiIl problema della torre di Hanoi è un gioco ideato nel 1883 dal matematicofrancese Edouard Lucas. Il gioco prende spunto dalla leggenda secondo laquale nel tempio di Benares, in India, i monaci avevano il compito di spostareuna piramide di 64 dischi in oro, disposti uno sopra l’altro, dal più grandeposto in basso al più piccolo posto in alto, da un piolo di diamante ad un altro,spostando un solo disco alla volta, utilizzando un terzo piolo come appoggio,con il vincolo che ogni disco debba poggiare sopra uno di dimensioni più grandi.Secondo la leggenda il mondo avrà fine quando i monaci avranno finito ilproprio lavoro. Sintetizzando quanto tramandato dalla leggenda, il problemaè generalmente noto nella seguente formulazione:

Sono dati tre pioli e n dischi di diversi diametri. Inizialmente tuttigli n dischi sono impilati su un piolo in modo tale che nessun discosia disposto sopra di un disco più piccolo. Il problema consiste nellospostare la pila degli n dischi da un piolo ad un altro, muovendo unsolo disco alla volta, potendo utilizzare il terzo piolo come supportoausiliario e rispettando il vincolo che nessun disco sia disposto soprauno più piccolo.

Figura 12.2: Problema della torre di Hanoi con 8 dischi, come proposto neltesto originale di Edouard Lucas.

Il problema suggerisce le seguenti questioni:

• È possibile risolvere il problema per qualsiasi numero n di dischi?

• Determinare il numero di spostamenti necessari per spostare n dischi.

• Determinare la sequenza di spostamenti necessari per spostare n dischi.

• Determinare e descrivere un procedimento per spostare gli n dischi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 202: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

192 CAPITOLO 12. SPOSTARE

La figura che segue descrive la soluzione di un’istanza del problema dellatorre di Hanoi.

Figura 12.3: Soluzione del problema della torre di Hanoi con 3 dischi.

Denotiamo con A, B, C le pile del problema della torre di Hanoi e suppo-niamo che inizialmente gli n dischi siano impilati in A e, usando B come pilaausiliaria, debbano essere spostati in C. La soluzione, descritta nell’algorit-mo 52, si fonda su un’idea ricorsiva che comporta lo spostamento di due piledi n � 1 dischi.

Algoritmo 52 - Spostamento di n dischi da A a C usando BInput: numero n dei dischi, pile A, B, C1: if n A 0 then2: sposta la torre dei primi n � 1 dischi da A a C usando B3: sposta il disco più grande da A a C4: sposta la torre di n � 1 dischi da B a C usando A5: end if

Una versione del precedente algoritmo più vicina alla codifica tipica di unlinguaggio di programmazione è riportata nell’algoritmo 53. In questo caso,una chiamata del tipo hanoi�4,A,B,C� ha l’effetto di spostare 4 dischi dalpiolo A al piolo C usando il piolo B.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 203: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.4. IL PROBLEMA DELLA TORRE DI HANOI 193

Algoritmo 53 - hanoi�n,A,B,C� : sposta n dischi da A a C usando BInput: numero n dei dischi, pile A, B, C1: if n A 0 then2: hanoi�n � 1,A,C,B�3: spostaDisco�A,C�4: hanoi�n � 1,B,A,C�5: end if

Cerchiamo ora una soluzione iterativa al problema della torre di Hanoi.Partiamo dall’osservazione che in ogni istante, nel caso in cui i dischi non sitrovino tutti in una sola pila, si possono individuare univocamente i seguentidue dischi:

• piccolo: è il disco più piccolo fra quelli in testa alle pile

• secondo: è il disco secondo in grandezza fra quelli in testa alle pile

Il disco più piccolo può essere mosso in due modi: in senso orario o in sensoantiorario; il secondo disco può essere mosso in un unico modo. Basandosi suqueste considerazioni, una soluzione iterativa è espressa nell’algoritmo 54.

Algoritmo 54 - Spostamento di n dischi da A a C usando BInput: numero n dei dischi, pile A, B, C1: S � if(n è dispari, antiorario, orario)2: muovi il disco piccolo in senso S3: while i dischi non sono tutti in C do4: muovi il disco secondo5: muovi il disco piccolo in senso S6: end while

Si può dimostrare che l’algoritmo 54 è corretto (risolve effettivamente ilproblema) ed è ottimale (esegue 2n �1 movimenti); la dimostrazione di questeproprietà non è facile. Questo algoritmo risulta di facile esecuzione per unesecutore umano; richiede un po’ di attenzione per essere implementato in unlinguaggio di programmazione tradizionale; in particolare le istruzioni 2., 4.e 5. richiedono che venga mantenuta una rappresentazione della situazione diciascuna pila.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 204: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

194 CAPITOLO 12. SPOSTARE

Descriviamo ora un’altra soluzione iterativa. Osserviamo che, in ogniistante, considerate due generiche pile X ed Y , non entrambe vuote, esisteun unico spostamento di un disco fra le due pile (in un verso o nell’altro);indichiamo con muovi�X,Y � questa operazione che si incarica di stabilire ilverso dello spostamento del disco fra le due pile X ed Y . Basandosi su questaoperazione si può esprimere una soluzione iterativa al problema della torre diHanoi mediante l’algoritmo 55, dove il controllo di terminazione del ciclo vaeseguito dopo ogni operazione muovi.

Algoritmo 55 - Spostamento di n dischi da A a C usando BInput: numero n dei dischi, pile A, B, C1: while i dischi non sono tutti in C do2: if n è dispari then3: muovi�A,C�4: muovi�A,B�5: muovi�B,C�6: else7: muovi�A,B�8: muovi�A,C�9: muovi�B,C�

10: end if11: end while

Anche l’algoritmo 55 è corretto ed ottimale, anche se di non facile dimo-strazione. L’esecuzione dell’operazione muovi richiede che l’esecutore abbia inogni momento la rappresentazione della situazione di ciascuna pila per poterstabilire il verso dello spostamento fra le due pile. L’algoritmo risulta di facileesecuzione per una persona ed è di facile implementazione in un linguaggio diprogrammazione.

12.5 Il mondo dei blocchettiUn classico contesto in cui si pongono e si risolvono problemi di spostamentoè costituito dalle pile di blocchetti: ci sono dei blocchetti indistinguibili op-pure caratterizzati da attributi quali colore, grandezza o il numero impressosu di essi; i blocchetti sono disposti su delle pile; è ammesso spostare un soloblocchetto alla volta dalla testa di una pila alla testa di un’altra; è ammes-so accedere, senza spostarlo, al solo elemento di testa di una pila; inoltre è

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 205: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.5. IL MONDO DEI BLOCCHETTI 195

ammesso controllare se una pila è vuota. Le varie pile vengono denotatemediante un nome o un numero che identifica la posizione in cui si trova lapila. Una tipica situazione che permette di formulare interessanti problemi ècostituita da tre pile.

Denoteremo con � � una pila vuota, ossia una pila composta da nessun bloc-chetto, mentre con �an, an�1, . . . , a1� denoteremo la pila formata dagli elementian, an�1, . . . , a1 disposti come evidenziato nella figura che segue.

ab

cd

e

Figura 12.4: Una pila di blocchetti denotata con �a, b, c, d, e�.La creazione e l’inizializzazione di una pila avviene mediante assegnazioni

delle seguenti forme:

A� � �A� �a, b, c, d, e�

Un’assegnazione della forma A� B fra due pile A e B deve essere interpretatacome ”A diventa un identificatore della pila B”.

Una pila può essere manipolata mediante le seguenti operazioni:

• testa(p) : elemento di testa della pila p

• vuota(p) : test se la pila p è vuota

• inserisci(p, x) : inserisce in testa alla pila p il blocchetto x

• elimina(p) : elimina l’elemento di testa della pila p

• sposta(p, q) : sposta l’elemento di testa da p a q

Esempio 106. Supponiamo di avere tre pile A,B,C di blocchetti, con la condi-zione che le pile A e B non sono vuote. Il problema consiste nello scambiaregli elementi di testa delle due pile A e B. La semplice soluzione è fornitadall’algoritmo 56.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 206: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

196 CAPITOLO 12. SPOSTARE

Algoritmo 56 - Scambio dei blocchetti di testa di due pileInput: pile A, B di blocchettiOutput: pile A, B con i blocchetti di testa scambiati1: C � pila vuota2: sposta�A,C�3: sposta�B,A�4: sposta�C,B�

Esempio 107. Date due posizioni A e B ed una pila di blocchetti in A, vogliamorovesciare i blocchetti dalla pila A alla pila B. Lo spostamento può essereottenuto mediante il seguente algoritmo:

Algoritmo 57 - Rovesciamento di una pila di blocchettiInput: pile A di blocchetti, pila B vuotaOutput: pila A vuota, pila B con i blocchetti rovesciati1: while vuota�A� do2: sposta�A,B�3: end while

Esempio 108. Vogliamo traslare una pila di blocchetti, ossia spostarla da unaposizione ad un’altra mantenendo la posizione reciproca fra i blocchetti; è suffi-ciente combinare due operazioni di rovesciamento, come descritto nel seguentealgoritmo:

Algoritmo 58 - Traslazione di una pila di blocchettiInput: pila A di blocchetti, pila B vuotaOutput: pila A vuota, pila B di blocchetti1: C � pila vuota2: rovescia(A,C)3: rovescia(C,B)

Osservazione. Gli algoritmi 56, 57 e 58 costituiscono un ampliamentodel repertorio delle operazioni di base previste sulle pile:

• scambia(p, q) : scambia gli elementi di testa delle pile p e q

• rovescia(p, q) : rovescia la pila p in q

• trasla(p, q) : trasla la pila p in qQueste operazioni, pur non rappresentando un ampliamento della potenza dicalcolo, permettono di esprimere gli algoritmi con più facilità ed espressività.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 207: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.6. BLOCCHETTI COLORATI 197

Esempio 109. Suddividere una pila di blocchetti A equamente con una pila B.Una soluzione è data dal seguente algoritmo 59.

Algoritmo 59 - Suddivisione dei blocchetti fra due pileInput: pila A di blocchetti, pila B vuotaOutput: pile A e B con i blocchetti equamente suddivisi1: C � pila vuota2: while vuota�A� do3: sposta(A,B)4: if vuota�A� then5: sposta(A,C)6: end if7: end while8: rovescia(C,A)

12.6 Blocchetti coloratiConsideriamo dei blocchetti colorati. L’aggiunta dell’attributo colore permet-te di considerare una più vasta gamma di problemi basati sulla comparazionee sulla classificazione dei blocchetti. In questo nuovo mondo a colori si am-metterà implicitamente che l’esecutore sia in grado di distinguere i colori deiblocchetti e di comparare i blocchetti in base al loro colore.Esempio 110. Separare i blocchetti di tre colori, posti nella pila A, mettendoi blocchetti arancione (a) in A, i blu (b) in B ed i ciclamino (c) in C.

situazione iniziale situazione finale

A B C A B Ca

a

c

ab

a

c

a

a

a

a

b c

c

Figura 12.5: Situazione iniziale (a sinistra) e finale (a destra) per la separazionedei blocchetti di 3 colori.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 208: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

198 CAPITOLO 12. SPOSTARE

Adottando la metodologia top-down, il problema può essere risolto me-diante l’algoritmo 60.

Algoritmo 60 - Separazione di una pila di blocchetti di 3 colori.Input: pila A di blocchetti colorati, pile B e C vuoteOutput: pile A, B e C con i blocchetti suddivisi per colore1: suddividi da A in B (solo blu) e C (arancione e ciclamino)2: suddividi da C a A (solo arancione) e B (i ciclamino sopra i blu)3: sposta i blocchetti ciclamino da B a C

Nell’algoritmo 60 si evidenziano i sottoproblemi P1, P2 e P3 corrispondentialle righe 1, 2 e 3. La soluzione di questi sottoproblemi è riportata neglialgoritmi 61, 62 e 63.

Algoritmo 61 - Soluzione sottoproblema P1Input: pila A di blocchetti colorati, pile B e C vuoteOutput: pila A vuota, b. blu in B, b. arancione e ciclamino in C1: while vuota�A� do2: if testa�A� è blu then3: sposta(A,B)4: else5: sposta(A,C)6: end if7: end while

Algoritmo 62 - Soluzione sottoproblema P2Input: pila A vuota, b. blu in B, b. arancione e ciclamino in COutput: b. arancione in A, b. ciclamino e blu in B, pila C vuota1: while vuota�C� do2: if testa�C� è arancione then3: sposta(C,A)4: else5: sposta(C,B)6: end if7: end while

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 209: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.7. BLOCCHETTI NUMERATI 199

Algoritmo 63 - Soluzione sottoproblema P3Input: b. arancione in A, b. ciclamino e blu in B, pila C vuotaOutput: b. arancione in A, b. blu in B, b. ciclamino in C1: while testa�B� è ciclamino do2: sposta(B,C)3: end while

Osservazione. Gli algoritmi 60, 61, 62 e 63 agiscono modificando gli stati(configurazioni) delle tre pile A, B e C. In ciascuno dei quattro algoritmi lerighe corrispondenti ad Input ed Output definiscono le precondizioni assuntedall’algoritmo e le postcondizioni generate dall’algoritmo. Gli algoritmi 61, 62e 63 sono sequenzialmente relazionati fra loro nel senso che la postcondizionedi un algoritmo diventa la precondizione dell’algoritmo che segue.

12.7 Blocchetti numeratiEtichettando i blocchetti con dei numeri si apre un mondo di possibilità edi interessanti problemi: questo è dovuto principalmente all’esistenza di unarelazione d’ordine fra i numeri.Esempio 111. È data una pila A costituita da blocchetti numerati ed unapila B vuota. Estrarre dalla pila A il blocchetto con il numero più grande,portandolo nella pila B, e riportare tutti gli altri nella pila A. La soluzione èriportata nell’algoritmo 64.

Algoritmo 64 - Estrazione del valore massimoInput: pila A di blocchetti numerati, pila B vuotaOutput: massimo in B e tutti gli altri in A1: C � pila vuota2: while vuota�A� do3: if testa�A� > testa�B� then4: sposta(B,C)5: sposta(A,B)6: else7: sposta(A,C)8: end if9: end while

10: rovescia(C,A)

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 210: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

200 CAPITOLO 12. SPOSTARE

Esempio 112. Sono date 3 posizioni A,B,C. Inizialmente A contiene una piladi blocchetti numerati. Usando una pila ausiliaria C, estrarre i due elementipiù grandi e metterli in B, rimettendo in A tutti gli altri. La pila A contienealmeno due elementi.

situazione iniziale situazione finale

A B C A B C3517452

35142

75

Figura 12.6: Situazione iniziale (a sinistra) e finale (a destra) per l’estrazionedei due elementi più grandi.

Il problema può essere risolto ripetendo 2 volte l’estrazione del valore mas-simo (da A a B). Per migliorare l’efficienza è possibile considerare una solavolta gli elementi della pila A e determinare contemporaneamente i due valoripiù grandi. La soluzione si basa sull’idea di usare una pila ausiliaria C edi spostare gli elementi della pila A mantenendo valido l’invariante di averein ogni istante i due valori più grandi in testa alle pile B e C con l’ulteriorecondizione che sia testa�B� C testa�C�.

Il procedimento, dettagliato nell’algoritmo 65, si fonda sulla considerazioneche ogni elemento x che viene preso da A dopo i primi due può generare leseguenti situazioni, mutuamente esclusive e complete; con M (testa di B)viene indicato il valore più grande e con m (testa di C) il secondo valore piùgrande:

C1� x @m : l’elemento x viene scartato

C2� x CM : vengono aggiornati i valori di m e di M

C3� m B x @M : viene aggiornato il valore di m

Le condizioni C1,C2 e C3 corrispondono alle linee 8., 12. e 15. dell’algoritmo 65.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 211: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.8. FUSIONE DI DUE PILE DI BLOCCHETTI 201

Algoritmo 65 - Estrazione dei due elementi più grandiInput: pila A di blocchetti numerati, pila B vuotaOutput: estrazione in B dei due elementi più grandi1: C � pila vuota2: sposta(A,B)3: sposta(A,C)4: if testa�B� > testa�C� then5: scambia�B,C�6: end if7: while vuota�A� do8: if testa�A� < testa�C� then9: sposta(C,B)

10: sposta(A,C)11: sposta(B,C)12: else if testa�A� C testa�B� then13: sposta(B,C)14: sposta(A,B)15: else16: sposta(A,C)17: end if18: end while19: sposta(C,B)20: rovescia(C,A)

12.8 Fusione di due pile di blocchettiSi hanno due pile A e B di blocchetti numerati. Le due pile sono posteinizialmente nelle posizioni A e B. Nelle due pile i blocchetti sono dispostiin modo tale che ogni blocchetto (esclusi quelli direttamente appoggiati sulpiano) sia appoggiato sopra uno avente un numero maggiore o uguale delsuo. Il problema consiste nel fondere 1 le due pile di blocchetti, costruendoneuna ordinata, composta dai blocchetti delle due pile originali. È ammessol’uso di una terza pila C per spostare temporaneamente i blocchetti. Allafine della trasformazione i blocchetti devono trovarsi nella pila A, ordinatidal più grande (appoggiato in basso) al più piccolo (in alto). Sviluppiamo,mediante la metodologia top-down, un algoritmo per risolvere il problema inquestione, assumendo l’ipotesi di disporre di un esecutore in grado di spostare

1Fondere: unione di due sequenze ordinate in un’unica sequenza ordinata.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 212: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

202 CAPITOLO 12. SPOSTARE

un solo blocchetto per volta (uno di quelli posti in testa alle pile) ed in gradodi confrontare i numeri impressi sui blocchetti. Si tratta di un problema diordinamento descrivibile mediante lo schema grafico illustrato nella figura 12.7.

situazione iniziale situazione finale

A B C A B C356

4457

7655443

Figura 12.7: Situazione iniziale (a sinistra) e finale (a destra) per un problemadi fusione di due pile di blocchetti.

Adottando la metodologia top-down, una prima scomposizione è descrittanell’algoritmo 66.

Algoritmo 66 - Fusione di due pile di blocchettiInput: pile A e B ordinate crescentementeOutput: pila A ordinata crescentemente1: usa una pila ausiliaria C2: fondi le due pile A, B mettendo il risultato in C3: trasla la pila C in A (senza rovesciarla)

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 213: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.9. UN ROBOT ASSEMBLATORE 203

Raffinando l’algoritmo 66 si giunge all’algoritmo 67.

Algoritmo 67 - Fusione di due pile di blocchettiInput: pile A e B ordinate crescentementeOutput: pila A ordinata decrescentemente1: C � pila vuota2: while ci sono blocchetti in A ed in B do3: if testa�A� > testa�B� then4: sposta�A,C�5: else6: sposta�B,C�7: end if8: end while9: if vuota�A� then

10: rovescia�B,C�11: else12: rovescia�A,C�13: end if14: rovescia�C,B�15: rovescia�B,A�

12.9 Un robot assemblatoreSu un nastro trasportatore arrivano al braccio di un robot assemblatore duetipologie di componenti: pentole e coperchi. Il braccio prende, uno alla vol-ta, in sequenza come arrivano, le pentole ed i coperchi che arrivano senza unordine prestabilito, ad esempio con una sequenza del tipo pentola-coperchio-coperchio-pentola. L’obiettivo consiste nell’assemblare su un altro nastro ilprodotto finito costituito da una coppia �pentola, coperchio�. Il braccio puòaccedere solo alle estremità dei due nastri trasportatori. Il robot può par-cheggiare temporaneamente le pentole ed i coperchi in una pila sulla quale èpossibile operare, inserendo ed estraendo elementi, solo sulla parte superiore.L’obietttivo consiste nell’assemblare i prodotti finiti composti da una pentolacon sopra un coperchio. La situazione è descritta nella figura 12.8.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 214: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

204 CAPITOLO 12. SPOSTAREqcqc ������

����

a

�� -

b

��cc c c ca

Figura 12.8: Il robot assemblatore.

Un passo preventivo per lo sviluppo della soluzione consiste nell’indivi-duare delle azioni elementari per il robot utilizzando le quali descrivere unalgoritmo per gestire il processo di assemblaggio. Adottiamo la strategia diavere la maggiore produttività possibile, ossia di avere in ogni istante il mag-gior numero di prodotti finiti assemblati. Ad esempio, una adeguata sequenzadi azioni a partire dalla situazione descritta nella figura 12.9 è la seguente:

- inserisci la pentola dal nastro di ingresso alla pila- sposta il coperchio dal nastro di ingresso al nastro di uscita- estrai la pentola dalla pila e portala sul nastro di uscita- sposta il coperchio dal nastro di ingresso al nastro di uscita

La precedente traccia di esecuzione suggerisce che l’attività del robot può esse-re composta mediante un’opportuna combinazione delle tre azioni elementaridescritte schematicamente nella figura 12.9.

nastro a nastro b

pila

-

?

-

sposta

inserisci estrai

Figura 12.9: Le 3 azioni elementari per il robot assemblatore.

Useremo nel seguito i termini ingresso, uscita e pila rispettivamente perdenotare il nastro di ingresso, il nastro di uscita e la pila. La combinazio-ne sequenziale delle tre azioni elementari sposta, inserisci ed estrai dipende

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 215: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.9. UN ROBOT ASSEMBLATORE 205

dallo stato del sistema complessivo il quale è determinato dallo stato dei tresottosistemi ingresso, uscita e pila; i possibili valori di questi tre sottosostemiè descritto mediante la seguente tabella:

ingresso > {pentola, coperchio}uscita > {pentola, coperchio}pila > {vuota, pentola, coperchio}

Coerentemente con queste convenzioni, useremo la notazione pila=vuota perdenotare la condizione che la pila è vuota, pila=pentola per denotare che lapila contiene pentole, ingresso=coperchio per indicare che il prossimo compo-nente sul nastro di ingresso è un coperchio, uscita=pentola per indicare che ilprossimo componente richiesto per il nastro di uscita è una pentola, e così viaper gli altri casi analoghi.

Una prima soluzione al problema si basa sull’analisi sistematica di tutti ipossibili stati nei quali si può trovare il sistema e, in ciascun caso, si deter-mina l’appropriata azione da intraprendere. Combinando fra loro gli statidelle parti del sistema si ottengono i possibili stati del sistema, descritti nellatabella 12.10, dove, nella colonna azione è riportata l’azione da intraprenderenel corrispondente stato.

stato ingresso uscita pila aziones1 pentola pentola vuota spostas2 pentola pentola pentola estrais3 pentola pentola coperchio spostas4 pentola coperchio vuota inseriscis5 pentola coperchio pentola inseriscis6 pentola coperchio coperchio estrais7 coperchio pentola vuota inseriscis8 coperchio pentola pentola estrais9 coperchio pentola coperchio inseriscis10 coperchio coperchio vuota spostas11 coperchio coperchio pentola spostas12 coperchio coperchio coperchio estrai

Figura 12.10: Tabella degli stati del robot assemblatore e corrispondenti azionida eseguire.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 216: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

206 CAPITOLO 12. SPOSTARE

Volendo esprimere la soluzione in notazione algoritmica a partire dallatabella 12.10, si è indotti a scrivere un algoritmo caso-per-caso, mediante unasequenza di costrutti condizionali che fanno perdere la struttura logica delprocesso di elaborazione.

In alternativa a quanto fatto sopra, si può adottare una strategia di ricercadella soluzione di tipo algoritmico; ciò richiede un pensiero sintetico organizza-tore che conduce ad una prima forma di soluzione descritta nell’algoritmo 68.Questa scomposizione evidenzia che i due sottoproblemi P1 e P2 sono struttu-ralmente equivalenti e possono essere espressi mediante un algoritmo parame-trico (algoritmo 69). Indicando con assembla�x� l’algoritmo 69, la soluzionecomplessiva del problema si esprime come riportato nell’algoritmo 70, del tuttoequivalente all’algoritmo 68.

Algoritmo 68 - Assemblaggio pentole e coperchi1: loop2: prendi una pentola dalla pila o dal nastro di ingresso e

spostala sul nastro di uscita (P1)3: prendi un coperchio dalla pila o dal nastro di ingresso e

spostalo sul nastro di uscita (P2)4: end loop

Algoritmo 69 - Assemblaggio componente x > �pentola, coperchio�1: if pila = x then2: estrai3: else4: while ingresso x x do5: inserisci6: end while7: sposta8: end if

Algoritmo 70 - Assemblaggio pentole e coperchi1: loop2: assembla(pentola)3: assembla(coperchio)4: end loop

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 217: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.10. ESERCIZI 207

12.10 Esercizi1. Su una scacchiera 3 � 3 sono disposti due cavalli bianchi e due cavalli

neri come descritto nella figura che segue. Il problema consiste nelloscambiare fra loro i cavalli bianchi con quelli neri, nel minor numeropossibile di mosse, alternando le mosse del bianco e del nero e rispettandole modalità di movimento dei cavalli secondo le regole del gioco degliscacchi.

2. Su una scacchiera 3 � 3 sono disposti tre cavalli come descritto nellafigura che segue. Il problema consiste nello spostare i cavalli in mododa allinearli (orizzontalmente, verticalmente o lungo una diagonale) nelminor numero possibile di mosse.

3. Si ha una sequenza di n piatti piani e fondi disposti su uno sgocciolatoiocon n � 1 posizioni, di cui una è libera. Ordinare i piatti, mettendoall’inizio i piatti piani ed alla fine i fondi. È consentito spostare unpiatto nella posizione libera; è possibile inoltre mettere e spostare deisegnalini colorati come segnaposto in corrispondenza di una posizione.

4. Determinare la sequenza di mosse che risolve il problema della torre diHanoi con 4 dischi.

5. Date tre pile non vuote A,B,C di blocchetti, descrivere una sequenza dispostamenti degli elementi di testa delle tre pile in senso orario, equiva-lentemente agli spostamenti simultanei �A� B,B � C,C � A�. Non èammesso usare altre pile ausuliarie.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 218: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

208 CAPITOLO 12. SPOSTARE

6. Avendo a disposizione 3 posizioni ed avendo su una di queste una pila diblocchetti, risolvere i seguenti problemi:

(a) Rovesciare la pila in un’altra posizione.(b) Spostare la pila in un’altra posizione senza rovesciarla.(c) Rovesciare la pila sul posto.

7. Contare i blocchetti presenti in una pila. Al termine del processo la piladeve risultare inalterata. È possibile usare altre pile come appoggio.

8. Estrarre da una pila l’elemento alla base, mettendolo in testa alla pila.È possibile usare altre pile come appoggio.

9. È data una pila di blocchetti A ed altre due pile vuote B e C. I blocchettisono sono in numero multiplo di 3. Spostare sulla pila B un terzo deiblocchetti presenti inizialmente in A; alla fine la pila A dovrà contenereil doppio dei blocchetti presenti in B e la pila C dovrà risultare vuota.

10. È data una pila A di monete uguali, in numero multiplo di 3, ed altredue pile vuote B e C. Suddividere le monete in numero uguale nelletre pile. È ammesso comparare l’altezza di due pile. Determinare, infunzione di n, il numero di movimenti di singole monete che vengonoeseguiti in un processo.

11. È data una pila di blocchetti A ed altre due pile vuote B e C. Ripartireequamente i blocchetti fra le posizioni A e B in modo che in entrambequeste due posizioni ci siano blocchetti in un numero uguale o al piùdiverso di un’unità. È indifferente l’ordine con il quale si troveranno iblocchetti alla fine del processo. L’esecutore al quale è rivolto l’algoritmonon è in grado di contare né di eseguire calcoli aritmetici. Determinare,in funzione del numero n dei blocchetti, il numero di movimenti di singoliblocchetti che vengono eseguiti in un processo.

12. È data una pila A composta da un numero pari di blocchetti. Suddivi-dere la pila in due pile B e C, ciascuna contenente la metà dei blocchettipresenti inizialmente in A.

13. Stabilire se le due pile di blocchetti contengono lo stesso numero di bloc-chetti. È possibile usare un’altra pila ausiliaria. Alla fine i blocchettidevono trovarsi nelle posizioni originali, nello stesso ordine di come eranoall’inizio.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 219: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

12.10. ESERCIZI 209

14. Si ha una pila A di blocchetti arancione ed una B di blocchetti blu.Scambiare di posto le due pile di blocchetti, utilizzando come appoggioausiliario una terza posizione C, facendo in modo che i blocchetti, inciascuna pila, mantengano la loro reciproca posizione che avevano primadello spostamento.

15. Determinare il minimo di una pila di blocchetti numerati, mettendolo intesta alla pila stessa. È possibile usare altre pile ausiliarie.

16. È data una pila A di blocchetti numerati, ordinata, con l’elemento piùgrande in basso. Inserire nella pila un altro blocchetto numerato inmodo da mantenere la proprietà di ordinamento della pila. È possibileusare altre pile ausiliarie.

17. Estrarre da una pila di blocchetti numerati, non necessariamente distinti,i blocchetti con valore minimo, mettendoli in un’altra pila. È possibileusare altre pile ausiliarie.

18. Ordinare una pila di blocchetti numerati, non necessariamante distinti,mettendo il blocchetto con valore più alto in basso e quello con valorepiù piccolo in alto. È possibile usare altre pile ausiliarie.

19. È data una pila A di blocchetti numerati ed è possibile usare altre pileausiliarie. Stabilire se:

(a) la pila è ordinata(b) la pila è composta da elementi tutti uguali(c) la pila è composta da elementi tutti distinti

20. In un piolo A sono impilati, nel loro centro, dei dischi di diverse dimen-sioni. L’esecutore è in grado di contare i dischi che si riesce a vederein una proiezione verticale guardando dall’alto; ad esempio se si vedeun solo disco significa che il disco più grande è posto in alto. Sono adisposizione altri due pioli B e C che possono essere usati per spostaretemporaneamente i dischi. Ordinare i dischi lasciandoli, alla fine, nelpiolo A.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 220: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

210 CAPITOLO 12. SPOSTARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 221: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 13

Scambiare

Cambiando l’ordine degli addendi il risul-tato non cambia.Proprietà commutativa dell’addizione

Il problema di scambio si basa sui concetti di posizione e di oggetto loca-lizzato ad una data posizione. In generale si tratta di cambiare di posto dueoggetti localizzati in due posizioni, in modo tale che, effettuato lo scambio, idue oggetti si trovino uno alla posizione dell’altro.

L’operazione di scambio è frequentemente utilizzata nella programmazionedove, generalmente, assume la forma di scambio fra variabili. Nonostantequesto problema costituisca un banale esercizio di programmazione, esso puòdiventare lo stimolo per interessanti approfondimenti.

211

Page 222: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

212 CAPITOLO 13. SCAMBIARE

13.1 Scambio di variabili

Il problema dello scambio di due variabili consiste nella modifica dei valoricontenuti in due variabili, come schematizzato nella figura 13.1.

β α

α βsituazione prima

situazione dopo x y

x y

Figura 13.1: Problema dello scambio di due variabili.

Assegnate due variabili x e y scriviamo le istruzioni per scambiare i lorocontenuti. Osserviamo che la sequenza di istruzioni �x� y, y � x� non sarebbecorretta in quanto le azioni vengono eseguite sequenzialmente e pertanto ilvalore che viene assegnato alla variabile y nella seconda assegnazione è ugualeal precedente valore assunto dalla variabile x che è stata precedentementeassegnata uguale al valore iniziale di y. Queste argomentazioni risultanoancora più chiare se si descrive la tavola di traccia che permette di seguirepasso per passo l’evoluzione dell’ambiente:

istruzione a binizio α βx� y β βy � x β β

Il procedimento che esegue lo scambio di due variabili dipende dalla pos-sibilità d’uso di una variabile ausiliaria e dalla tipologia dei valori contenuti.Nel caso di due variabili generiche lo scambio può essere eseguito mediante ilricorso ad una variabile ausiliaria come descritto nell’algoritmo 71.

Algoritmo 71 - scambio di due variabili genericheInput: variabili x e yOutput: x e y sono scambiate1: t� x2: x� y3: y � t

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 223: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

13.2. SCAMBIO DI VARIABILI NUMERICHE 213

Una dimostrazione di correttezza di questo algoritmo è fornita dalla se-guente tavola di traccia:

istruzione x y tinizio α β �

t� x α β αx� y β β αy � t β α α

Osservazione. Il problema dello scambio di due variabili come sopra de-scritto è equivalente allo scambio di due oggetti qualsiasi o allo scambio deiblocchi di testa di due pile.

13.2 Scambio di variabili numericheNel caso in cui le variabili x ed y da scambiare siano di un tipo numerico, sipuò adottare il seguente algoritmo 72 che non richiede l’uso di alcuna variabileausiliaria. Per convincersene basta generare la tavola di traccia dell’algoritmo,con valori generici delle due variabili x ed y da scambiare.

Algoritmo 72 - scambio di due variabili numericheInput: variabili numeriche x e yOutput: x e y sono scambiate1: x� x � y2: y � x � y3: x� x � y

La dimostrazione di correttezza dell’algoritmo può essere basata sulla se-guente tavola di traccia:

istruzione x yinizio α β

x� x � y α � β βy � x � y α � β αx� x � y β α

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 224: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

214 CAPITOLO 13. SCAMBIARE

13.3 Scambio di variabili booleaneLo scambio di due variabili booleane x, y può essere svolto mediante il seguentealgoritmo.

Algoritmo 73 - scambio di 2 variabili booleaneInput: variabili booleane x, y da scambiareOutput: variabili booleane x, y scambiate1: x� x x y2: y � x x y3: x� x x y

La dimostrazione che questo algoritmo di scambio è corretto può esseresvolta mediante una tavola di traccia che evidenzia l’evoluzione dello statodelle variabili in corrispondenza delle possibili instanziazioni iniziali (False,True) delle variabili x ed y.

istruzione x y x y x y x y

inizio F F T F F T T Tx� x x y F F T F T T F Ty � x x y F F T T T F F Tx� x x y F F F T T F T T

13.4 Generalizzazione del problemaConsideriamo ora il problema di scambio ciclico di tre variabili come descrittodallo schema che segue:

β γ

α

y z

x

��

��

-

@@

@@I

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 225: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

13.4. GENERALIZZAZIONE DEL PROBLEMA 215

Un procedimento spontaneo di soluzione è quello che usa una variabile au-siliaria t; il risultato desiderato viene raggiunto in quattro passi consecutividescritti dalla seguente figura:

α

β

γ

t

x

z

y

?

1

� 2

6

3

-4

Le istruzioni che descrivono questo procedimento sono:

t� xx� yy � zz � t

Ci chiediamo ora, nel caso in cui le variabili x, y e z siano numeriche,se lo scambio ciclico di tre variabili sia possibile anche senza l’ausilio di unavariabile ausiliaria come sopra. In questo caso non è facilmente applicabi-le l’accorgimento di somme e sottrazioni applicato al caso precedente delloscambio di due variabili numeriche. Tale difficoltà sorge dal fatto che non siriusce a dominare completamente il problema. Una strada per la soluzionedel problema emerge notando che lo scambio ciclico delle tre variabili x, y e zpuò essere svolto risolvendo i seguenti due sottoproblemi:

P1 : scambia x con y

P2 : scambia y con z

Chiaramente le precedenti due istruzioni non costituiscono la soluzione effet-tiva del problema assegnato in quanto non sono direttamente eseguibili dallamacchina (a meno che non ammettiamo che la macchina sappia scambiare duevariabili come operazione elementare) ma costituiscono il primo passo versola soluzione; si potrebbe dire che abbiamo posto un punto di appoggio per lacostruzione del cammino risolutivo del problema. La scomposizione in duesottoproblemi (di scambio di due variabili) ha, inoltre, il vantaggio che adesso

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 226: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

216 CAPITOLO 13. SCAMBIARE

non è più necessario avere sotto controllo tutto il problema e saper gestirecontemporaneamente tre variabili ma è sufficiente focalizzare separatamentesui singoli sottoproblemi che coinvolgono due sole variabili. La soluzione delproblema originale si ottiene unendo le due soluzioni dei due sottoproblemi.È questa una situazione ideale per poter facilmente rispondere al quesito soprapostoci. La soluzione di P1 si esprime come segue:

x� x � yy � x � yx� x � y

mentre la soluzione di P2 come segue:

y � y � zz � y � zy � y � z

Data la simmetria con cui compaiono i due operandi x e y nella formulazionedel problema P1, la soluzione complessiva del problema di scambio ciclico puòessere espressa anche nella seguente formulazione:

y � y � xx� y � xy � y � xy � y � zz � y � zy � y � z

Tale soluzione può essere resa più compatta raggruppando la terza e la quartaassegnazione nella singola assegnazione y � y � x � z.

13.5 L’aritmetica dei secchi d’acquaConsideriamo il seguente problema. Ci troviamo davanti ad una fontana edabbiamo due secchi, di forme diverse, che denoteremo con A e B, ciascunocontenente dell’acqua. Il problema consiste nello scambiare le quantità d’ac-qua contenute nei due secchi, in modo da avere nei due secchi delle quantitàinvertite rispetto alla situazione di partenza. Ammettiamo che siano possibilile seguenti azioni elementari:

• mettere un segno sul secchio in corrispondenza del livello dell’acqua

• travasare acqua da un secchio all’altro (senza usare altri recipienti)

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 227: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

13.5. L’ARITMETICA DEI SECCHI D’ACQUA 217

• attingere acqua dalla fontana

Supponiamo che i due secchi siano sufficientemente capienti a contenere dellequantità d’acqua quanto serva. Avendo supposto che i due secchi siano diforme diverse, risulta inutile, oltre che non ammesso in base alle ipotesi fissatesopra, l’eventuale possibilità di segnare su un secchio una tacca con riferimentoal livello contenuto nell’altro secchio.

situazione iniziale situazione finale

Figura 13.2: Il problema dello scambio dell’acqua di due secchi.

Se si pensa ad un secchio come ad una variabile numerica (non negativa)che contiene un valore uguale al numero dei litri in esso contenuti, si rilevafacilmente che il problema di travaso dei secchi è analogo a quello di scambiodi due variabili (senza fare ricorso ad alcuna variabile ausiliaria). Sulla basedi questa analogia potremmo supporre che l’algoritmo risolutivo del problemasia della forma

A� A �BB � A �BA� A �B

Affinché tali scritture costituiscano la descrizione di un algoritmo risolutivodel problema, dobbiamo attribuire ad esse un significato ed inoltre l’azioneche esse descrivono deve essere eseguibile in termini delle azioni elementaridi cui è capace l’esecutore. Affinché l’algoritmo porti al risultato desiderato,il significato da attribuire alle diverse istruzioni deve essere corrispondentea quanto avviene per le variabili numeriche. Ad esempio, i significato daattribuire alla scrittura

A� A �B

è il seguente:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 228: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

218 CAPITOLO 13. SCAMBIARE

metti in A una quantità d’acqua pari a quella che c’era prima inA più la quantità di B senza modificare la quantità di B

Notiamo che in questa azione deve essere rispettata la condizione di non-overflow che impone di avere dei secchi sufficientemente capienti. Osserviamoinoltre che tale azione potrebbe essere erroneamente interpretata con Travasain A il contenuto di B ma, chiaramente, questa azione non rappresenta quelloche intendiamo, essendo equivalente alla seguente sequenza di due azioni:

A� A �BB � 0

Risulta dunque chiaro che per poter eseguire l’azione rappresentata da A� A�B dovremmo attingere acqua dalla fontana. Equivalentemente, il significatodella scrittura

A� A �B

è:

metti in A una quantità d’acqua pari alla differenza dei due secchiA e B (senza modificare la quantità di B)

In questa azione non c’è pericolo di incorrere in una condizione di underflow inquanto, a questo punto, nel problema da noi considerato, si avrà sicuramenteche la quantità d’acqua di A è superiore a quella di B. In definitiva, ilproblema risulta risolubile se l’esecutore è in grado di eseguire delle istruzionidella forma

x� x � yx� x � yx� y � x

Le azioni elementari che risolvono il compito sono:

• x� x � y:

1. segna l’orlo di y2. travasa y in x3. riempi con acqua della fontana il secchio y fino al segno di y

• y � x � y:

1. segna l’orlo di y

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 229: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

13.5. L’ARITMETICA DEI SECCHI D’ACQUA 219

2. svuota y3. travasa da x ad y fino al segno di y

• x� y � x:

1. segna i due orli di x ed y2. svuota x3. travasa da y a x fino al segno di x4. svuota x5. travasa tutto y in x6. riempi y fino al segno di y

Il procedimento risolutivo risulta così completamente descritto essendo definitoin termini delle azioni elementari che si era ammesso fossero effettivamenteeseguibili dall’esecutore.

Osservazione. È interessante notare come un banale esercizio di pro-grammazione relativo allo scambio di due variabili diventi uno spunto di ideeprofonde. In particolare si possono attivare diverse strategie a seconda deltipo dei valori da scambiare.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 230: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

220 CAPITOLO 13. SCAMBIARE

13.6 Esercizi1. Si vuole ruotare in modo circolare 3 variabili numeriche secondo lo

schema sottoriportato.

β γ

α

y z

x

����

-

@@

@@I

Risolvere il problema nelle seguenti tre ipotesi:

(a) l’esecutore è in grado di eseguire azioni di scambio fra due variabili(b) sono consentite assegnazioni ed è possibile usare delle variabili au-

siliarie di appoggio(c) sono consentite assegnazioni ma non è possibile usare variabili au-

siliarie di appoggio

Discutere come in questo esercizio si evidenzia il principio di complessitàdella soluzione. Evidenziare dove e come sono intervenute le metodolo-gie top-down e bottom-up.

2. Dato un ambiente costituito da tre variabili x, y, z con i valori associati,scrivere una sequenza di assegnazioni che abbia l’effetto di assegnare aciascuna variabile la somma delle altre due (con riferimento ai valoriiniziali dell’ambiente). Svolgere l’esercizio nei seguenti due casi:

(a) utilizzando delle altre variabili ausiliarie(b) senza utilizzare altre variabili ausiliarie

Suggerimento: per il caso (b) risulta utile evidenziare il procedimentomediante una tavola di traccia.

3. Stabilire se i seguenti due algoritmi sono equivalenti. Suggerimento:usare una tavola di traccia.

Algoritmo A: Algoritmo B:

scambia x� y scambia x� zscambia y� z scambia x� y

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 231: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

13.6. ESERCIZI 221

4. Dimostrare che i seguenti due algoritmi sono equivalenti e produconol’effetto di ruotare le quattro variabili x, y, z, w in modo circolare insenso antiorario. Suggerimento: usare una tavola di traccia.

Algoritmo A: Algoritmo B:

scambia x� y scambia x� zscambia y� w scambia x� yscambia y� z scambia z � w

5. Ruotare in modo ciclico sinistrorso i contenuti di quattro variabili nu-meriche a, b, c, d, senza fare uso di altre variabili: a � b, b � c, c � d,d� a. Suggerimento: scomporre il problema in sottoproblemi.

6. Ruotare in modo ciclico sinistrorso 3 variabili booleane x, y, z, senza fareuso di altre variabili.

7. Discutere se e per quali tipi di numeri la seguente porzione di algoritmoesegue lo scambio delle variabili x e y.

x� x � yy � x � yx� y � x

8. Discutere se la seguente porzione di algoritmo esegue lo scambio dellevariabili booleane x e y.

x� x � yy � x � yx� x � y

9. Ordinare tre variabili mediante degli scambi.

10. Dati 3 oggetti in tre posizioni A, B e C, ruotarli in modo ciclico. Èpossibile appoggiare un oggetto su un altro, costruendo delle pile.

11. Discutere quale struttura algebrica deve avere un insieme affinché sipossano scambiare due suoi elementi senza utilizzare una terza variabile.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 232: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

222 CAPITOLO 13. SCAMBIARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 233: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 14

Confrontare

Ma nel commensurar d’i nostri gaggicol merto è parte di nostra letizia,perché non li vedem minor né maggi.

Dante, Paradiso, Canto VI, versi 118-120

Un confronto fra due oggetti di un generico insieme, non necessariamentenumerico, può essere espresso in diverse forme. Nella forma più elementare ilconfronto consente di stabilire se due elementi siano uguali o diversi tra loroe viene espresso mediante gli operatori � e x. Nel caso in cui i due elementiappartengano ad un insieme sul quale sia definito un criterio d’ordine fragli elementi, il confronto viene espresso con uno degli operatori di confronto�,x,@,A,B,A,C.

Il risultato di un confronto fornisce come risultato un valore logico ve-ro o falso; ciò permette di selezionare fra due alternative e costituisce lacomponente fondamentale del controllo di selezione che si utilizza in moltialgoritmi.

223

Page 234: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

224 CAPITOLO 14. CONFRONTARE

14.1 Confronto fra elementi

Il confronto fra due generici elementi x ed y confrontabili può essere descrittomediante il seguente nodo binario:

x � y

v f

In taluni casi da un nodo si possono dipartire più di due alternative, in fun-zioni delle sottocondizioni esclusive (ad intersezione vuota) e complete (la lorounione fornisce il valore di verità vero). Ad esempio, una generica relazione �di confronto fra due elementi x ed y sui quali sia definito un criterio d’ordinepuò essere ripartita nelle sottocondizioni @,�,A, come evidenziato nella figurache segue:

x � y

@ � A

Un nodo a più di due alternative può sempre essere scomposto in nodi a duesole alternative. Ad esempio, il nodo descritto sopra può essere trasformatocome segue:

x @ y

v

x � y

v f

14.2 Alberi di decisione

Un albero di decisione è un albero, generalmente binario, avente in ogni nodouna condizione che, valutata, consente di decidere il cammino attraverso ilquale arrivare al risultato presente in un nodo foglia. La radice dell’alberocostituisce la prima condizione che viene valutata. I nodi non terminali di un

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 235: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.2. ALBERI DI DECISIONE 225

albero di decisione contengono solitamente una condizione logica che, valutata,fornisce il valore vero (v) o falso (f), definendo così due cammini alternativi.

Gli alberi di decisione costituiscono un utile formalismo grafico di supportoper descrivere la soluzione di molti problemi.Esempio 113. L’albero di decisione riportato nella figura 14.1 descrive il pro-cedimento per determinare il massimo fra 3 elementi.

x A y

x A z

x

v

z

f

v

y A z

y

v

z

f

f

Figura 14.1: Albero di decisione per determinare il massimo fra x, y, z.

L’albero di decisione riportato nella figura 14.1 può essere espresso me-diante l’algoritmo 74.

Algoritmo 74 - Determinazione del massimo fra x, y, zInput: numeri x, y, zOutput: massimo fra x, y, z1: if x A y then2: if x A z then3: return x4: else5: return z6: end if7: else8: if y A z then9: return y

10: else11: return z12: end if13: end if

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 236: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

226 CAPITOLO 14. CONFRONTARE

In notazione alternativa l’albero di decisione riportato nella figura 14.1 puòessere descritto mediante l’espressione

if�x A y, if�x A z, x, z�, if�y A z, y, z��Un albero di decisione avente i nodi foglia dei risultati costituiti da valori

logici può essere tradotto in modo equivalente mediante un’espressione logica.Esempio 114. Il seguente albero di decisione descrive il procedimento perstabilire se fra tre elementi x, y, z esattamente due siano uguali fra loro.

x � y

x � z

FALSE

v

TRUE

f

v

x � z

TRUE

v

FALSE

f

f

Figura 14.2: Albero di decisione per decidere se fra tre elementi x, y, zesattamente due siano uguali fra loro.

Questo albero di decisione è esprimibile mediante la seguente espressionelogica: ��x � y� , �x x z�� - ��x x y� , �x � z��14.3 Confronti con le bilanceLe bilance a due piatti sono uno strumento per confrontare il peso di dueoggetti (o di due insiemi di oggetti), posti su piatti diversi.

Figura 14.3: Una bilancia a due piatti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 237: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.3. CONFRONTI CON LE BILANCE 227

Esempio 115. Supponiamo di disporre di una bilancia a due piatti che permettedi decidere se due oggetti abbiano lo stesso peso, ma non consenta di deciderequale dei due oggetti, se di peso diverso, pesi più dell’altro. Il problema checonsideriamo è il seguente:

Determinare la moneta (falsa) di peso diverso, fra 12 monete.

Indicando con m1,m2, . . . ,m12 le 12 monete, con A � B il confronto dipesatura fra i due insiemi A e B di monete, con v (vero) ed f (falso) l’esitodella pesatura e con F A la soluzione del problema di determinare la monetafalsa dell’insiemeA, un primo abbozzo di un procedimento risolutivo può esseredescritto mediante l’albero di decisione riportato in figura 14.4. Con questasoluzione parziale ci si è ricondotti ai tre sottoproblemi P1, P2, P3 evidenziaticon un riquadro a linea tratteggiata nella figura 14.4; questi tre sottoproblemisono fra loro simili: per ciascuno di essi si tratta di individuare la moneta falsafra quattro monete.

P1

P2 P3

F�m9,m10,m11,m12� F�m1,m2,m3, . . . ,m8�

F�m5,m6,m7,m8� F�m1,m2,m3,m4�

�m1 �m2 �m3 �m4� � �m5 �m6 �m7 �m8��

���

@@@@R

v f

�m1 �m2 �m3 �m4� � �m9 �m10 �m11 �m12��

���

@@@@R

v f

Figura 14.4: Albero di decisione per il problema delle 12 monete.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 238: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

228 CAPITOLO 14. CONFRONTARE

L’albero di decisione di figura 14.4 può essere descritto mediante l’algorit-mo 75.

Algoritmo 75 - Algoritmo per determinare la moneta falsa fra 12Input: pesi m1, m2, . . . , m12 di 12 moneteOutput: moneta falsa1: if �m1 �m2 �m3 �m4� � �m5 �m6 �m7 �m8� then2: F �m9,m10,m11,m12�3: else if �m1 �m2 �m3 �m4� � �m9 �m10 �m11 �m12� then4: F �m5,m6,m7,m8�5: else6: F �m1,m2,m3,m4�7: end if

Indicando con a, b, c, d i pesi delle quattro monete che compaiono neitre sottoproblemi P1, P2, P3, la soluzione del sottoproblema F �a, b, c, d� puòessere ottenuta mediante l’albero di decisione riportato in figura 14.5 dove,nell’ultima riga della figura, sono evidenziate le monete false nei diversi casi.

a � b

a � c

d

v

c

f

v

a � c

b

v

a

f

f

Figura 14.5: Albero di decisione per il problema delle 4 monete.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 239: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.3. CONFRONTI CON LE BILANCE 229

In notazione algoritmica l’albero di decisione descritto nella figura 14.5 puòessere espresso come riportato nell’algoritmo 76.

Algoritmo 76 - Determinazione della moneta falsa fra 4Input: pesi a, b, c, d di quattro moneteOutput: moneta falsa1: if a � b then2: if a � c then3: la moneta falsa è d4: else5: la moneta falsa è c6: end if7: else8: if a � c then9: la moneta falsa è b

10: else11: la moneta falsa è a12: end if13: end if

L’albero di decisione completo, corrispondente all’albero riportato nellafigura 14.4, si ottiene sostituendo l’albero di decisione della figura 14.5 neitre punti corrispondenti ai tre sottoproblemi P1, P2, P3 evidenziati nella fi-gura 14.4, istanziando i parametri a, b, c, d con i valori effettivi di ciascunsottoproblema; viene così ricostruita la soluzione complessiva del problemaoriginale (algoritmo 75). Il massimo numero di pesate necessarie per arrivarealla decisione è dato dall’altezza dell’albero, ossia 3.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 240: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

230 CAPITOLO 14. CONFRONTARE

14.4 Contare con le bilanceConsideriamo il seguente problema:

Un sacco contiene molte palline di al più due pesi diversi maall’apparenza uguali. Determinare quante sono le palline diciascuno dei due pesi, utilizzando una bilancia a due piatti.Descrivere un algoritmo per risolvere il problema proposto. Sirichiede di gestire anche il caso in cui le palline siano tutte diuno stesso peso.

Questo problema può essere risolto come descritto nell’algoritmo 78.

Algoritmo 77 - Conteggio di sfereInput: insieme S di sfere di due pesiOutput: numeri m e n delle sfere dei due tipi1: if ci sono sfere nell’insieme S then2: sposta una sfera dall’insieme S al piatto A3: m� 14: else5: m� 06: end if7: n� 08: while ci sono sfere nell’insieme S do9: sposta una sfera dall’insieme S al piatto B

10: if piatto A = piatto B then11: incrementa m di 112: else13: incrementa n di 114: end if15: svuota piatto B16: end while17: return �m,n�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 241: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.5. PESARE CON LE BILANCE 231

14.5 Pesare con le bilance

Se si dispone di pesi di riferimento noti, le bilance a due braccia possono essereutilizzate per pesare oggetti.

Esempio 116. Avendo a disposizione n pesi unitari e volendo pesare deglioggetti di peso multiplo dell’unità, si riesce a pesare oggetti con pesi da 1 a n.Questo procedimento di pesatura può essere descritto mediante l’algoritmo 78.

Algoritmo 78 - Pesatura di un oggettoInput: oggetto da pesareOutput: peso dell’oggetto1: metti l’oggetto su un piatto2: azzera il contatore p dei pesi3: while la bilancia non è in equilibrio do4: aggiungi un peso sul piatto dei pesi5: incrementa p di 16: end while7: return p

È noto dalla pratica che con una bilancia a due braccia l’operazione dipesatura di oggetti risulta più semplice se si dispone di pesi campione multiplidell’unità, ad esempio, nel sistema metrico CGS, 1g, 10g, 100g.

Esempio 117. Con pesi di 1,2 e 4 unità si riesce a pesare oggetti con pesida 1 a 7 unità, secondo la tabella 14.1 delle pesature che cui è riportatoil peso dell’oggetto e la composizione dei pesi campione equivalenti al pesodell’oggetto.

peso dell’oggetto pesi campione1 12 23 2 � 14 46 4 � 27 4 � 2 � 1

Tabella 14.1: Tabella delle pesate per oggetti con pesi da 1 a 7.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 242: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

232 CAPITOLO 14. CONFRONTARE

Generalizziamo il precedente esempio 117. Supponiamo di voler pesareoggetti con pesi multipli dell’unità, avendo a disposizione una bilancia a duepiatti ed un insieme di n singoli pesi campione di 1,2,4,8, . . . ,2n�1. In questasituazione, ipotizzando di mettere i pesi campione su uno dei due piatti dellabilancia e l’oggetto da pesare nell’altro piatto, si riesce a pesare oggetti conpesi da 1 a 2n � 1 unità. L’algoritmo è il seguente.

Algoritmo 79 - Pesatura di un oggettoInput: oggetto x da pesareOutput: peso dell’oggetto1: siano P1, P2, . . . , Pn i pesi dal più piccolo (P1 � 1) al più grande (Pn � 2n�1)2: metti l’oggetto x da pesare sul piatto A3: peso� 04: while i due piatti A e B non è in equilibrio do5: metti sul piatto B il peso P più grande fra quelli non ancora usati6: while A @ B do7: cambia il peso P con quello immediatamente più piccolo8: end while9: peso� peso � P

10: end while11: return peso

Dall’analisi della tabella 14.1 e dall’algoritmo 79 emerge l’analogia con larappresentazione binaria dei numeri naturali.

14.6 Pesare mischiando pesi ed oggetti

Le potenzialià di pesatura di una bilanciano aumentano se si ammette cheche oggetti e pesi possano essere messi indifferentemente su uno dei due piattidella bilancia. Questa estensione corrisponde al passaggio da una aritmeticaesclusivamente addittiva ad un’aritmetica anche sottrattiva, come illustra ilseguente esempio.

Esempio 118. Supponiamo di avere una bilancia a due piatti e due pesi di 1 e3 unità, e di avere la possibilità di posizionare i pesi su entrambi i piatti dellabilancia. In queste ipotesi si riesce si riesce a pesare oggetti di pesi 1, 2, 3 e4 unità, basandosi sulle seguenti identità che corrispondono alla posizione di

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 243: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.6. PESARE MISCHIANDO PESI ED OGGETTI 233

equilibrio della bilancia sulla quale è posizionato l’oggetto di peso x.

x � 11 � x � 3

x � 3x � 1 � 3

Esempio 119. Con la premessa descritta nell’esempio 118, consideriamo ilseguente problema:

Determinare il peso di 4 pesi campione in modo da pesare tuttigli oggetti da 1 a 40 unità di peso, nell’ipotesi di poter metterei pesi su entrambi i piatti della bilancia.

Osserviamo che se abbiamo un insieme di pesi che permette di pesareoggetti di peso da 1 a n unità, allora con un nuovo peso p � 2n�1 kg possiamoarrivare a pesare fino a 3n � 1. Ponendo 3n � 1 � 40 si ottiene n � 13 e quindip � 2n�1 � 27. Il quarto peso è 27 e gli altri tre devono permetterci di pesareda 1 a 13. Ponendo allora 3n�1 � 13 si ottiene n � 4 e quindi p � 2n�1 � 9. Ilterzo peso è 9 e gli altri due devono permetterci di pesare da 1 a 4. Procedendoanalogamente, si trova che gli ultimi due pesi sono di 3 e 1. Dunque i quattropesi cercati sono: 1,3,9,27.

Osservazione. I valori 1,3,9,27 trovati corrispondono alle prime potenzenaturali di 3; questa regolarità è motivata dal fatto che potendo mettere i pesicampione su entrambi i piatti equivale ad avere nella rappresentazione dellecifre dei pesi che sono 0,1,� 1, con i significati descritti nella tabella 14.2. Inquesto modo si ricade su un sistema di numerazione ternario, e questo motivail perché dei valori 1,3,9,27

peso significato0 il peso non è usato1 il peso si trova nel piatto in cui non si trova x�1 il peso si trova nel piatto in cui si trova x

Tabella 14.2: Tabella del significato dei pesi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 244: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

234 CAPITOLO 14. CONFRONTARE

14.7 Pesare oggetti di pesi frazionariUna bilancia a due piatti può essere usata anche per pesare oggetti di pesifrazionari.Esempio 120. Consideriamo il seguente problema:

Si ha un mucchio di sfere di acciaio uguali fra loro, dei pesidi k unità ed una bilancia a due piatti. Determinare quantopesa una sfera (si supponga che il numero delle sfere e dei pesia disposizione sia sufficientemente grande e che il peso dellesfere sia commensurabile con k).

Indicando con A e B i due piatti della bilancia sui quali vengono posti, rispet-tivamente, i pesi e le sfere, un procedimento risolutivo può essere descritto co-me riportato nell’algoritmo 80; la terminazione di questo algoritmo è garantitadall’ipotesi di commensurabilità fra k ed il peso delle sfere.

Algoritmo 80 - Pesatura di pesatura di una sferaInput: sfera da pesare, peso k del campioneOutput: peso della sfera1: metti un peso sul piatto A2: metti una sfera sul piatto B3: while i piatti della bilancia non sono in equilibrio do4: if il piatto A è più alto (pesa meno) del piatto B then5: aggiungi un peso sul piatto A6: else7: aggiungi una sfera sul piatto B8: end if9: end while

10: m� il numero dei pesi sul piatto A11: n� il numero delle sfere sul piatto B12: p�mk~n13: return p

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 245: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.8. ORDINARE CON LE BILANCE 235

14.8 Ordinare con le bilanceUna bilancia può essere utilizzata per ordinare degli oggetti. Ad esempiosi possono ordinare per pesi crescenti due oggetti mediante una sola pesatacomparativa. Se gli oggetti da ordinare sono più di due il procedimento diordinamento richiederà più pesate, come descritto nel seguente esempio.Esempio 121. Ordinare 3 oggetti per pesi crescenti usando una bilancia com-parativa a due bracci.

Il procedimento può essere espresso a parole come segue:

Siano a, b, c i tre oggetti da ordinare. Con al massimo 3 pesatesi risolve il problema: la prima determina se a è più leggero dib; la seconda determina se b è più leggero di c; se b è più leggerodi c, il problema è risolto, altrimenti occorre confrontare a conc; in quest’ultimo confronto se b è più leggero di c il problemaè risolto, altrimenti serve un ulteriore confronto.

La soluzione è descritta nell’albero di decisione riportato nella figura 14.6.

a B b

b B c

a B b B c

v

a B c

a B c B b

v

c B a B b

f

f

v

a B c

b B a B c

v

b B c

b B c B a

v

c B b B a

f

f

f

Figura 14.6: Albero di decisione per stabilire come sono ordinati tre oggettia, b, c. I nodi interni denotaziono un’operazione di confronto mentre i nodifoglia denotano la situazione di ordinamento dei tre oggetti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 246: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

236 CAPITOLO 14. CONFRONTARE

14.9 Esercizi1. Descrivere, mediante un albero di decisione, un procedimento per risol-

vere i seguenti problemi. Tradurre l’albero di decisione in un algoritmo.Stabilire quante pesate, al massimo, sono necessarie.

(a) Determinare il più leggero fra tre oggetti di pesi diversi.(b) Determinare i due più leggeri fra tre oggetti di pesi diversi.(c) Determinare gli oggetti più pesanti fra tre oggetti (non necessaria-

mente di pesi diversi).(d) Stabilire se tre oggetti hanno lo stesso peso.(e) Stabilire se tre oggetti hanno pesi tutti diversi fra loro.(f) Stabilire se tre oggetti sono disposti in ordine di peso crescente.

2. Disponendo di una bilancia a due piatti, stabilire se 4 monete sono tuttedi peso diverso. Stabilire quante pesate, al massimo, sono necessarie.

3. Determinare quanti sono i pesi diversi di 3 oggetti.

4. Con riferimento al problema delle 12 monete presentato nell’esempio 115.disponendo di una bilancia a due piatti che permette di distinguere sedue oggetti pesano uguale o, altrimenti, quale dei due pesa di più, de-terminare la moneta falsa e stabilire se pesa di più o di meno dellealtre.

5. Si hanno 27 palline simili, una delle quali pesa leggermente di più dellealtre. Disponendo di una bilancia a due piatti, determinare la pallinadiversa, con sole 3 pesate.

6. Si hanno 5 monete apparentemente uguali; una di queste, falsa, è dirame mentre le altre 4, autentiche, sono di bronzo. Si vuole individuarela moneta falsa disponendo di una bilancia a due piatti. Descrivere unprocedimento risolutivo, mediante un albero di decisione a 3 alternativee successivamente tradurlo in un algoritmo. Si tenga presente che ilbronzo è una lega di rame e stagno e che il peso specifico del rame èmaggiore del peso specifico dello stagno.

7. Si hanno 4 monete apparentemente uguali, a due a due di peso uguale esi dispone di una bilancia a due piatti. Descrivere, mediante un albero didecisione, un procedimento per ripartire le quattro monete in due coppieciascuna formata da monete uguali. Tradurre l’albero di decisione inun algoritmo.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 247: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

14.9. ESERCIZI 237

8. Sono date 5 palline, all’apparenza uguali, di cui 2 di un peso e 3 di unaltro peso. Usando una bilancia a due piatti, ripartire in base al loropeso le palline in due gruppi ciascuno composto da palline di ugualepeso.

9. Sono dati 5 oggetti di pesi diversi e si dispone di una bilancia a due piat-ti. Descrivere un algoritmo per ordinare gli oggetti (un procedimentoottimale richiede 7 pesate).

10. Stabilire quanti confronti binari sono necessari per determinare il massi-mo fra n elementi di un insieme. Stabilire, in funzione di n, la minimae la massima altezza di un albero di decisione binario per determinare ilmassimo di n elementi.

11. Disponendo di una bilancia a due piatti, stabilire se un dato insieme din oggetti è composto da oggetti tutti dello stesso peso. Descrivere ilprocedimento mediante un albero di decisione e mediante un algoritmo.

12. Disponendo di una bilancia a due piatti, descrivere un albero di decisioneper stabilire se 4 monete hanno tutte lo stesso peso. Tradurre l’alberodi decisione in un algoritmo.

13. Un sacco contiene molte palline di al più due pesi diversi anche se al-l’apparenza uguali. Determinare quante sono le palline di ciascuno deidue pesi, utilizzando una bilancia a due piatti. Descrivere un algoritmoper risolvere il problema proposto. Si richiede di gestire anche il casoin cui le palline siano tutte di uno stesso peso.

14. Disponendo di una bilancia a due piatti, determinare l’oggetto più pe-sante fra quelli contenuti in un dato insieme composto da oggetti di pesidiversi. Con riferimento all’algoritmo descritto, stabilire cosa succedenel caso in cui ci siano oggetti di uguale peso.

15. Determinare il peso intero di un oggetto, avendo a disposizione n pesicampione di 1,2, . . . ,2n�1 unità ed una bilancia a due piatti su cui si puòposare l’oggetto su un piatto ed i pesi sull’altro.

16. Determinare il peso intero di un oggetto, avendo a disposizione n pesicampione di 1,3,9, . . . ,3n�1 unità ed una bilancia a due piatti su cui sipuò posare l’oggetto ed i pesi indifferentemente sui due piatti.

17. Dimostrare che, nell’ipotesi che i pesi possano essere messi in entrambi ipiatti della bilancia, se l’insieme di k pesi �p1, . . . , pk� permette di pesare

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 248: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

238 CAPITOLO 14. CONFRONTARE

oggetti di peso (multiplo dell’unità) da 1 a n, allora l’aggiunta di un altropeso pk�1 � 2n� 1 permette di pesare oggetti di pesi da 1 a 3n� 1 unità.

18. Disponendo di una bilancia a due piatti, descrivere un albero di decisioneper stabilire se 3 date monete a, b, c sono in ordine, ossia a B b B c.Tradurre l’albero di decisione in un algoritmo.

19. Ordinare 4 oggetti usando una bilancia a due piatti.

20. Ordinare 5 oggetti usando una bilancia a due piatti.

21. Determinare il numero di pesate necessarie per ordinare n oggetti me-diante una bilancia a due piatti.

22. Si consideri la situazione di confronti fra oggetti mediante una bilanciacomposta, come descritto nella figura che segue.

����

����

���

����

rr r

a����b

c��@@��@@

b

Scrivere un’espressione equivalente alla situazione descritta in figura.Ridurre tale espressione. Motivando le affermazioni, determinare lasequenza ordinata dei tre oggetti a, b e c.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 249: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 15

Contare

Vogliamo che i nostri numeri possano es-sere usati per contare gli oggetti comu-ni, il che comporta che i numeri abbianoun significato «definito», e non solo alcuneproprietà formali.B. Russel, Introduzione alla filosofiamatematica

La matematica ha la specifica caratterizzazione epistemologica di trattarecon oggetti astratti; fra questi i più caratteristici sono i numeri. Per potermanipolare questi oggetti astratti si usa ricorrere ad una loro rappresentazionesimbolica. I primi numeri che l’uomo ha concepito ed utilizzato sono stati inumeri naturali che oggi conosciamo nella notazione 0,1,2,3, . . . .

I concetti di numero naturale e di contare sono strettamente legati fra loroin quanto i numeri naturali sono stati ideati proprio per contare e l’opera-zione di contare utilizza i numeri naturali. Le operazioni sono state ideatesuccessivamente come strumento a supporto del contare.

Nonostante l’apparente semplicità i problemi di conteggio sono profondi,interessanti e sollecitano interessanti strategie di problem solving.

239

Page 250: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

240 CAPITOLO 15. CONTARE

15.1 Un po’ di storiaGli antropologi sono concordi nel ritenere che l’uomo abbia elaborato la capa-cità di contare ben prima del concetto di numero. Si ritiene che la necessitàdi effettuare un qualche tipo di conteggio si sia affermata con l’evolversi dialcune attività umane, come l’allevamento di animali: ad esempio la necessitàdi verificare che un gregge portato al pascolo rientrasse al completo potevaessere risolto segnando su un bastone una tacca per ogni pecora uscita; alrientro bastava scorrere le tacche del bastone, una per ogni pecora che rientra-va, e verificare così di averne tante quante erano all’uscita; questo metodo nonpermette di stabilire quante sono le pecore ma risolve il problema. Questapratica dell’intaglio è stata in uso presso popolazioni di pastori europei fino intempi relativamente recenti.

Le prime tracce documentate di qualcosa che si suppone sia un conteggiorisalgono a circa 35.000 anni fa; si tratta di ossa di babbuino intagliate contacche, rinvenute ad Ishango, nel centro dell’Africa, che si presume indichinoun qualche tipo di conteggio (forse i giorni dei mesi di un calendario delle fasilunari).

Figura 15.1: Schema dei segni incisi sull’osso di Ishango.

Negli esempi presentati sopra viene stabilita una corrispondenza biunivocafra oggetti e tacche; e proprio questa corrispondenza sta alla base del contare.A questo stadio non c’è ancora il concetto astratto di numero, non ci sono leparole per indicare i singoli numeri, né tanto meno dei simboli; c’è solo l’attopratico del mettere in corrispondenza biunivoca due insiemi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 251: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.2. I NUMERI 241

15.2 I numeriNonostante possa sembrare che i numeri siano qualcosa di naturale e di innato,connaturato alla mente dell’uomo, il concetto di numero si è maturato durantel’evoluzione umana. Prima di arrivare al concetto di numero, l’uomo haelaborato una primordiale distinzione fra i concetti di "uno", "due" e "molti",come avviene attualmente in alcune tribù isolate in Australia, in Oceania edin Amazzonia; recentemente (2004) è stato notato che alcune tribù del Brasileusano un’analoga tripartizione delle quantità basata sui concetti di "uno"’,"pochi" e "molti". Il fatto che l’dentità "più di due = molti" sia stato uno stadiocomune nell’evoluzione culturale delle popolazioni umane è testimoniato ancheda alcune tracce che si ritrovano nelle lingue: alcune lingue antiche (greco) emoderne (sloveno ed arabo) distinguono fra singolare, duale e plurale; hannocioè parole distinte per il plurale di un sostantivo riguardante due oggetti(duale) e per quello riguardante tre o più. Altri esempi testimoniano di unapassata identità "tre = molti" si trovano in varie lingue: in latino la parola ter(tre volte) era usata anche per denotare una pluralità; in francese è evidentela comune origine di troi (tre) e tres (molti); in inglese la parola thrice (trevolte) significa anche "molti".

Per numerosità abbastanza limitate (ad esempio da 1 a 4) l’uomo ha lacapacità di stabilire il numero da associare senza procedere al conteggio 1-2-3-. . . : basta una semplice occhiata. Questo conteggio intuitivo per bassenumerosità è stato notato anche nei bambini piccoli. Per numerosità superioreuna semplice occhiata non basta più: serve contare per stabilire il numero deglielementi.

Concepito il concetto di numero, il passo successivo è consistito nel dare unnome ai singoli numeri, assegnando una parola a ciascuno di essi. Inizialmen-te queste parole avevano la valenza di aggettivi numerali: in espressioni come"due orsi" o "cinque pesci", le parole hanno lo stesso valore qualitativo di ag-gettivo, come "feroce" o "grande". Analogamente le parole "primo", "secondo","terzo", . . . avevano il valore di aggettivi che denotano la qualità ordinale di unoggetto in una serie. Solo successivamente l’uomo è arrivato a separare questiattributi dagli oggetti ai quali si riferivano. Il passo successivo è rappresenta-to dall’uso dei numeri come sostantivo, svincolandosi dagli specifici insiemi dioggetti. Il concetto di numero "cinque" ha avuto la valenza di caratteristicacomune di tutti gli insiemi formati da "cinque orsi", "cinque pesci", . . . , unasorta di proprietà di "cinqueità". Il passo finale di questa lenta evoluzioneè stato quello di usare con disinvoltura frasi come "tre è minore di cinque","due più tre fa cinque"; e queste affermazioni denotano delle proprietà generalivalide per tutti gli insiemi di "due", "tre" e "cinque" oggetti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 252: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

242 CAPITOLO 15. CONTARE

15.3 ContareContare gli elementi di un dato insieme significa stabilire una corrispondenzafra l’insieme ed un numero naturale in modo tale che il numero rappresenti lanumerosità dell’insieme. Le strategie per contare gli elementi di un insiemedipendono dalla struttura e dalle caratteristiche dell’insieme stesso.

Nel caso in cui l’insieme A non abbia alcuna struttura è necessario passa-re in rassegna, in qualche modo, gli elementi, conteggiandoli man mano chevengono considerati.Esempio 122. Se prendiamo in mano un poliedro e vogliamo contarne le faccebisogna segnare quelle già considerate, per non considerarle più volte, ed esseresicuri, alla fine, di averle considerate tutte.

Se gli elementi da contare sono disposti uno dopo l’altro, in fila o anchein ordine circolare, la strategia di conteggio diventa più agevole in quantola scansione di tutti gli elementi si fonda sul passaggio da un elemento alsuccessivo.Esempio 123. Per contare i denti di una ruota dentata basta partire da undente, marcarlo in qualche modo e procedere al conteggio sequenziale deglielementi fino a che si ritorna sul dente dal quale si è partiti.

Spesso gli elementi dell’insieme A sono disposti linearmente, uno dopol’altro, ed esiste un primo ed un ultimo elemento. In queste situazioni, chesono le più frequenti, la strategia di conteggio può essere descritta mediantel’algoritmo 81 che si fonda sul criterio con cui si passa al successivo elemento.

Algoritmo 81 - Algoritmo di conteggioInput: insieme A di elementiOutput: numero di elementi di A1: considera il primo elemento di A2: inizializza n a 03: while non si è arrivati all’ultimo elemento di A do4: incrementa n di 15: passa al successivo elemento6: end while7: return n

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 253: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.4. STRATEGIE DI CONTEGGIO 243

Esempio 124. Per contare il numero di giorni che intercorrono fra due dateè sufficiente disporre della sola operazione che determina il successivo di undato giorno.

2 maggio 2010 18 ottobre 2017......................

L’algoritmo 81 ammette una interessante generalizzazione per contare glielementi soddisfacenti ad una data proprietà, modificando la linea 4 con un’i-struzione di controllo per testare se il dato elemento è soddisfacente.Esempio 125. Per contare i numeri primi minori o uguali ad un numeronaturale n si può adattare l’algoritmo 81 come segue.

Algoritmo 82 - Conteggio di numeri primiInput: numero naturale nOutput: numero di numeri primi minori o uguali a n1: inizializza p a 02: inizializza k a 13: while k B n do4: if k è primo then5: incrementa p di 16: end if7: incrementa k di 18: end while9: return p

15.4 Strategie di conteggioSpesso l’insieme di cui si vogliono contare gli elementi possiede una strutturaorganizzativa che permette di attivare delle strategie di conteggio degli ele-menti, senza passare in rassegna uno per uno tutti gli elementi dell’insieme.In alcuni casi è sufficiente utilizzare le operazioni aritmetiche elementari.Esempio 126. Per contare il numero dei numeri compresi fra due numeri natu-rali m ed n, ipotizzando che sia m B n, si ricorre all’operazione di sottrazione;il risultato è n �m � 1 .

m ns s s s s s sL.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 254: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

244 CAPITOLO 15. CONTARE

Esempio 127. Per contare il numero di quadretti di un foglio a quadretti siricorre alla moltiplicazione fra il numero m di righe ed il numero n di colonne.

m righe

n colonne

Alcune situazioni di conteggio possono essere risolte utilizzando il seguente

Principio fondamentale del contare: dati due insiemi A e B, indicando conS � S l’operazione fornisce la cardinalità di un insieme, vale la relazione

SA 8BS � SAS � SBS � SA 9BSLa proprietà espressa dalla precedente equazione può essere dimostrata

basandosi sulla notazione degli insiemi mediante diagrammi di Venn:

A BA 9B

Esempio 128. In una scuola tutti gli studenti studiano almeno una linguafra inglese o francese. Sapendo che a studenti studiano l’inglese, b studianoil francese e c studiano due lingue, applicando il principio fondamentale delcontare si può dedurre che il numero di studenti che frequentano la scuola è

a � b � c

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 255: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.4. STRATEGIE DI CONTEGGIO 245

Esempio 129. In un gruppo di n studenti a praticano l’atletica, b il basket e cstudenti non praticano alcuno sport. Indicando con x il numero di studenti chepraticano sia atletica che basket, la situazione può essere descritta medianteil seguente diagramma:

a bx

c

Basandosi su questo diagramma si ricava l’equazione

n � a � b � x � c

e quindix � a � b � c � n

Esempio 130. Nella figura che segue è riportato un grafo completo di 7 vertici,generato unendo con dei segmenti, detti lati, in tutti i modi possibili, i verticidi un poligono regolare. Il problema consiste nel determinare il numero deilati, per un generico numero n di vertici del poligono.

Il problema può essere risolto adottando diverse strategie. La prima stra-tegia consiste nel pensare ai vertici come a dei punti disposti linearmente infila; in questo caso ogni vertice va congiunto con tutti gli altri che seguono, inordinamento lineare: il primo vertice viene congiunto a n�1 vertici, il secondoa n�2 vertici, fino ad arrivare al penultimo vertice che va congiunto all’ultimo.Pertanto il numero totale dei lati è pari a

�n � 1� � �n � 2� �� � 1 �n�n � 1�

2dove nell’ultimo passaggio si fa ricorso alla formula di Gauss. In questo casoil "contare" si avvale del "sommare".

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 256: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

246 CAPITOLO 15. CONTARE

Una soluzione più immediata si basa sui seguenti due passi sequenziali:

1. ogni vertice (n) va connesso a tutti gli altri (n � 1); quindi n�n � 1�collegamenti

2. dividere per 2 in quanto ciascun collegamento viene contato due volte

Si ottiene ancora che il numero totale dei lati è pari a

n�n � 1�2

Esempio 131. Vogliamo contare il numero di regioni r individuate da n rettea due a due incidenti e non passanti in tre per uno stesso punto. La figurache segue illustra i casi per i primi quattro valori di n.

r�0� � 1 r�1� � 2 r�2� � 4 r�3� � 7 r�4� � 11

Figura 15.2: Numero di regioni r�n� determinate da n rette incidenti a due adue.

Dall’analisi di questa casistica non risulta evidente alcuna relazione cheleghi il numero n delle rette al numero r delle regioni.

L’idea risolutrice si basa sulla seguente osservazione: ogni nuova n-esimaretta incontra tutte le altre n � 1 rette ed incrementa il numero di regioni diun numero uguale al numero di rette al passo precedente più n, come descrittonella figura 15.3.

n � 1 rette

n nuoveregioni

Figura 15.3: L’intersezione fra n � 1 rette ed una trasversale genera altre nnuove regioni.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 257: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.5. CALCOLO COMBINATORIO 247

Questa idea può essere tradotta nell’algoritmo 83.

Algoritmo 83 - Numero di regioni individuate da n rette intersecantesiInput: numero n di rette intersecantesiOutput: numero r di regioni generate1: r � 12: for i from 1 to n do3: r � r � i4: end for5: return r

L’idea precedente può essere tradotta anche con la seguente relazionericorsiva:

r�n� � n � r�n � 1�Da questa relazione si può ricavare una formula chiusa come segue:

r�n� � n � r�n � 1�� n � �n � 1� � r�n � 2�� �

� n � �n � 1� �� � 2 � r�1�� n � �n � 1� �� � 2 � 1 � r�0��

n�n � 1�2

� 1

15.5 Calcolo combinatorioUn’interessante tipologia di problemi di conteggio riguarda la determinazio-ne del numero di possibili raggruppamenti formati da k elementi presi da uninsieme di n elementi. L’attributo semplice che verrà utilizzato in questo pa-ragrafo indica il fatto che i raggruppamenti sono costituiti da elementi distinti.Lo studio di questi problemi va sotto il nome di calcolo combinatorio. I pro-blemi di conteggio più semplici coinvolgono e si risolvono con le sole quattrooperazioni elementari. Ne sono conferma i seguenti esempi.

Esempio 132. Avendo a disposizione a berretti e b cappelli diversi, una personapuò coprirsi il capo in a � b modi diversi.

Esempio 133. Avendo a disposizione a giacche e b pantaloni diversi, unapersona può vestirsi in ab modi diversi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 258: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

248 CAPITOLO 15. CONTARE

15.5.1 Permutazioni

Una permutazione semplice di n oggetti distinti è una qualsiasi loro disposi-zione in fila. Il numero di permutazioni di n oggetti distinti è

P �n� � n! � 1 � 2 � 3 � �n � 1� � nEsempio 134. Le possibili permutazioni delle lettere della parola ABC sono leseguenti 1 � 2 � 3 � 6: ABC, ACB, BAC, BCA, CAB, CBA.

15.5.2 Combinazioni

Una combinazione semplice di ordine k di un insieme di n elementi è un sot-toinsieme di k elementi presi dall’insieme. Il numero di queste combinazioniè pari a

C�n, k� � n!k!�n � k�! � n � �n � 1�� �n � k � 1�

k!

Il numero C�n, k�, denotato anche con �nk�, è detto coefficiente binomiale.

Esempio 135. Con l’insieme di lettere {A,B,C,D,E} si possono formare un nu-mero di insiemi di tre elementi pari a

�52� � 5!

2! 3!� 10

15.5.3 Disposizioni

Una disposizione semplice di ordine k di un insieme di n elementi è una se-quenza di k elementi distinti. A differenza che in una combinazione, in unadisposizione è importante l’ordine con cui compaiono gli elementi.

Il numero di disposizioni di k oggetti distinti, presi da un insieme di nelementi, è pari a

D�n, k� � n � �n � 1�� �n � k � 1� � n!�n � k�!Esempio 136. Con le lettere ABCDE si possono formare 5 � 4 � 3 � 60 parolecomposte ciascuna da 3 lettere distinte.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 259: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.6. CONTEGGIO DI INSIEMI INFINITI 249

Esempio 137. Sono dati n punti su una circonferenza e tutte le corde che licongiungono. Nessuna terna di corde passa per uno stesso punto. Deter-minare il numero di intersezioni interne alla circonferenza. Ad esempio, pern � 6 si hanno 15 punti di intersezione, come descritto nella figura che segue.

La soluzione si ottiene con il seguente ragionamento: ogni punto è deter-minato da una quaterna di punti che sono gli estremi dei punti delle 2 cordeche si intersecano. Reciprocamente, ogni quaterna di punti individua 2 coppiedi corde che si intersecano in un punto interno alla circonferenza. Pertantoil numero di punti di intersezione interni alla circonferenza è pari al numerodelle quaterne di punti che si possono estrarre da un insieme di n punti, equindi è pari a �n

4�.Esempio 138. Vogliamo contare i numeri di telefono composti da 6 cifre, nellequali le due triplette sono uguali. Esempi di numeri di questo tipo sono:473473,050050. Questo problema, nonostante sia di tipo combinatorio, puòessere risolto in modo diretto ed elementare notando che i numeri si ottengonogiustapponendo due terne uguali. Dunque il numero totale dei numeri è 1000.

15.6 Conteggio di insiemi infinitiIn molte situazioni, specialmente in Matematica, si incontrano degli insiemicomposti da un numero infinito di elementi: numeri naturali, numeri interi,frazioni, numeri reali, punti di un segmento, punti della retta, punti del piano,stringhe formate da sequenze di caratteri e tanti altri. Per questi insiemiinfiniti è possibile stabilire una misura della numerosità dei loro elementi,definendo una corrispondenza biunivoca fra gli elementi dei due dati insiemiche si intende comparare. Ad esempio è possibile dimostrare che l’insiemeinfinito dei numeri naturali (numerabile) è meno numeroso dei punti di unsegmento del piano (continuo), il numero dei punti di un segmento ha la stessanumerosità dei punti di una retta e la stessa dei punti del piano.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 260: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

250 CAPITOLO 15. CONTARE

15.7 Esercizi1. Si vogliono contare i petali di una margherita. Analizzare i diversi

metodi di conteggio che si possono usare a seconda che si possano o nonsi possano staccare i petali.

2. Analizzare le differenti strategie di conteggio che vengono usate per con-tare le mele messe alla rinfusa in un cesto e per contare le mele disposteordinatamente in fila in una cassetta.

3. Analizzare le differenti strategie di conteggio con cui vengono general-mente svolti a mente da una persona i seguenti conteggi:

(a) contare i numeri compresi fra 2398 e 2401(b) contare i numeri compresi fra 1998 e 2173(c) contare i numeri compresi fra 1483 e 7485

4. Disponendo di un righello con tacche di misura ed utilizzando le quattrooperazioni aritmetiche fondamentali, contare:

(a) le righe di un foglio a righe(b) i quadretti di un foglio a quadretti

5. Dimostrare che m mucchietti di n palline contengono un numero di pal-line pari a quelle di n mucchietti di m palline. Suggerimento: si possonodisporre le palline in un reticolo rettangolare; oppure basta prendere unapallina da ciascun mucchietto e formare n mucchietti di m palline.

6. Contare il numero di quadrati 3 � 3 che si possono disegnare su unascacchiera 8 � 8. Generalizzare al caso di quadrati di q caselle per latoin una scacchiera di n � n caselle.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 261: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.7. ESERCIZI 251

7. Dato un reticolo rettangolare di punti di coordinate intere con i latiparalleli agli assi coordinati, contare il numero delle seguenti tipologiedi quadrilateri che si possono ottenere in modo che abbiano i vertici sulreticolo:

• quadrati con i lati paralleli ai lati esterni del reticolo• rettangoli con i lati paralleli ai lati esterni del reticolo• quadrati qualsiasi• rettangoli qualsisasi

8. Determinare il numero di fiammiferi necessario per costruire un reticolorettangolare di m � n quadrati per lato.

9. Contare quante sono le diagonali di un poligono di n vertici, intendendocon diagonale un segmento che unisce due vertici non contigui.

10. Dato il numero n dei vertici di un poligono regolare, si congiunga ciascunvertice con un altro vertice, saltando k vertici; ad esempio, se k � 0 sicongiunge ciascun vertice con il successivo, ottenendo un poligono di nlati. Si chiude il ciclo quando si arriva sul vertice di partenza. Nel casoin cui rimangano dei vertici isolati, si ripete il procedimento per ciascunodi essi. Determinare in funzione di n e k il numero di lati della figurache così si ottiene ed il numero delle componenti connesse del grafo. Lafigura che segue illustra la stella che si ottiene per n � 7 e k � 3.

11. Dato un insieme di n città, determinare il numero di diversi percorsi checollegano tutte le città, senza ripassare su una città già visitata.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 262: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

252 CAPITOLO 15. CONTARE

12. Determinare il numero di pallini disposti su un reticolo triangolare comedescritto nella figura che segue. Sia n il numero di pallini posti suciascun lato del triangolo.

ss ss s ss s s ss s s s s13. Determinare il numero di nodi di un albero binario disposti su n livelli,

come descritto nella figura che segue.

.

.

.

. .

.

. .

.

.

. .

.

. .

14. Fissato nel piano cartesiano un punto C di coordinate intere �x, y� eduna distanza r, contare il numero dei punti di coordinate intere contenutinella circonferenza di centro C e raggio r.

15. Contare il numero di regioni di area finita che si creano mediante n retteintersecntesi, a tre a tre non passanti per lo stesso punto.

16. Contare tutte le coppie che si possono ottenere con le 26 lettere dell’al-fabeto e le 9 cifre 1, 2, . . . , 9.

17. Contare il numero di stringhe di 8 caratteri composte dagli usuali 26caratteri alfabetici, in modo da non avere caratteri duplicati vicini.

18. Determinare il numero di squadre composte da 11 giocatori che si pos-sono formare con 15 giocatori.

19. Determinare in quanti modi si possono disporre 11 giocatori di calcioper una fotografia in cui 5 giocatori stanno in piedi e 6 sono accosciatidavanti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 263: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

15.7. ESERCIZI 253

20. Determinare in quanti modi un giocatore di carte può tenere in mano 13carte da gioco.

21. Nel gioco del poker ad ogni giocatore vengono distribuite 5 carte estratteda un mazzo di 32. Determinare in quanti modi diversi un giocatore puòricevere le carte.

22. In una classe di 24 allievi si devono eleggere 2 capiclasse. Determinarein quanti modi si può fare questa scelta.

23. Calcolare il numero di anagrammi che si possono formare con le paroleROMA ed ALESSANDRIA.

24. Un campionato a n squadre si svolge con partite di andata e ritorno.Determinare il numero di partite che vengono giocate.

25. Contare le n-stringhe palindrome che si possono costruire con k caratteri.

26. Determinare in quanti modi si possono assegnare n numeri di maglia an giocatori.

27. Ci sono n giocatori ed n maglie numerate da 1 a n, n C 13. Determinarein quanti modi si possono asegnare le maglie sapendo che le maglie 1 e13 devono essere assegnate ai due portieri.

28. Ad una gara automobilistica partecipano n piloti. Determinare quantidiversi podi si possono avere.

29. Un campionato a n squadre si svolge con partite di andata e ritorno.Determinare il numero di partite che vengono giocate.

30. Dimostrare matematicamente e motivare dal punto di vista combinatoriola seguente identità:

C�n, k� � D�n, k�P �k�

31. Determinare il numero di configurazioni del cubo di Rubik.

32. Determinare il numero di sottosequenze che si possono estrarre, mante-nendo l’ordine di posizione degli elementi, da una sequenza di lunghezzan composta da elementi distinti.

33. Determinare il numero di sottosequenze di lunghezza k che si posso-no estrarre, mantenendo l’ordine di posizione degli elementi, da unasequenza di lunghezza n composta da elementi distinti, con k B n.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 264: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

254 CAPITOLO 15. CONTARE

34. Determinare il numero di sottosequenze, composte da elementi adiacenti,che si possono estrarre da una sequenza di lunghezza n composta daelementi distinti.

35. Determinare il numero di sottosequenze, di lunghezza k, composte daelementi adiacenti, che si possono estrarre da una sequenza di lunghezzan composta da elementi distinti, con k B n.

36. Dato un reticolo m � n di maglie, determinare il numero di percorsicomposti da passi unitari verso l’alto o verso destro che partono dallacasella in basso a sinistra e portano alla casella in alto a destra.

37. Un robot si muove su un reticolo di maglie. Ad ogni passo il robot simuove orizzontalmente o verticalmente, in una delle quattro direzioni.Determinare il numero di caselle che riesce a raggiungere con un percorsodi al più n passi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 265: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 16

Sommare

π �

9801º8� ªQ

n�0

�4n�!�26390n � 1103��n!�43964n

��1

Srinivasa RamanujanFormula per il calcolo di π

L’operazione di addizione viene considerata come operazione primitiva inquanto è stata la prima ad essere concepita dall’uomo nella sua evoluzionestorica ed anche perché è la prima che ciascuno di noi ha imparato a scuo-la. Questa operazione è strettamente legata al meccanismo del contare: ilconteggio degli elementi dell’unione fra due insiemi è pari alla somma dellecardinalità dei due insiemi.

Ricorrendo all’addizione è possibile esprimere algoritmicamente anche altreoperazioni come la moltiplicazione (mediante ripetizione di addizioni), l’opera-zione fattoriale (mediante ripetizione di moltiplicazioni e, quindi, mediante ri-petizione di ripetizioni di addizioni), l’operazione di radice quadrata (medianteun algoritmo ideato da Newton), ed altre.

L’operazione di addizione costituisce anche lo strumento matematico percostruire artefatti matematici, ossia dei numeri non esprimibili direttamente.La citazione sopra riporta una generale relazione ideata da grande matematicoindiano Srinivasa Ramanujan (1887-1920) che la scoprì nel 1910 e la pubblicònel 1914.

255

Page 266: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

256 CAPITOLO 16. SOMMARE

16.1 Somme di numeriUn famoso aneddoto che riguarda il piccolo Karl Friederich Gauss (1777-1855),uno dei più grandi matematici di tutti i tempi, racconta che un giorno ilsuo maestro, per tenere gli alunni impegnati per un po’ di tempo, avesseassegnato il compito di sommare i primi 100 numeri naturali: 1 � 2 � 3 � 4 �� � 98 � 99 � 100. Il maestro pensava che tutti gli allievi adotassero unatecnica brute-force che comporta l’esecuzione di 99 addizioni, ma Gauss, cheall’epoca aveva 8 anni, poco dopo che il maestro ebbe terminato la dettaturadella consegna, si avvicinò alla cattedra e vi posò la lavagnetta sulla qualevi era scritto il risultato. Ritornò a sedere e rimase per un lungo tempocon le braccia conserte attendendo che i suoi compagni terminassero il lavoro.Alla fine il maestro controllò le lavagnette e trovò che solo quella di Gaussconteneva il risultato corretto. I dettagli storici di questo aneddoto sonoavvolti nella nebbia dell’agiografia, come avviene per i grandi personaggi. Sipuò quindi solo ipotizzare che il piccolo Karl abbia ragionato come segue:si costituiscono delle coppie di numeri: (primo,ultimo), (secondo,penultimo) ecosì via; si costituiscono 50 coppie di numeri ciascuna delle quali ha per somma101; pertanto la somma dei 100 numeri dà 5050, come correttamente scrissesulla sua lavagnetta Gauss.Esempio 139. Un’immediata generalizzazione del problema presentato sopraconsiste nel determinare la somma dei primi n numeri naturali:

1 � 2 � 3 �� � n

Una soluzione leggermente diversa a quella presentata sopra, che evita didistinguere i casi di n pari ed n dispari, consiste nel disporre gli addendi in duerighe, in una in senso crescente e nell’altra in senso decrescente, come segue:

1 2 3 � nn n � 1 n � 2 � 1

n � 1 n � 1 n � 1 � n � 1

Sommando in verticale si ottiene per ciascuna delle n coppie di numeri il risul-tato parziale n � 1; addizionando queste n somme parziali si ottiene n�n �1�; questo valore va dimezzato in quanto gli addendi 1,2,�, n sono staticonsiderati due volte. In definitiva si ottiene il risultato

s�n� � 1 � 2 � 3 �� � n �n�n � 1�

2In modo alternativo la somma 1�2�3���n può essere calcolata utilizzan-

do un’idea che si appoggia sulla formula del calcolo dell’area di un rettangolo:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 267: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16.1. SOMME DI NUMERI 257

ciascun addendo viene rappresentato mediante una riga di pallini. La struttu-ra triangolare dei pallini viene completata da un’analoga struttura triangolaredi pallini bianchi, come evidenziato nella figura che segue. Si ottiene un ret-tangolo di lati composti da n e da n � 1 pallini. Di conseguenza il rettangoloè composto da n�n � 1� pallini. I pallini neri, essendo la metà dei pallini delrettangolo, sono n�n � 1�~2, e si ottiene ancora il risultato visto sopra.

uu uu u uu u u uu u u u uu u u u u u

e e e e e ee e e e ee e e ee e ee ee

Esempio 140. Consideriamo il seguente problema:

Determinare la somma t�m,n� dei numeri naturali compresifra due dati numeri naturali m ed n, m B n.

Ovviamente non è accettabile una soluzione nella forma aperta

t�m,n� �m � �m � 1� � �m � 2� �� � n

in quanto questa scrittura non è un’espressione e neanche un algoritmo. Perquesto problema, nonostante l’apparenza, non c’è alcuna esigenza di ricorrere adei controlli ciclici; tenendo presente che la somma dei primi k numeri naturalivale s�k� � Pk

1 i � k�k � 1�~2, come visto nell’esempio precedente, si ottiene

m � �m � 1� � �m � 2� �� � n �

s�n� � s�m � 1� �n�n � 1�~2 �m�m � 1�~2 ��n2 �m2 � n �m�~2 ��n �m��n �m � 1�~2

L’espressione che costituisce la soluzione è dunque

t�m,n� � �n �m��n �m � 1�~2L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 268: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

258 CAPITOLO 16. SOMMARE

16.2 Somma di tabelleIn alcuni casi i numeri sono disposti secondo una particolare struttura geo-metrica la cui regolarità suggerisce dei metodi per calcolare la somma deglielementi.Esempio 141. Calcoliamo la somma dei numeri presenti nella seguente tabella10 � 10.

1 2 3 4 5 6 7 8 9 102 3 4 5 6 7 8 9 10 113 4 5 6 7 8 9 10 11 124 5 6 7 8 9 10 11 12 135 6 7 8 9 10 11 12 13 146 7 8 9 10 11 12 13 14 157 8 9 10 11 12 13 14 15 168 9 10 11 12 13 14 15 16 179 10 11 12 13 14 15 16 17 1810 11 12 13 14 15 16 17 18 19

In questa tabella si nota che i numeri del triangolo superiore sinistro dellatabella si bilanciano simmetricamente rispetto alla diagonale principale, dandoluogo a coppie che hanno per somma 20; pertanto il risultato è 1000.Esempio 142. Calcoliamo la somma dei numeri di una tavola pitagorica n�n.

1 2 3 . . . n

2 4 6 . . . 2n3 6 9 . . . 3n� �

n 2n 3n . . . n2

Ciascun numero della tabella è il prodotto del corrispondente numero di rigae di colonna. Pertanto la somma di tutti i numeri della tabella è pari a�1 � 2 � � � � � n�2

Sviluppando questa espressione si ottengono gli addendi corrispondenti ai pro-dotti dei numeri di riga e di colonna della tabella. Utilizzando la formula diGauss si ottiene come risultato

n2�n � 1�2

4

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 269: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16.3. ALGORITMI PER SOMMARE 259

16.3 Algoritmi per sommareSupponiamo di avere un generico insieme A � �a1, a2, . . . , an� di numeri di cuivogliamo calcolarne la somma; questa operazione è detta anche sommatoriadell’insieme A e viene denotata con uno dei seguenti simbolismi:

QA

Qx>A

xn

Qi�1ai

In molti casi i numeri dell’insieme A sono definiti mediante una regolafunzionale che suggerisce un algoritmo per calcolare la somma degli elementi.Esempio 143. La somma dei primi n numeri dispari può essere scritta in modoesteso con

1 � 3 � 5 �� � �2n � 1�oppure in modo sincopato usando il simbolo di sommatoria come segue:

n

Qk�1�2k � 1�

Nei casi in cui gli addendi che vengono sommati non presentino delle re-golarità sulle quali basare delle efficienti strategie di calcolo, una sommatoriadi addendi può essere espressa e valutata mediante un algoritmo avente laseguente struttura generale:

Algoritmo 84 - Somma di numeriInput: numeri a1, a2, . . . , an

Output: somma dei numeri a1, a2, . . . , an

1: s� 02: for i in 1 . . . n do3: s� s � ai

4: end for5: return s

Esempio 144. Per sommare i primi k numeri di Fibonacci 1,1,2,3,5,8,13,21, . . . ,si può basarsi sulle seguenti relazioni che definiscono la successione:

a1 � 0a2 � 1an � an�1 � an�2

L’algoritmo di calcolo è il seguente:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 270: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

260 CAPITOLO 16. SOMMARE

Algoritmo 85 - Somma di numeri di FibonacciInput: numero k dei numeri da sommareOutput: somma dei primi k numeri di Fibonacci1: s� 02: a� 13: b� 14: repeat k times5: s� s � a6: b� a � b7: a� b � a8: end repeat9: return s

16.4 Progressioni

Una progressione è una successione a1, a2, . . . , an, . . . di numeri, detti termini.La somma dei primi n termini di una progressione viene indicata con Sn.

Consideriamo ora delle particolari progressioni che soddisfano a delle pro-prietà così caratterizzanti che consentono di determinare la somma dei primitermini della successione solo conoscendo il numero di addendi.

16.4.1 Progressioni aritmetiche

Una progressione aritmetica è una successione in cui ciascun termine è da-to dalla somma del termine precedente e di una costante d detta ragione.Ad esempio la successione 4,7,10,13,16, . . . è una progressione aritmetica diragione 3.

Dalla definizione stessa, l’n-esimo termine di una successione aritmetica diragione d ed il cui primo termine è a1 è

an � a1 � �n � 1�dCalcoliamo ora la somma Sn dei primi n termini di una progressione arit-

metica; richiamando la strategia di Gauss, scriviamo due volte i termini dellaserie, disponendoli su due righe come descritto dalla figura che segue:

Sn = a1 a2 � an

Sn = an an�1 � a12Sn = �a1 � an� �a2 � an�1� � �an � a1�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 271: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16.4. PROGRESSIONI 261

Le espressioni fra parentesi sono uguali fra loro in quanto ciascuna ottenutada due addendi che si bilanciano (uno cresce e l’altro decresce della ragione).Pertanto:

Sn �n�a1 � an�

2

Esempio 145. La somma dei primi 100 numeri dispari è calcolabile attraversoi seguenti passaggi:

d � 2n � 100a1 � 1an � a1 � �n � 1�d � 199

Sn �n�a1 � an�

2� 10000

16.4.2 Progressioni geometriche

Una progressione geometrica è una successione di numeri tali che il rapportotra un elemento ed il suo precedente è sempre costante. Tale costante è dettaragione della progressione. Ad esempio la successione 1,2,4,8,16,32,64, . . .è una progressione geometrica di ragione 2.

Dalla definizione stessa, l’n-esimo termine di una successione geometricadi ragione q ed il cui primo termine è a1 è

an � a1 qn�1

Calcoliamo ora la somma Sn dei primi n termini di una progressione geometricadi ragione q:

Sn � a1 �a2 �a3 ���an � a1 �a1q�a1q2 ���a1q

n�1� a1�1� q� q2 ��� qn�1�

Moltiplicando per 1 � q si ottiene

a1�1�q��1�q�q2���qn�1� � a1�1�q�q�q2�q2�q3���qn�1�qn� � a1�1�qn�da cui

Sn � a1qn � 1q � 1

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 272: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

262 CAPITOLO 16. SOMMARE

16.5 SerieÈ opinione comune che la somma di infiniti numeri non possa produrre unvalore finito. Su questo presupposto il filosofo Zenone, nato ad Elea (attual-mente in Campania) e vissuto tra la fine del VI e l’inizio del V secolo a.C.propose un famoso paradosso con l’intenzione di dimostrare che il movimentonon esiste. La storia è questa: Achille insegue una tartaruga su una pistarettilinea. Indicando con x0 la posizione iniziale di Achille, e con x1 A x0 laposizione iniziale della tartaruga, Achille impiega un tempo t1 per raggiun-gere la posizione x1; nel frattempo la tartaruga avrà raggiunto la posizionex2 A x1. Achille impiega il tempo t2 per spostarsi da x1 a x2 ma nel frattem-po la tartaruga avrà raggiunto la posizione x3 A x2. Questo processo va avantiall’infinito; dunque, per raggiungere la tartaruga, Achille impiega il tempo

t � t1 � t2 ��

Poichè Zenone riteneva che la somma di infiniti tempi non poteva essere finita,concluse che, contrariamente alla nostra esperienza comune, Achille non rag-giungerà mai la tartaruga. Ovviamente questa conclusione è inficiata dallafallacia dell’ipotesi iniziale.

La somma di infiniti addendi viene detta serie. Una serie composta dagliaddendi a1, a2, . . . , an, . . . viene solitamente scritta nella forma compatta

ª

Qn�1

an

Le somme infinite sollevano il problema relativo alla convergenza: ci sonosomme infinite il cui risultato è un termine infinitamente grande, ad esempiole seguenti due:

1 � 1 � 1 �� � 1 ��1 � 2 � 3 �� � n ��

danno un risultato infinito, denotato con il tradizionale simboloª. È evidenteche una condizione necessaria affinché una somma infinita possa convergeread un valore finito debba essere composta da infiniti addendi piccoli. Ilbilanciamento generato dai due attributi infiniti e piccoli dovrà produrre unvalore finito. Prima di andare oltre è necessario analizzare un esempio disomma infinita che non dia risultato ª.Esempio 146. Questo esempio descrive una somma infinita il cui risultato èun numero finito. Consideriamo la progressione geometrica di ragione q � 1

2ed avente a1 �

12 come primo termine. Calcoliamo

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 273: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16.5. SERIE 263

12�

14�

18�

116

� . . .

La dimostrazione può essere svolta in modo geometrico basandosi sulla se-guente figura.

12

14 1

8

116

Esempio 147. La condizione che gli addendi della somma infinita debbanodiventare sempre più piccoli non è sufficiente a garantire la convergenza delrisultato ad un valore finito; ad esempio si può dimostrare che la seguentesomma infinita diverge al valore ª:

1 � 12�

13�

14�

15� . . .

Esempio 148. Ci proponiamo di calcolare la seguente somma infinita½1 �

¼1 �

»1 �

º1 ��

Questo problema può essere affrontato con diversi approcci.Un approccio, che chiamiamo matematico, fa ricorso a tecniche matemati-

che tipiche dell’Analisi Matematica. I passi sono i seguenti:

1. definizione ricorsiva della successione delle somme parziali:

s0 �º

1sn �

º1 � sn�1

2. dimostrazione dell’esistenza del limite (finito)

limnsn

3. calcolo del valore s del limite

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 274: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

264 CAPITOLO 16. SOMMARE

Un approccio, che possiamo chiamare informatico, si innesta sulle conside-razioni appena svolte sopra, sostituendo il punto 3 con un algoritmo affettivoper il calcolo del limite; basandosi sulla conoscenza che la successione �sn� èconvergente, l’algoritmo 86 calcola un valore approssimato interrompendo ilciclo di calcolo quando saranno stati calcolati due valori distanti meno di unaquantità ε � 10�k, il che equivale ad aver determinato un valore approssimatocon k cifre decimali esatte.

Algoritmo 86 - Calcolo di½

1 �¼

1 �»

1 �º

1 ��1: k � 52: ε� 10�k

3: r � 04: s�

º1

5: while Ss � rS A ε do6: r � s7: s�

º1 � s

8: end while9: return s

Questo problema, nonostante l’apparenza, può essere risolto con un ap-proccio alternativo che utilizza un arsenale matematico molto ridotto, quellofornito dal biennio di un istituto superiore. Indicando con x la quantità inco-gnita che rappresenta la sommatoria sopra ed elevando al quadrato entrambii membri dell’equazione si ottiene la seguente equazione:

x2� 1 �

¼1 �

»1 �

º1 ��

Notando che al secondo membro compare ancora la quantità originale, deno-tata con x, si ricava l’equazione

x2� 1 � x

che fornisce la soluzione (scartando quella negativa)

x �1 �

º5

2Osserviamo che difficilmente si riesce a riconoscere questo numero fra le cifredecimali del numero ottenuto mediante l’algoritmo 86.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 275: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

16.6. ESERCIZI 265

16.6 Esercizi

1. Calcolare, mediante un algoritmo e mediante una formula chiusa, lasomma dei primi n numeri pari.

2. Calcolare, mediante un algoritmo e mediante una formula chiusa, lasomma dei primi n numeri dispari.

3. Calcolare la somma dei quadrati dei primi n numeri naturali: 12 � 22 �32 � � � � � n2.

4. Generalizzare e risolvere il problema presentato nell’esempio 141.

5. Sommare i numeri della tabella n�n sotto riportata dove ogni elementoè la somma dei corrispondenti numeri di riga e colonna.

2 3 4 . . . n � 13 4 5 . . . n � 24 5 6 . . . n � 3� �

n � 1 n � 2 n � 3 . . . 2n

6. Calcolare la somma del seguente insieme di numeri, disposti su n righein modo triangolare:

1

2 3

4 5 6

7 8 9 10

7. Sommare i numeri del seguente insieme di numeri, disposti su n righe inmodo triangolare:

1

2 2

3 3 3

4 4 4 4

8. Determinare il più grande numero rappresentabile con n cifre binarie.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 276: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

266 CAPITOLO 16. SOMMARE

9. Calcolare la frazione alla quale converge la seguente serie:

1 � 110

�1

100�

11000

�1

10000��

10. Determinare il valore al quale converge la seguente espressione:

1 � 11 � 1

1� 11��

11. Discutere comparativamente i tre approcci matematico, informatico, al-ternativo presentati nell’esempio 148, con particolare riguardo ai seguentiaspetti: conoscenze richieste, efficienza del procedimento ed eleganza.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 277: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 17

Calcolare

L’abaco procura un’esperienza multisenso-riale; infatti l’abacista vede muoversi lepalline, le sente tintinnare quando urtanouna contro l’altra e le percepisce nel loroinsieme. Sicuramente non esiste un altrocalcolatore digitale che abbia un’attendibi-lità così alta in proporzione al basso costodi acquisto e di manutenzione.Martin Gardner, The Abacus

L’ideazione e l’uso di strumenti mediante i quali svolgere più agevolmente icalcoli è sempre stato un tratto caratteristico di un filone del pensiero scienti-fico e del progresso tecnologico. A conferma della centralità e dell’importanzadel calcolare, il calcolatore è stato assunto come icona dell’evoluzione tecnolo-gica che ha contraddistinto l’ultimo mezzo secolo. Se mettessimo in fila, comein un museo virtuale, tutti gli strumenti ideati ed utilizzati dall’uomo per cal-colare delineeremmo una linea che corre parallela all’evoluzione del pensieroscientifico.

267

Page 278: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

268 CAPITOLO 17. CALCOLARE

17.1 L’abaco

Un abaco, nella sua forma più comune, è una tavoletta di forma rettangolarecostituita da una serie di guide (fili, scanalature, ...) parallele, che convenzio-nalmente indicano le unità, le decine, le centinaia e così via. Lungo ogni guidapossono essere spostate delle pietruzze (dette calcoli, da cui il termine modernodi calcolare) o altri oggetti mobili per eseguire le operazioni aritmetiche.

Figura 17.1: Disegno del XV secolo che rappresenta un abaco a scacchiera,costituito da una tavola suddivisa in riquadri su cui si spostavano delle pedine.

La parola abaco viene dal semitico abaq, che significa "polvere", "sabbia";infatti gli abaci più antichi erano tavoli ricoperti da un sottile strato di sabbiasui quali con uno stilo si segnavano i calcoli. I materiali usati per la costru-zione degli abachi e la loro foggia costruttiva variano moltissimo a seconda delluogo e dell’epoca storica, però il funzionamento si basa sempre sul principiofondamentale che il valore di una configurazione di calculi dipende dal postoche occupa, ossia dalla guida su cui è posizionata. Cioè le pietruzze su lineediverse indicano grandezze di ordine diverso, anche frazionarie. Tale principiosarà poi alla base di ogni sistema di numerazione posizionale.

Non si sa quale popolo abbia inventato questo potente strumento di calcolo;si ipotizza i babilonesi; fra gli esemplari di abaco a nostra disposizione (Maya,Egiziani, Cinesi, Romani...) i più antichi hanno più di 2000 anni.

Una delle più antiche forme di abaco fu usato dai greci e successivamentedai romani. L’abaco romano è costituito da una tavola divisa in colonne ovesi pongono dei gettoni che si posssono far scorrere lungo delle scanalature.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 279: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.1. L’ABACO 269

Le varie colonne rappresentano le potenze del 10, ed ogni gettone postovirappresenta una unità di quella potenza (figura 17.2).

Figura 17.2: Abaco romano conservato al Cabinet des Médailles di Parigi.

L’abaco cinese, detto suan pan, è composto da astine sulle quali sono im-pilate delle perline che si possono spostare. È suddiviso in due parti separate.Ciascuna astina del suan pan ha cinque perline nella parte bassa e due perlinenella parte alta. Partendo dalla destra, le perline rappresentano le unità (1,2, 3,. . . ), le successive le decine (10, 20, 30,. . . ), poi le centinaia e così via. Lepalline sopra l’asta valgono cinque di quelle sotto, ed ogni colonna rappresentauna potenza del dieci. Per segnare i numeri, si spostano le palline verso l’assecentrale.

Figura 17.3: Abaco cinese in cui è rappresentato il numero 6302715408.

Una forma più evoluta dell’abaco è il pallottoliere, rimasto in uso efficace-mente in Russia, Cina e Giappone fin dopo la II guerra mondiale. Si narra lastoria che, dopo la guerra, in uno scontro di prova fra un contabile giapponesecon un pallottoliere ed uno americano con una calcolatrice, il giapponese vinsesia in velocità che in precisione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 280: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

270 CAPITOLO 17. CALCOLARE

17.2 Calcolare con l’abacoLe prime versioni di abaco venivano utilizzate esclusivamente come strumen-to di conteggio. Successivamente questo strumento è stato utilizzato comesupporto per eseguire dei calcoli. Le operazioni facilitate dall’uso dell’abaconon sono soltanto addizioni e sottrazioni, ma anche moltiplicazioni e divisioni,realizzate rispettivamente come addizioni e sottrazioni ripetute. Grazie adopportune configurazioni fisiche dello strumento e ad opportune tecniche, lavelocità di esecuzione dei calcoli può essere ragguardevole.

Un abaco non può essere comunque essere assimilato ad un calcolatore nelsenso moderno del termine, in quanto non dispone di meccanismi autonomi:l’operatore deve eseguire manualmente tutte le operazioni, nulla avviene inmodo automatico. Il grosso limite degli strumenti come l’abaco o analoghi ècostituito dal fatto che essi costituiscono solamente dei meccanismi per rap-presentare i dati e come supporto per tenere traccia dei risultati intermedi,dei riporti e così via, ma non sono in grado di eseguire operazioni in quan-to il processo di calcolo è esterno allo strumento ed è localizzato nella mentedell’uomo che manipola lo strumento.

L’abaco è stato uno degli strumenti di calcolo più utilizzati fino al rinasci-mento quando venne via via abbandonato per varie ragioni; alcune di questesono riconducibili a quanto scrisse Fibonacci nel suo Liber Abaci, un famosotrattato di matematica pubblicato nel 1202:

• l’avvento della notazione numerica erroneamente detta araba

• l’introduzione del sistema di numerazione decimale per sostituire quellogreco e romano

• la diffusione di nuove tecniche e regole di calcolo anche complesso

L’abaco può essere considerato il progenitore di tutte le macchine calcola-trici meccaniche e elettromeccaniche, fino al primo colosso elettronico uscitonel 1946: l’ENIAC. Anche lui, come tutte le macchine calcolatrici preceden-ti funzionava sul principio dell’abaco e delle palline infilate sulle bacchetteposizionali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 281: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.3. LA CALCOLATRICE 271

17.3 La calcolatriceUna calcolatrice numerica, nei suoi vari stadi evolutivi dall’abaco ai più moder-ni elaboratori, rappresenta un minimondo che replica in piccolo l’evoluzione de-gli strumenti di calcolo, dal solo uso delle operazioni aritmetiche fondamentalialla programmabilità.

La calcolatrice numerica dotata delle quattro operazioni aritmetiche diaddizione, sottrazione, moltiplicazione e divisione fra numeri è stata il primostrumento di calcolo di tipo digitale a diffusione di massa, a partire dall’ultimoquarto del secolo scorso. Successivamente le funzionalità di una calcolatricesono state ampliate e, grazie alla potenza e versatilità del computer, sonostate integrate in esso, diventando uno degli innumerevoli strumenti virtualiche esistono e si usano sullo schermo di un computer (figura 17.4).

Figura 17.4: Una calcolatrice fisica ed una virtuale realizzata su un video diun computer.

Pur nella sua estrema semplicità, una calcolatrice presenta le componentie le modalità di interazione con un utente tipiche di un sistema di elaborazionemoderno:

1. il solutore descrive il programma

2. il programma viene inviato all’esecutore

3. vengono richiesti all’utente eventuali dati di input

4. l’esecutore esegue l’elaborazione dei dati

5. l’esecutore gestisce la sua memoria interna

6. vengono mostrati all’utente i risultati

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 282: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

272 CAPITOLO 17. CALCOLARE

Questo esecutore assolve ad una tipica funzione che si riscontra negli elabo-ratori: l’utente digita, con la tastiera o interagendo con il mouse o con le ditasu un touchscreen, delle stringhe di caratteri e l’esecutore le interpreta comedei numeri sui quali vengono eseguite delle operazioni. In uscita, al terminedell’elaborazione, la conversione si rovescia: i numeri calcolati dall’esecutorevengono presentati all’utente sotto forma di stringhe di caratteri.

17.4 Il massimo comune divisoreConsideriamo il problema del calcolo del massimo comune divisore di duenumeri naturali. Il problema può essere formulato come segue:

Dati due numeri naturali positivi, determinare il loro massimocomune divisore, ossia il più grande numero naturale che divideentrambi.

Tale problema, oltre ad essere un’interessante palestra per lo studio deglialgoritmi, riveste una particolare importanza pratica in quanto si presenta insvariati ambiti della matematica, in molte questioni riguardanti l’aritmeticaelementare, in particolare nell’elaborazione delle frazioni, ad esempio quandosi deve ridurre una frazione ai minimi termini oppure quando si debbano addi-zionare due frazioni. Sorge inoltre in questioni più avanzate quale l’aritmeticamodulare e nella soluzione di alcuni tipi di equazioni diofantee.

Direttamente dalla definizione di massimo comune divisore può essere ri-cavato un algoritmo per la determinazione del massimo comune divisore fradue numeri naturali m e n (algoritmo 87).

Algoritmo 87 - Calcolo del massimo comune divisore fra due numeri naturaliInput: numeri naturali m e nOutput: massimo comune divisore fra m ed n1: costruisci l’insieme M dei divisori di m2: costruisci l’insieme N dei divisori di n3: costruisci l’insieme intersezione P �M 9N4: determina il massimo p dell’insieme P5: return p

Per questo algoritmo le capacità richieste all’esecutore consistono nel

• determinare l’insieme dei divisori di un numero naturale

• determinare l’insieme intersezione di due insiemi dati

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 283: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.4. IL MASSIMO COMUNE DIVISORE 273

• determinare il massimo di un insieme di numeri

Questo algoritmo risulta di scarsa utilità per essere eseguito su un calcolatorein quanto richiede delle operazioni molto onerose dal punto di vista dell’esecu-zione, in quanto rimanda alla soluzione di sottoproblemi non elementari qualiil calcolo degli insiemi dei divisori dei due numeri.

Un altro algoritmo risolutivo, funzionalmente equivalente al precedente,solitamente riportato sui testi elementari di aritmetica, può essere descrittocome riportato nell’algoritmo 88.

Algoritmo 88 - Calcolo del massimo comune divisore fra due numeri naturaliInput: numeri naturali m e nOutput: massimo comune divisore fra m ed n1: scomponi m in fattori primi2: scomponi n in fattori primi3: considera solo i fattori comuni4: fra i fattori comuni scegli quelli con esponente minore5: determina il prodotto p fra questi fattori6: return p

Tale algoritmo richiede che l’esecutore possieda le capacità di

• scomporre un numero in fattori primi

• selezionare i fattori desiderati

• eseguire il prodotto di più fattori

L’aspetto più penalizzante consiste nel fatto che questo algoritmo richiede lascomposizione di m ed n in fattori primi; poiché attualmente non si cono-scono degli efficienti metodi per la scomposizione in fattori primi, anche talealgoritmo risulta di scarsa utilità.

Nei due precedenti gli algoritmi le capacità richieste all’esecutore sono ab-bastanza complesse e mal si adattano all’uso di un calcolatore. Un algoritmoalternativo che richiede all’esecutore delle semplici capacità di calcolo, e che,pertanto, si presta ad essere facilmente eseguito da un calcolatore è stato idea-to da Euclide ancora nel IV sec. a.C. e descritto per la prima volta nel LibroVII, Proposizione 2 degli Elementi di Euclide. Da degli studi storici si èpropensi comunque a ritenere che questo metodo fosse noto almeno due secoliprima di Euclide e certamente era noto ad Eudosso attorno al 375 a.C.. Siè accertato inoltre che tale metodo era noto indipendentemente anche dagliantichi cinesi. Tale algoritmo evita il ricorso alla scomposizione in fattori

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 284: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

274 CAPITOLO 17. CALCOLARE

e richiede all’esecutore delle capacità di calcolo elementari, corrispondenti aquelle di un calcolatore attuale; si può dire che si tratta di un algoritmo anticoper un calcolatore moderno.

Nel testo di Euclide l’algoritmo è formulato in modo diverso da come com-pare usualmente sui testi attuali in quanto i greci non consideravano l’unitàcome un divisore di un numero, ed inoltre, al tempo, lo zero non era ancoranoto. Tale algoritmo si fonda sulle seguenti proprietà del massimo comunedivisore:

mcd�m,0� � m

mcd�m,n� � mcd�n,m mod n�L’algoritmo derivato da queste proprietà, anche se con qualche variazione ri-spetto all’originale, è descritto mediante la tavola di traccia riportata nellafigura 17.5, relativa al caso m � 16, n � 42.

m n mmod n

16 42 1642 16 1016 10 610 6 46 4 24 2 02 0

Figura 17.5: Tavola di traccia dell’algoritmo di Euclide.

L’algoritmo sotteso da questa tavola di traccia può essere espresso mediantel’algoritmo 89.

Algoritmo 89 - Algoritmo di EuclideInput: numeri naturali m e nOutput: massimo comune divisore fra m e n1: while n x 0 do2: r �mmod n3: m� n4: n� r5: end while6: return m

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 285: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.5. UN PROBLEMA NUMERICO 275

Il procedimento appena descritto costituisce un algoritmo effettivo se l’ese-cutore al quale è rivolto possiede le capacità indicate nel testo del procedimentostesso. Se l’esecutore non fosse in grado di valutare l’operazione mod di restodella divisione intera, bensì sapesse applicare solo le quattro operazioni (addi-zione, sottrazione, moltiplicazione, divisione), per rendere effettivo l’algoritmoè sufficiente tradurre ed esprimere le azioni non eseguibili dall’esecutore intermini delle azioni effettivamente eseguibili. Nel caso l’esecutore abbia le ca-pacità di eseguire solo l’addizione e la sottrazione, l’algoritmo effettivo sarebbeancora più lungo.

Osservazione. L’algoritmo di Euclide evidenzia che è possibile organizzarefra loro in modo complesso delle azioni molto elementari per eseguire delleazioni equivalenti che richiederebbero delle capacità più elevate.

17.5 Un problema numerico

Consideriamo il problema di determinare il numero r definito dalla rappre-sentazione decimale inversa di un numero naturale n (esempio: n � 4372,r � 2734). Supponiamo, per il momento, che il numero n non sia divisibileper 10, ossia che il numero, nella sua rappresentazione decimale, non terminicon 0. Nell’ipotesi di disporre di un esecutore in grado di eseguire le 4 ope-razioni aritmetiche di base �, �, �, ~, un possibile procedimento risolutivo perquesto problema può essere espresso mediante l’algoritmo 90.

Algoritmo 90 - Rovesciamento di un numero naturale in base 10 - ver. AInput: numero naturale n da rovesciareOutput: numero r rovesciato1: inizializza r a 02: while ci sono cifre in n do3: trasporta la cifra delle unità di n alla fine di r4: end while5: return r

Nella formulazione dell’algoritmo 90 si nota che le varie istruzioni informalisono direttamente traducibili in un generico linguaggio di programmazione, adeccezione del sottoproblema trasporta la cifra delle unità di n alla fine di r.Tale sottoproblema può essere ulteriormente scomposto nei seguenti due:

P1: togli la cifra delle unità dal numero n

P2: accoda tale cifra alla destra del numero r

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 286: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

276 CAPITOLO 17. CALCOLARE

La forma quasi definitiva è riportata nell’algoritmo 91.

Algoritmo 91 - Rovesciamento di un numero naturale in base 10 - ver. BInput: numero naturale n da rovesciareOutput: numero r rovesciato1: r � 02: while ci sono cifre in n do3: c� cifra delle unità di n4: n� n privato della cifra delle unità5: r � r con aggiunta la cifra sulla destra6: end while7: return r

Raffinando ulteriormente l’algoritmo 91, si perviene alla forma definitiva(algoritmo 92).

Algoritmo 92 - Rovesciamento di un numero naturale in base 10 - ver. CInput: numero naturale n da rovesciareOutput: numero r rovesciato1: r � 02: while n A 0 do3: q � n~104: p� q � 105: c� n � p6: n� n~107: r � r � 10 � c8: end while9: return r

In una forma più compatta, le istruzioni di assegnazione interne al ciclonell’algoritmo 92 potrebbero essere scritte come segue:

r � �r � 10� � �n � �n~10� � 10�n� n~10

Si lascia per esercizio l’analisi del comportamento dell’algoritmo precedentenei casi in cui il numero da invertire termini con delle cifre 0.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 287: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.6. ESERCIZI 277

17.6 Esercizi

1. Nell’ipotesi di disporre di un esecutore in grado di eseguire le opera-zioni aritmetiche di addizione e sottrazione fra numeri naturali (�,�)ed i confronti fra numeri naturali (�,x,@,A,B,C), risolvere i seguentiproblemi:

(a) Determinare il prodotto fra due numeri naturali m ed n.(b) Determinare il quoziente fra due numeri naturali m ed n.(c) Determinare resto della divisione intera fra due numeri naturali m

ed n.(d) Decidere se un dato numero naturale m è divisibile (esattamente)

per un dato numero naturale n.

2. Nell’ipotesi di disporre di un esecutore in grado di eseguire le quat-tro operazioni aritmetiche fondamentali fra numeri naturali (�,�,�, ~(quoziente della divisione intera)) ed i confronti fra numeri naturali(�,x,@,A,B,C), risolvere i seguenti problemi:

(a) Calcolare resto della divisione intera fra due numeri naturali m edn.

(b) Calcolare il numero di cifre di un dato numero naturale, consideratoin base 10.

(c) Calcolare la somma delle cifre di un numero naturale n, consideratoin base 10.

(d) Calcolare la potenza mn fra due dati numeri naturali m ed n.(e) Calcolare il fattoriale di un dato numero naturale n.(f) Calcolare la cifra più significativa di un dato numero naturale n,

considerato in base 10.(g) Calcolare la cifra più grande di un dato numero naturale n, consi-

derato in base 10.

3. Determinare la potenza xk, con x numero reale e k numero intero.

4. Decidere se un dato numero naturale è una potenza di 2.

5. Decidere se un dato numero naturale è un quadrato perfetto.

6. Decidere se un dato numero naturale è il fattoriale di un qualche numero.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 288: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

278 CAPITOLO 17. CALCOLARE

7. Decidere se un dato numero naturale appartiene alla successione di Fi-bonacci (0,1,1,2,3,5,8,13,21, . . . ).

8. Determinare il numero dei divisori di un dato numero naturale positivo.Ad esempio, il numero 40 è divisibile per 1, 2, 4, 5, 8, 10, 20, 40 epertanto il numero dei suoi divisori è 8.

9. Decidere se un dato numero numero naturale n è primo.

10. Decidere se due dati numeri naturali sono coprimi, ossia se non hannoalcun fattore primo in comune.

11. Decidere se un dato numero naturale, considerato in notazione decima-le, è palindromo, ossia se si legge indifferentemente da sinistra a destrae da destra a sinistra. Ad esempio, i numeri rappresentati dalle seguen-ti notazioni decimali sono palindromi: 121, 7337, 39293. Si ipotizzidi disporre di un esecutore in grado di eseguire le quattro operazioniaritmetiche �, �, �, ~.

12. Calcolare la parte intera della radice quadrata di un dato numero natu-rale; ad esempio, la parte intera della radice quadrata di 15 vale 3; laparte intera della radice quadrata di 16 vale 4. È concesso di opera-re solo sui numeri naturali, mediante le quattro operazioni aritmetichefondamentali ed i confronti.

13. Basandosi sulla proprietà che stabilisce che che, per ogni numero naturalepositivo n, la somma dei primi n numeri dispari vale n2, determinare ilquadrato di un numero naturale, usando solo operazioni di addizionee sottrazione fra numeri naturali, l’assegnazione ed i controlli di base.Nelle stesse ipotesi, determinare la parte intera della radice quadrata diun numero naturale.

14. Determinare il minimo numero di quadrati ottenibili ritagliando un ret-tangolo di lati m ed n, con m ed n numeri naturali. Stabilire cosarappresenta la lunghezza del lato del quadrato più piccolo che vieneritagliato per ultimo.

15. Determinare le quote annue q che si devono versare per avere un datocapitale finale c dopo n anni all’interesse annuo i; applicare un procedi-mento iterativo, senza usare le formule della matematica finanziaria.

16. Una coltura di batteri raddoppia la propria popolazione ogni t unità ditempo. Determinare quante unità di tempo sono necessarie affinché ilnumero dei batteri diventi almeno n volte quello iniziale.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 289: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

17.6. ESERCIZI 279

17. Individuare la regola che genera la seguente successione di numeri:

11121121111122131221113112221. . .

Generare i primi n numeri della successione.

18. Determinare la sequenza dei primi n numeri razionali secondo il metododiagonale di Cantor illustrato dalla figura che segue:

���

������ ��

���

���

����������� ��

��

��

5~14~13~12~11~1

4~23~22~21~2

3~32~31~3

2~41~4 1~5

19. Oltre ai russi, anche gli arabi, da buoni algebristi, hanno ideato nei secoliscorsi un loro metodo per moltiplicare fra loro due numeri naturali. Ilmetodo è descritto dallo schema che segue, dove è descritto il processodi moltiplicazione 726 � 43 � 31218. Lungo le linee oblique evidenzia-te mediante una freccia vengono addizionati (a partire dalla destra econsiderando i riporti) i numeri che vi si incontrano.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 290: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

280 CAPITOLO 17. CALCOLARE

������

������

������

����

��

����

��

����

��

3

4

7 2 6

3 1 2 1 8

������

������

�����

�������

�����

�������

�����

���� ���

2

28

1

0

08

6

2

14

8

Si lascia per esercizio la decifrazione del metodo (basandosi sullo sche-ma sopra riportato), l’individuazione delle capacità richieste all’esecu-tore e la dimostrazione (o semplicemente la motivazione) che il metodofunziona. Descrivere il metodo mediante un algoritmo.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 291: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 18

Misurare

Parte del papiro di Rhind.

L’esigenza di stabilire la distanza fra due punti, di misurare la lunghezzadi un percorso o la grandezza di una zona ha costituito il seme che, qualchemigliaio di anni fa, ha dato orgine alla ramificata pianta scientifica che va sottoil nome di geometria.

Già al tempo degli Egizi la geometria veniva utilizzata per risolvere ilproblema di ridefinire i confini dei terreni dopo lo straripamento del Nilo ecomplessi calcoli numerici si resero necessari (con l’uso anche di frazioni e diradici quadrate) per la costruzione delle piramidi dei faraoni. Tuttavia pergli egizi tutte le disciplinee scientifiche (matematica, geometria, astronomia)erano di natura essenzialmente pratica, senza risvolti teorici.

La prima sistemazione scientifica inquadrata in un impianto formale rigo-roso risale alla civiltà greca: geometri e filosofi quali Euclide, Pitagora e Taletehanno gettato le basi della geometria che si è mantenuta pressochè invariatafino al XIX secolo.

281

Page 292: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

282 CAPITOLO 18. MISURARE

18.1 Area del triangoloLa figura geometrica più semplice ed elementare che esiste ed al contempola più generale è il triangolo. Più semplice perché è la figura delimitata dalminor numero possibile di lati; più elementare perchè ciascun’altra figura puòessere scomposta in triangoli; più generale perché non deve rispettare alcunvincolo sui lati ed angoli eccetto un vincolo di esistenza che afferma che: Inun triangolo ogni lato deve essere minore della somma degli altri due.

Il metodo tradizionale per determinare l’area di un triangolo consiste nel-l’applicare la notissima formula che a parole recita: Base per altezza divisodue. Questo metodo richiede la conoscenza di un lato e dell’altezza corri-spondente; quest’ultimo dato risulta artificioso e spurio e non direttamentecollegato alla conoscenza dei dati che individuano direttamente il triangolo,ossia la lunghezza dei tre lati. Essendo che un triangolo è univocamente de-terminato dalla lunghezza dei suoi lati, deve esistere una legame funzionale fral’area e la lunghezza dei lati; in altre parole, una formula che fornisce l’area infunzione dei lati.

a

b

c

Questa formula è stata scoperta da Erone ancora nel III secolo a.C. e si esprimecome segue: denotando con a, b, c le lunghezze dei lati del triangolo e con p ilsemiperimetro, l’area s è data dalla formula

s �»p�p � a��p � b��p � c�

che può essere frammentata ed epressa mediante l’algoritmo 93.

Algoritmo 93 - Formula di EroneInput: misure a, b, c dei lati del triangoloOutput: area del triangolo1: p� �a � b � c�~22: s�

»p � �p � a� � �p � b� � �p � c�

3: return s

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 293: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.2. AREA DEI QUADRILATERI 283

In un sistema di assi cartesiano, consideriamo un triangolo di verticiA�x1, y1�,B�x2, y2�, C�x2, y2� come illustrato in figura.

C

B

A�x1, y1��x2, y2�

�x3, y3�

In questo contesto l’area del triangolo è data dalla seguente formula, basatasul calcolo del determinante di una matrice 3 � 3 costruita con le coordinatedei vertici del triangolo:

s � S12

RRRRRRRRRRRRRR1 1 1x1 x2 x3y1 y2 y3

RRRRRRRRRRRRRR SSvolgendo i calcoli si ricava:

s � Sx2 y3 � x3 y2 � x1 y3 � x3 y1 � x1 y2 � x2 y1S18.2 Area dei quadrilateriI poligoni più semplici dopo il triangolo sono i quadrilateri. Spesso vengo-no considerate delle particolari sottocategorie di quadrilateri, che assumonodelle denominazioni specifiche e che hanno delle specifiche formule per deter-minare la loro area. La lista che segue illustra queste particolari famiglie diquadrilateri ed il corrispondente procedimento per determinarne l’area.

• quadrato: quadrilatero avente i lati e gli angoli uguali (area = lato �

lato)

• rettangolo: quadrilatero composto da lati a coppie uguali e con gli angoliretti (area = lato1 � lato2)

• parallelogramma: quadrilatero avente le coppie di lati opposti paralleli(area = base � altezza)

• trapezio: quadrilatero avente una coppia di lati opposti paralleli (area =�BASE � base� � altezza~2)L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 294: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

284 CAPITOLO 18. MISURARE

Nel caso di un quadrilatero generico l’area può essere calcolata suddividen-do, mediante una diagonale, il quadrilatero in due triangoli.

Nel caso in cui il quadrilatero sia inscrivibile in una circonferenza, l’area spuò essere calcolata mediante la formula di Brahmagupta che si esprime nellaforma

s �»�p � a��p � b��p � c��p � d�

dove con a, b, c, d sono indicate le misure dei quattro lati del quadrilatero econ p viene indicato il perimetro. Questa formula generalizza la formula diErone.

a b

c

d

Figura 18.1: Area di un quadrilatero inscritto in una circonferenza.

18.3 Area dei poligoniPer determinare l’area di poligoni con un numero di lati maggiore a quattro,si ricorre alla tecnica di triangolarizzazione del poligono, che consiste nel-la suddivisione del poligono in triangoli dei quali si calcola l’area ricorrendogeneralmente alla formula di Erone.

Nel caso di poligoni definiti in un sistema di assi cartesiani, la formula vistaprecedentemente per un triangolo può essere estesa ad un generico poligono din vertici di coordinate �xi, yi�, con i � 1, . . . , n; l’area è espressa dalla formula

s �12S n

Qi�1�xi yi�1 � xi�1 yi�S

dove xn�1 � x1 e yn�1 � y1.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 295: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.4. AREA DEL CERCHIO 285

18.4 Area del cerchioArchimede (Siracusa 287-212 a.C.), nel suo breve trattato Misura del cerchio,ha mostrato come approssimare l’area di un cerchio con quella di un poligonoregolare, dimostrando che l’area del cerchio è uguale a quella di un triangolorettangolo avente come cateti la circonferenza e il raggio del cerchio stesso.Indicato, come tradizione, con π il rapporto delle lunghezze della circonferenzae del corrispondente diametro, l’area s del cerchio si esprime con

s � πr2

In questo modo l’area del cerchio viene ricondotta al calcolo del valore di π.Lo stesso Archimede ha fornito una sorprendente stima di π:

3 � 1071

@ π @ 3 � 1070

I tentativi di comprendere la natura del π ha impegnato moltissimi mate-matici. Un passaggio importante è stato la dimostrazione che π è un numeroirrazionale, ossia non è esprimibile come frazione di due numeri naturali, di-mostrazione fornita nel 1767 da J.H. Lambert (1728-1777). Dimostrandol’irrazionalità di π, Lambert garantiva che il computo dei suoi decimali nonavrebbe mai avuto fine. Nel 1882 F. Lindemann dimostrò che π non solo erairrazionale, ma anche trascendente (detto anche non-algebrico), ossia non èsoluzione di alcuna equazione polinomiale a coefficienti interi. Poichè nessunnumero trascendente può essere costruito con riga e compasso, neanche π ècostruibile, ponendo fine alla questione della quadratura del cerchio, ossia aitentativi di trasformazione di un cerchio in un quadrato equivalente usandosolo riga e compasso; era questo un problema che aveva occupato i matematicidall’epoca di Ippocrate fino ai tempi moderni. π ha resistito anche ai più so-fisticati metodi statistici che hanno cercato di individuare qualche regolaritànella successione delle sue cifre; ma invano: le cifre si susseguono all’infinito,in un modo che appare del tutto casuale.

Anche Ramanujan (1887-1920), uno dei più importanti matematici del se-colo scorso, ha tentato di esplorare il recondito mondo di π: le sue grandi intui-zioni hanno permesso notevoli progressi nello studio del numero, permettendodi mettere a punto efficienti algoritmi di calcolo in grado di quadruplicare ilnumero di cifre decimali corrette che si ottengono ad ogni ciclo dell’algoritmo;questi metodi, unitamente all’uso di moderni supercalcolatori, hanno permessodi calcolare π fino a milioni di miliardi di cifre decimali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 296: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

286 CAPITOLO 18. MISURARE

18.5 Un problema di aree

Consideriamo un quarto di cerchio di raggio r; dividiamo l’arco in tre partiuguali e dagli estremi di questi archi tracciamo due segmenti paralleli ad unodei due raggi che costituiscono il bordo. Si delineano così tre zone, comedescritto nella figura 18.2; il problema consiste nel determinare l’area dellaporzione intermedia (ombreggiata nella figura).

Figura 18.2: Il problema: Determinare l’area della zona ombreggiata.

In una situazione così sguarnita, non risulta immediato individuare unalinea di attacco. Per scuotere un po’ il problema e partire con qualche consi-derazione si può tracciare qualche segmento che unisce i punti a disposizione.Unire fra loro i punti estremi degli archi sulla circonferenza non porta lon-tano. Risulta più interessante unire i punti sulla circonferenza con il centrodel cerchio. In questo modo, assegnando anche i nomi ai punti, si arriva allafigura 18.3.

H KPO

SR

QA1

A2

A3

Figura 18.3: La figura completa.

Pur non avendo ancora ben chiaro dove si va a parare, emergono ora al-cune considerazioni: i due triangoli QOKQ e QOHR sono, per costruzione,rettangoli, hanno entrambi l’ipotenusa lunga r ed inoltre hanno angoli di am-piezze 30o,60o,90o. Di conseguenza sono isometrici. Questa osservazione cifa prendere coraggio. Volendo si potrebbe trovare facilmente l’area di questidue triangoli visto che sono entrambi la metà di un triangolo equilatero di

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 297: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.6. SCOMPOSIZIONE DI FIGURE 287

raggio r. Prendendo questa strada di calcoli algebrici si arriverebbe alla me-ta, ma c’è una strada alternativa migliore che si mantiene ad un livello logico,più elevato. Se il triangolo QOHR viene rimosso dalla zona A1 ed unito allazona A3, queste due zone si modificano, divenendo entrambe equivalenti aduno spicchio di cerchio. Di conseguenza anche la zona A2 avrà un’area pariad uno spicchio di cerchio. Il ragionamento è tutto qui.

Volendo tradurre queste considerazioni in termini algebrici, indicando cont l’area dei due triangoli QOHR ed QOKQ e con v l’area di uno spicchio dicerchio e con a1, a2, a3 l’area delle tre zone A1,A2,A3, si ha

a1 � a3 � �v � t� � a3 � v � �t � a3� � v � v � 2v

Pertanto, essendo che a1�a2�a3 � 3v, si ottiene ancora a2 � v. Un’equivalenteprocedimento algebrico è il seguente:

a2 � 2v � area�QOHR� � a3 � 2v � area�QOHR� � �v � area�QOKQ�� � v18.6 Scomposizione di figureL’area di una generica figura piana soddisfa alla seguente proprietà:

Proprietà. L’area di una figura piana F scomposta in una sequenza difigure �F1,F2,�,Fn� è data dalla formula

area�F� �Qi

area�Fi�Questa proprietà suggerisce spontaneamente un metodo di calcolo di aree

di figure mediante la metodologia top-down.Esempio 149. Consideriamo il problema di calcolare l’area del pentagono ri-portato in figura 18.4, note le lunghezze dei cinque lati, assumendo l’ipotesiche la figura sia convessa e che i due angoli alla base siano retti.

���

��LLLLLLa

b

c

d

e

Figura 18.4: Il problema: Determinare l’area del pentagono.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 298: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

288 CAPITOLO 18. MISURARE

Una scomposizione della figura in due trapezi come descritto nella figu-ra 18.5 risulterebbe poco utile in quanto comporterebbe il calcolo dell’area didue trapezi rettangoli dei quali sono noti pochi ed insufficienti elementi.

�����LLLLLL

Figura 18.5: Una scomposizione non efficace.

Una scomposizione più efficace è descritta nella seguente figura 18.6.

HHH

HHHH��

���LLLLLL

A2

A1

ha

b

c

d

e

f

Figura 18.6: Una scomposizione efficace.

Questa scomposizione suggerisce il seguente procedimento risolutivo per ilcalcolo dell’area s del pentagono:

s � area�A1� � area�A2�Adottando la metodologia top-down, i due sottoproblemi corrispondenti alcalcolo delle due aree delle due sottofigure A1 e A2 si esplicitano come segue:

calcolo di s1 � area�A1� (area di un trapezio):

s1 � �a � c� � b~2calcolo di s2 � area�A2� (area di un triangolo):

h � Sa � cSf �

ºb2 � h2

p � �d � e � f�~2s2 �

»p � �p � d� � �p � e� � �p � f�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 299: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.7. EFFICACIA DELLE SCOMPOSIZIONI 289

La ricomposizione delle soluzioni parziali sopra riportate conduce all’algo-ritmo 94.

Algoritmo 94 - Calcolo dell’area del pentagono riportato nella figura 18.4Input: misure a, b, c, d, e del pentagonoOutput: area del pentagono1: s1 � �a � c� � b~22: h� Sa � cS3: f �

ºb2 � h2

4: p� �d � e � f�~25: s2 �

»p � �p � d� � �p � e� � �p � f�

6: s� s1 � s27: return s

Osservazione. L’esempio precedente evidenzia che una cattiva scomposi-zione di un problema rende difficile la soluzione dei sottoproblemi.

18.7 Efficacia delle scomposizioniDeterminiamo l’area della figura delimitata dalla circonferenza e dal quadratointerno nota la lunghezza del lato del quadrato esterno:

&%'$��

@@��@@

Una prima scomposizione potrebbe essere:

area � 4 � s

dove con s si denota l’area di uno dei 4 segmenti circolari individuati dal cerchioe dal quadrato più interno che compaiono nella figura precedente. Evidente-mente questa scomposizione è poco utile poichè il sottoproblema di trovarel’area di un segmento circolare è della stessa difficoltà del problema originale.Una scomposizione più efficace è la seguente:

area � �&%'$

��

@@

@@

��

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 300: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

290 CAPITOLO 18. MISURARE

in cui si evidenziano i seguenti due sottoproblemi:

P1: Trovare l’area del cerchio di dato diametro

P2: Trovare l’area del quadrato di data diagonale

Entrambi questi problemi sono di immediata soluzione. Il sottoproblema P2merita un’ulteriore osservazione. Senza scomodare il teorema di Pitagora,l’area di un quadrato di data diagonale può essere determinata seguendo ilpercorso risolutivo suggerito dalle seguenti uguaglianze geometrico-algebrichefondate su delle proprietà di composizione e scomposizione che valgono perl’operazione di valutazione dell’area di figure piane.

��

@@

@@

��

� ��

@@

@@

��

� 4 @@

� 2 � 12

In definitiva si trova che l’area cercata è esprimibile come segue:

area � � 12&%

'$

A questo punto i dettagli dei calcoli risultano banali.

18.8 Calcoli geometriciIl calcolo dell’area di figure può essere svolto in modo geometrico, usando unasorta di algebra delle figure basata sulla composizione e scomposizione dellefigure.Esempio 150. Consideriamo il problema di determinare l’area della seguentefigura composta da quattro petali ottenuti dall’intersezione di quattro semi-cerchi, nota la lunghezza del diametro della circonferenza:

'$$%'&&%

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 301: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.8. CALCOLI GEOMETRICI 291

Senza ricorrere ad alcuna formula di aree, similmente all’esempio precedente,notando che quattro semicerchi che si sovrappongono dannno luogo, comeintersezione, alla figura in questione, dall’equazione

# # "! !#"4 � �

si ricava

# "! !#" &%'$

� 2 �

e quindi, numericamente, l’area cercata è uguale a

2πr2 � 4r2� 2r2�π � 2�

Osservazione. In alternativa a quanto è stato fatto nei due esempi sopraproposti, si sarebbe potuto giungere al risultato numerico finale impostandogià all’inizio i calcoli numerici; è evidente che un tale approccio sarebbe sta-to più difficoltoso, richiedendo già all’inizio dei concetti (area) e conoscenze(pi greco) non strettamente necessarie per l’impostazione del procedimentorisolutivo; anche in questo caso, comunque, i vari calcoli numerici sarebbe-ro stati guidati da un’idea risolutiva di fondo, analoga a quella che è statapresentata sopra. Adottando un approccio bottom-up si avrebbe potuto ot-tenere il risultato del secondo esempio osservando che l’area di questa figuraè il doppio di quella dell’esempio precedente, e da ciò si avrebbee conseguitoimmediatamente il risultato.

Osservazione. Dagli esempi sopra proposti e dalle considerazioni appenariportate scaturisce la conclusione che, nello sviluppo della soluzione di un datoproblema, è preferibile lavorare il più a lungo possibile con un linguaggio e conun formalismo adeguato al livello del problema trattato; solo in un secondomomento il procedimento risolutivo va espresso dettagliatamente (ad esempioin un linguaggio di programmazione), in una forma pronta da essere sottopostaad un esecutore.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 302: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

292 CAPITOLO 18. MISURARE

18.9 Calcoli algebriciIn certi casi il calcolo di aree viene svolto in modalità tipica dell’algebra.Esempio 151. Calcoliamo l’area della figura ottenuta dall’intersezione di 4quarti di cerchio di raggio unitario, come evidenziato nella figura che segue(area z).

x x

x

x

y

y

y

y

z

L’area della parte centrale può essere calcolata impostando il seguentesistema lineare:

¢¦¤4x � 4y � z � 12y � z � 1

2π � 12x � y � 1 � 1

In questo modo un problema geometrico (calcolo di un’area) viene ricon-dotto ad un problema algebrico (risoluzione di un sistema lineare) che vienerisolto con i metodi tipici dell’Algebra.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 303: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.10. ESERCIZI 293

18.10 Esercizi

1. Analizzare il comportamento della formula di Erone nei seguenti casi:

(a) Le misure dei lati non rispettano la condizione di costruibilità diun triangolo.

(b) Uno dei lati del triangolo ha lunghezza uguale a 0.(c) tutti e tre i lati hanno la stessa lunghezza (triangolo equilatero).

2. Date le lunghezze a, b, c dei lati di un triangolo, determinare l’altezzarelativa al lato a.

3. Date le coordinate cartesiane dei vertici di un quadrilatero convesso,determinarne l’area.

4. Determinare l’area di un rombo di cui si conosce la lunghezza a del latoe la lunghezza d della diagonale.

5. Determinare l’area di un parallelogramma di cui sono note le lunghezzedei lati e di una diagonale.

6. Determinare il perimetro del rettangolo di perimetro minimo che ricopreun triangolo di lati di lunghezza a, b, c.

7. Determinare il raggio della circonferenza inscritta in un triangolo di latidi lunghezza a, b, c.

8. Determinare il raggio della circonferenza circoscritta in un triangolo dilati di lunghezza a, b, c.

9. Determinare la lunghezza della diagonale di un parallelepipedo rettan-golo aventi gli spigoli di lunghezza a, b, c.

10. Una piramide a base esagonale, avente il lato di base di lunghezza k el’altezza h è appoggiata interamente sopra un cubo di lato l. Determinarela superficie totale del solido composto così ottenuto.

11. Determinare l’area di un quadrilatero di cui sono note le lunghezza a, b,c, d dei lati ed è noto che l’angolo fra i due lati a e b è retto.

12. Dimostrare che l’area di un triangolo avente i vertici di coordinate carte-siane intere è un numero intero o la metà di un numero intero (nonostantele misure dei lati possano essere numeri irrazionali).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 304: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

294 CAPITOLO 18. MISURARE

13. Determinare la distanza fra i due punti P e Q, note le lunghezza a, b, cindicate in figura ed essendo retti gli angoli fra i segmenti verticali e labase del quadrilatero.

Q

P

a

b

c

14. Calcolare l’area del seguente pentagono di cui sono note le misure a, b, c, hriportate in figura.

a

b

c

h

15. Determinare l’area del pentagono descritto nella figura che segue, cono-scendo le lunghezza a, b, c, d, e dei lati e la conoscenza che i due angolievidenziati sono retti.

a

b

c

de

16. Data l’area di un quadrato, determinare le aree del cerchio inscritto edel quadrato inscritto nel cerchio inscritto, come evidenziato nella figurache segue.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 305: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

18.10. ESERCIZI 295

17. Dimostrare l’equivalenza delle seguenti figure costituite da cerchi. De-terminarne l’area in funzione della lunghezza l del lato del quadrato chele racchiude. '

&$%���������������� ��������������������������������

��������������������������������

18. Determinare l’area della parte più interna delle seguenti figure (sono inordine di difficoltà crescente). Si assuma l’ipotesi che l’esecutore siain grado di valutare l’area c�r� di un cerchio di dato raggio r e l’areap�n, r� di un n-poligono regolare di dato raggio r del cerchio circoscritto.Si richiede di esprimere l’area delle figure come combinazione lineare acoefficienti razionali di aree di cerchi e di poligoni regolari, ossia medianteun’espressione della forma α c�r� � β p�n, r� con α,β > Q.

$'&%'&$%'&$%

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 306: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

296 CAPITOLO 18. MISURARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 307: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 19

Tracciare

Non entri nessuno che non conosca la geometria.

Motto all’entrata dell’Accademia di Platone

Storicamente la Geometria nacque in Egitto nel terzo millennio a.C., conl’obiettivo pratico di misurare aree per poter ristabilire i confini dei terreniche venivano cancellati dalle annuali inondazioni del Nilo. Di qui il terminegeometria che letteralmente significa misura della terra. Successivamente,anche presso i Babilonesi la Geometria venne coltivata con fini principalmentepratici, come strumento di calcolo a supporto dell’Astronomia.

La Geometria divenne fertile terreno per il pensiero speculativo ed assunseil rango di scienza teorica nell’antica Grecia, grazie a matematici e filosofi qualiTalete (640-545 a.C. circa), Pitagora (570-495 a.C. circa) e Platone (428-348a.C. circa). Si dovette però attendere l’opera di Euclide nel III secolo a.C.,per avere una sistemazione organica e rigorosa nella sua monumentale opera,gli Elementi, in cui descrisse una buona parte delle conoscenze geometrichedell’epoca. L’impostazione di Euclide si impose per oltre due millenni ed èquella che si studia anche oggigiorno nelle scuole. Nel XIX secolo matematiciquali Lobacevskij (1792-1856), Bolyai (1802-1860) aprirono la strada ad altreimpostazioni alternative (geometrie non euclidee).

Nell’evoluzione del pensiero scientifico un significativo passo in avanti con-sistette nel passare dal concetto di piano su cui disegnare figure (argomentotrattato nel capitolo Disegnare dedicato alla geometria grafica della tartaruga)al concetto piano come ambiente in cui creare figure, denominarle e sulle qualifare operazioni.

297

Page 308: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

298 CAPITOLO 19. TRACCIARE

19.1 I postulati di Euclide

Seguendo l’impostazione adottata da Euclide, la geometria euclidea si fondasui alcuni concetti fondamentali primitivi, ossia concetti che, per la loro ele-mentarietà, si rinuncia a definire formalmente mediante concetti e termini giàdefiniti: punto, retta, piano. Di questi enti fondamentali Euclide aveva datole seguenti definizioni: punto è ciò che non ha parti, linea è lunghezza senzalarghezza, superficie piana è quella che giace ugualmente rispetto alle rette sudi essa. Queste definizioni forniscono solo un’idea intuitiva ma non risolvonoil problema in quanto richiamano altri concetti primitivi (parti, lunghezza,larghezza, ...) che andrebbero a loro volta definiti. Per questo motivo si ri-nuncia a definire formalmente questi concetti e li si accetta in modo intuitivo.Oltre a questi tre enti primitivi occorre assumere l’esistenza di tre relazioniprimitive tra gli enti geometrici che permettono di stabilire dei legami tra glienti geometrici; queste relazioni sono: giacere su, stare fra, essere congruentea.

Nei suoi Elementi, Euclide propose una sistematizzazione di tutta la mate-matica greca, che in pratica consisteva nella geometria, secondo un approcciorigorosamente ipotetico deduttivo. Egli pone a fondamento della geometriacinque postulati fondamentali, che si possono enunciare come segue:

I. Tra due punti distinti qualsiasi è possibile tracciare una ed una sola retta.

II. Si può prolungare un segmento oltre i due punti indefinitamente.

III. Dato un punto e una lunghezza, è possibile descrivere un cerchio.

IV. Tutti gli angoli retti sono congruenti tra loro.

V. Se una retta che taglia altre due rette determina dallo stesso lato an-goli interni minori di due angoli retti, prolungando le due rette, esse siincontreranno dalla parte dove i due angoli sono minori di due retti.

In epoca moderna il matematico Playfair ha riformulato il V postulatocome segue:

V’. Tra due punti distinti qualsiasi è possibile tracciare una ed una sola retta.

Va osservato che l’assioma secondo la formulazione di Playfair è più restrittivo,in quanto implica quello di Euclide ma non ne è implicato. Ad esempio, nellegeometrie ellittiche, nelle quali due rette si incontrano sempre, il postulato diEuclide è vero mentre quello di Playfair è falso.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 309: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

19.2. LE ENTITÀ GEOMETRICHE 299

La geometria fondata su questi cinque postulati (ed in particolare sul quin-to) viene detta geometria euclidea. Per più di duemila anni i matematici sisono cimentati nel vano tentativo di dedurre il quinto postulato dai primi;questi sforzi sono stati sospesi solo nell’Ottocento quando è stata dimostra-ta l’indipendenza del quinto postulato dai primi quattro. Ciò ha aperto lastrada alle cosidette geometrie non euclidee che si fondano su un postulatoalternativo al quinto di Euclide.

19.2 Le entità geometricheNel seguito, seguendo l’impostazione assiomatica, non ci preoccuperemo didefinire, ma assumeremo note da come sono state incontrate nella geometriaintuitiva, le seguenti entità fondamentali: punto, retta, piano.

Un insieme di punti del piano viene genericamente detto figura. Pren-dendo spunto dagli enti geometrici fondamentali individuati da Euclide e daisuoi primi tre postulati, nell’insieme delle figure del piano vengono privilegia-te delle classi di figure, particolarmente importanti perché oggetto di studiodella geometria elementare e presenti anche di diverse assiomatizzazioni dellageometria; queste entità sono descritte nella lista che segue:

Point = { punti del piano }

Line = { rette del piano }

Segment = { segmenti del piano }

Circle = { circonferenze del piano }

Indicheremo con G l’insieme di queste entità geometriche del piano, ossia l’u-nione degli insiemi Point,Line,Segment,Circle sopra descritti. Gli elementidi G devono essere considerati ancorati al piano nel senso che sono qualificati,altre che dalla loro forma, anche dalla loro posizione sul piano. In base aquesta ipotesi, due elementi di G sono uguali se e solo se sono sovrapposti (enon solo se sono isometrici). Ad esempio, un quadrato del piano è compostoda quattro segmenti diversi (non-uguali).

Sugli elementi di G sono definiti gli operatori di confronto di uguaglianza,di diversità e gli operatori di controllo di inclusione (tutti questi operatori sonoindotti dalla struttura insiemistica dell’insieme G). Inoltre, sugli elementi diG sono definite delle operazioni di natura metrica e geometrica che sarannodescritte nel seguito.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 310: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

300 CAPITOLO 19. TRACCIARE

19.3 Costruzione delle entità

Per il momento non consideriamo alcun sistema di riferimento, anche se leentità geometriche verranno considerate ancorate al piano. In pratica è comelimitarsi ad operare su un foglio bianco, disponendo di una riga non graduata,di un compasso e di una matita per tracciare le linee.

I punti possono essere considerati come gli elementi fondamentali per costi-tuire delle entità geometriche più complesse quali segmenti, rette, circonferen-ze; queste entità non sono altro che insiemi di punti soddisfacenti a specificheproprietà che le caratterizzano univocamente. Usando i punti come elementidi base si possono individuare e costruire altre entità geometriche mediantedelle apposite funzioni, dette costruttori, descritte a seguire.

Segment : Point2 � Segment segmento avente due dati vertici

Line : Point2 � Line retta passante per due dati punti

Circle : Point2 � Circle circ. di dato centro e punto di passaggio

Circle : Point �R � Circle circonferenza di dato centro e raggio

Esempio 152. Con Segment�A,B� si denota il segmento avente i due punti Ae B come estremi. I vertici di un segmento vengono considerati in un datoordine; per evidenziare questa convenzione, al posto del termine segmento, èspesso utilizzato il termine segmento orientato; il segmento di estremi A e B,di cui A è il primo vertice e B il secondo viene indicato con la notazione ABe graficamente viene rappresentato mediante un segmento orientato che partedal primo vertice e termina con una freccia sul secondo vertice. Con AB sidenota la lunghezza del segmento AB.

Simmetricamente ai costruttori, sono predisposte delle apposite funzio-ni, dette selettori, che, data un’entità geometrica, forniscono gli elementigeometrici che individuano l’entità. Tali funzioni sono elencate di seguito.

head : Segment � Point primo punto di un segmento

tail : Segment � Point secondo punto di un segmento

center : Circle � Point centro della circonferenza

radius : Circle � R raggio della circonferenza

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 311: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

19.3. COSTRUZIONE DELLE ENTITÀ 301

Nelle costruzioni geometriche con riga e compasso una tipica operazioneconsiste nel selezionare un punto (a caso) su una data entità geometrica. Taleoperazione viene predisposta tramite il selettore point che, applicato ad unagenerica entità geometrica, fornisce un suo punto come risultato; tale selettoreè caratterizzato dal seguente prototipo:

point : G � Point punto casuale della figura geometrica

Costruttori e selettori sono funzioni fra loro in relazione e, in un certo senso,possono essere considerate funzioni le une inverse delle altre; ad esempio, se sdenota un generico segmento e c una generica circonferenza, valgono le seguentiproprietà invarianti:

s � Segment�head�s�, tail�s��c � Circle�center�c�, point�c��

Un’altra importante classe di funzioni è costituita dai predicati che con-trollano se un punto appartiene ad una data entità geometrica. Il prototipodel predicato di appartenenza di un punto ad un’entità geometrica è:

in � Point � G � B

Per alcune classi di entità geometriche si definisce il concetto di misura, os-sia una funzione (soddisfacente a precisi assiomi che non vengono qui riportati)che ad ogni entità geometrica fa corrispondere un numero reale non negativoche rappresenta la sua misura. Nel caso di figure piane bidimensionali (trian-goli, cerchi, . . . ) la misura coincide con il concetto di area, mentre nel casodi figure piane unidimensionali (segmenti, circonferenze, curve, . . . ) la misuracoincide con il concetto di lunghezza. Per i segmenti e le circonferenze sonopredisposte ed utilizzeremo nel seguito le seguenti due funzioni:

length : Segment � R lunghezza di un segmento

length : Circle � R lunghezza di una circonferenza

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 312: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

302 CAPITOLO 19. TRACCIARE

19.4 Costruzioni con riga e compasso

Un classico modo per operare in un contesto di geometria euclidea consiste neldisegnare su un foglio bianco disponendo dei soli strumenti riga (non gradua-ta) e compasso. Storicamente sono stati questi i primi strumenti scientificiutilizzati per manipolare le entità geometriche fondamentali.

Nelle costruzioni con riga e compasso vengono ammesse le seguenti opera-zioni fondamentali:

r) retta passante per due dati punti distinti

s) segmento avente due dati punti come estremi

c) circonferenza avente per centro un dato punto e passante per un datopunto

Le tre operazioni sopra descritte possono essere declinate in modo procedu-rale, coerentemente con l’impostazione delle costruzioni di figure geometricheoperando su un foglio di disegno; in tale caso è come se ciascuna operazionefosse introdotta dal termine “disegnare“, ad esempio:

disegnare la retta r passante per i due punti A e B

Adottando invece un’impostazione di tipo funzionale, più coerentemente conl’operatività tipica di un linguaggio di programmazione, le tre operazioni so-pra descritte possono essere viste come funzioni che restituiscono come ri-sultato l’entità grafica costruita, ad esempio come compare nella seguenteassegnazione:

r � Line�A,B�Nelle costruzioni con riga e compasso si ammette anche l’uso del compasso

come rudimentale strumento di misura corrispondentemente all’operazione dipuntare il compasso in un dato punto, aprirlo fino ad un altro punto e poiutilizzare questa apertura per riportarla su una linea per costruire un nuovopunto oppure utilizzare tale apertura per disegnare una circonferenza; questamodalità di operare non presuppone che sia stata definita alcuna unità dimisura per determinare la distanza fra due punti. In questo modo risultapossibile quindi anche la seguente operazione:

c’) circonferenza avente per centro un dato punto e raggio uguale alla di-stanza fra due dati punti

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 313: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

19.4. COSTRUZIONI CON RIGA E COMPASSO 303

Interpretando le entità geometriche come insiemi di punti si possono defi-nire delle operazioni insiemistiche; in particolare l’intersezione fra due entitàgeometriche costituisce un’operazione fondamentale nel contesto delle costru-zioni con riga e compasso. Le possibili intersezioni fra entità geometriche dan-no come risultato, nei casi non particolari, uno o due punti e sono descrivibilimediante i seguenti prototipi:

9 : Line2� Point intersezione fra due rette

9 : Circle2� Point2 intersezione fra circonferenze

9 : Circle �Line � Point2 intersezione fra circonferenza e retta

L’operazione di intersezione fra rette può essere estesa al caso di segmenti,considerando la retta di supporto dei segmenti ed operando poi l’intersezionefra queste rette di supporto; in questo modo si possono considerare anche leseguenti operazioni di intersezione coinvolgenti segmenti:

9 : Segment2 � Point intersezione fra segmenti

9 : Circle � Segment � Point2 intersezione fra circonferenza e segmento

Nei casi in cui l’intersezione non sia possibile (rette parallele, retta esternaalla circonferenza, . . . ) si assume il valore nullo come risultato dell’operazione.

La seguente definizione precisa in cosa consista un procedimento di costru-zione geometrica mediante riga e compasso.

DEFINIZIONE 5. Un punto P del piano dicesi costruibile in un solopasso a partire da un insieme A di punti, se è ottenibile mediante interse-zione di due rette, di una retta ed una circonferenza o di due circonferenzecostruite con i punti di A, mediante le operazioni r), s) e c) elencate all’ini-zio di questo paragrafo. Un punto P dicesi costruibile a partire da A seesiste una sequenza di n punti �P1, P2, . . . , Pn� tale che Pn � P e, per ognii � 1,2, . . . , n, il punto Pi sia costruibile in un passo a partire dall’insiemeA 8 �P1, P2, . . . , Pi�1�. Costruire un punto significa descrivere le operazioniche lo generano. In molti casi si tratta di una sequenza di operazioni.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 314: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

304 CAPITOLO 19. TRACCIARE

19.5 Costruzioni con riga e compassoNegli algoritmi riportati negli esempi che seguono sono descritte alcune sem-plici costruzioni geometriche. Per capire ed interpretare correttamente glialgoritmi è consigliabile riprodurre graficamente su un foglio lo sviluppo delprocedimento.

La determinazione di un’entità geometrica può essere ottenuta medianteun’espressione, composta da entità ed operatori geometrici, che, valutata, for-nisce il risultato, oppure costruendo sequenzialmente delle entità geometricheche, memorizzate in delle variabili, permettono di determinare il risultato conuna sequenza di più passi.Esempio 153. L’asse a di un segmento s può essere determinato mediante lacostruzione geometrica descritta nella figura 153.

A

B

P

Q

M

αβ

Figura 19.1: Procedimento di disegno geometrico per la determinazionedell’asse del segmento a di estremi A e B.

Il procedimento grafico descritto nella figura 153. può essere descrittomediante il seguente algoritmo 153.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 315: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

19.5. COSTRUZIONI CON RIGA E COMPASSO 305

Algoritmo 95 - Asse di un segmento - asse(s)Input: Segment sOutput: asse del segmento s1: A� head�s�2: B � tail�s�3: α � Circle�A,B�4: β � Circle�B,A�5: t� α 9 β6: P � head�t�7: Q� tail�t�8: r � Line�P,Q�9: return r

In molti casi una costruzione viene usata come sottoprocedimento all’in-terno di altri procedimenti, come evidenziano i seguenti esempi.

Esempio 154. Il seguente algoritmo determina costruttivamente il centro diuna data circonferenza.

Algoritmo 96 - Centro di una circonferenza - centro(α)Input: Circle αOutput: centro della circonferenza α1: P � point�α�2: Q� point�α � �P��3: R � point�α � �P,Q��4: a� asse�Segment�P,Q��5: b� asse�Segment�Q,R��6: C � a 9 b7: return C

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 316: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

306 CAPITOLO 19. TRACCIARE

Esempio 155. Il seguente algoritmo determina sulla circonferenza α il diametroavente il punto A come uno dei suoi vertici.

Algoritmo 97 - Diametro di una circonferenza - diametro(α,A)Input: Circle α,Point AOutput: diametro della circonferenza α1: C � centro�α�2: r � Line�A,C�3: s� r 9 α4: return s

Esempio 156. Data una cironferenza ed un punto esterno ad essa, determinia-mo le rette tangenti condotte da un punto esterno.

A seguire è riportato un algoritmo che risolve il problema.

Algoritmo 98 - Rette tangenti ad una circonferenza da un punto esternoInput: Circle α, Point POutput: rette per P tangenti a α1: c� circonferenza di centro O e passante per P2: M � punto medio del segmento OP [sotto problema]3: d� circonferenza di centro M e passante per O4: �T1, T2�� punti di intersezione fra c e d5: r1 � retta per Q e T16: r2 � retta per Q e T27: return �r1, r2�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 317: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

19.6. ESERCIZI 307

19.6 Esercizi1. Determinare

(a) il punto medio di un segmento(b) il punto simmetrico di un dato punto rispetto ad un altro punto(c) il punto simmetrico di un dato punto rispetto ad una retta(d) il simmetrico di un segmento rispetto ad una retta

2. Dati i vertici di un triangolo, determinare

(a) il baricentro(b) il circocentro(c) l’incentro

3. Determinare il quadrato di cui è data una diagonale.

4. Determinare l’esagono di cui sono dati il centro ed un vertice.

5. Determinare il poligono regolare di cui è dato il centro, un vertice ed ilnumero dei vertici.

6. Dati due punti A e B, determinare il punto C vertice del triangoloequilatero sinistrorso QABC.

7. Dati due punti A e B, determinare due punti C e D in modo che i verticiA,B,C,D costituiscano i vertici di un quadrato.

8. Determinare il poligono regolare sinistrorso di n vertici di cui è dato unsegmento orientato che ne costituisce un lato.

9. Determinare la circonferenza

(a) avente un dato segmento come diametro(b) passante per 3 dati punti non allineati(c) passante per due dati punti ed avente centro su una data retta(d) avente per centro un dato punto e tangente ad una data retta(e) avente per centro un dato punto e tangente ad un’altra data cir-

conferenza(f) inscritta in un triangolo di cui sono dati i vertici(g) circoscritta ad un triangolo di cui sono dati i vertici

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 318: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

308 CAPITOLO 19. TRACCIARE

(h) più piccola che contiene tre dati punti

10. Determinare il punto di una circonferenza più vicino ad un dato punto.

11. Determinare la retta tangente ad una circonferenza in un suo punto.

12. Determinare il più piccolo cerchio che ricopre due dati cerchi.

13. Determinare il centro di omotetia di due circonferenze.

14. Determinare le circonferenze tangenti a tre date rette non parallele.

15. Determinare la retta passante per un punto e

(a) parallela ad una data retta(b) perpendicolare ad una data retta

16. Stabilire se due dati segmenti si intersecano.

17. Dati due punti distinti A e B del piano, determinare due circonferenzedi uguale raggio, fra loro tangenti esternamente nel punto medio M delsegmento AB ed aventi rispettivamente i segmenti AM e MB comediametri. Si assuma l’ipotesi che l’esecutore possa usare solamente riga(non graduata), compasso e matita.

18. Dati due punti distinti A e B del piano, determinare il quadrato avente ilsegmento AB come diagonale. Si assuma l’ipotesi che l’esecutore possausare solamente riga (non graduata), compasso e matita.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 319: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 20

Punteggiare

Euclide elaborò la sua geometria parten-do da un insieme di concetti fondamentali,uno dei quali è il punto. Un punto può de-finirsi come un’entità che ha una posizione,ma non ha nessun’altra proprietà. Non hacolore, né dimensione, né forma.S. Papert, Mindstorm

L’approccio di Euclide alla geometria, come descritto nel precedente ca-pitolo Tracciare, coinvolge un forte aspetto operativo in quanto le operazionisulle figure hanno diretta corrispondenza con le operazioni di disegno delle fi-gure mediante strumenti quali la riga ed il compasso. Come avviene spesso inmatematica gli enti trattati si affrancano da un loro iniziale uso esperenziele edacquistano successivamente un’esistenza concettuale. Questo percorso preseavvio considerando la figura più elementare immaginabile, il punto, e consi-derando il piano, non più come ambiente su cui disegnare ma come insiemecomposto da punti; per sottolineare questa impostazione si parla solitamentedi piano punteggiato. Nella geometria questo approccio alternativo permisedi considerare le figure come insiemi di punti e le operazioni sui punti venneroestese a figure generiche. Con il ricorso all’algebra si arrivò poi al concepire ipunti come entità astratte sulle quali eseguire operazioni.

309

Page 320: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

310 CAPITOLO 20. PUNTEGGIARE

20.1 Il piano euclideoIl piano punteggiato costituisce un buon punto di partenza per lo studio dellageometria. La prima e spontanea nozione è data dalla distanza euclidea fradue generici punti, definita come la lunghezza del segmento avente per estremii due dati punti; per fare ciò è sufficiente definire un’unità di misura. Perriferirsi al piano punteggiato così metrizzato si usa il termine piano euclideo.La funzione di distanza fra due punti è caratterizzata dal seguente prototipo:

dist � Point2 � R

In un contesto metrico, ossia basandosi sulla sola funzione dist, si inqua-drano molte problematiche geometriche che si possono risolvere mediante ilricorso al concetto di distanza fra punti.Esempio 157. L’area di un triangolo di dati vertici può essere calcolata me-diante la formula di Erone, utilizzata nel seguente algoritmo.

Algoritmo 99 - Area di un triangolo di dati verticiInput: vertici A,B,C del triangoloOutput: area del triangolo QABC1: a� dist�B,C�2: b� dist�A,C�3: c� dist�A,B�4: p� �a � b � c�~25: s�

»p�p � a��p � b��p � c�

6: return s

Esempio 158. Tre dati punti sono allineati se il triangolo da essi individuatoè degenere. Ciò può essere stabilito in base all’area (area uguale a 0) oppurepiù semplicemente basandosi sulle lunghezze dei tre lati (la lunghezza del latopiù lungo uguale alla somma delle lunghezze degli altri due).

0Oltre alla distanza euclidea si possono definire altri criteri di distanza, come sarà vistonel capitolo relativo alle strutture metriche.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 321: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.2. DEFINIZIONE DELLE ENTITÀ 311

Esempio 159. Per stabilire se un punto P è interno ad un triangolo di dativertici A,B,C basta osservare che se il punto è esterno la somma delle aree deitre triangoli QPAB, QPBC, QPAC risulta maggiore dell’area del triangoloQABC.

A

B C

P

Figura 20.1: Controllo se il punto P è esterno al triangolo ABC.

20.2 Definizione delle entitàUna classica impostazione nella definizione delle entità geometriche consistenel definirle come luogo geometrico ossia come insieme di punti soddisfacentiad una data proprietà; per comodità si prende spesso una proprietà facilmenteindagabile ed in particolare ci si basa sul concetto di distanza fra due punti;si danno allora le seguenti definizioni:

• circonferenza di centro C e raggio r : insieme dei punti P tali che

dist�P,C� � r• segmento di estremi A e B: insieme dei punti P tali che

dist�P,A� � dist�P,B� � dist�A,B�• retta passante per i punti A e B: insieme dei punti del segmento AB

uniti all’insieme dei punti P tali che

Sdist�P,A� � dist�P,B�S � dist�A,B�Queste definizioni suggeriscono interessanti generalizzazioni verso spazi di

dimensioni superiori e verso formalizzazioni più avanzate (spazi metrici).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 322: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

312 CAPITOLO 20. PUNTEGGIARE

20.3 Operazioni sui puntiNonostante l’apparente povertà, in questo ambiente si possono definire alcuneoperazioni definendo una sorta di algebra dei punti; facendo leva sulle opera-zioni di questa algebra si possono definire interessanti algoritmi (la situazioneè simile a quella che si riscontra nell’aritmetica elementare quando si cerca didefinire le operazioni elementari sui numeri naturali).

Consideriamo l’insieme dei punti del piano. Per il momento non consi-deriamo alcun sistema di riferimento; ci baseremo unicamente sul concetto didistanza fra punti (o, equivalentemente, sul concetto di lunghezza di un seg-mento); spesso non serve neanche ricorrere alla definizione dell’unità di misurain quanto si considerano solo rapporti di lunghezze. Nel seguito denoteremocon Point l’insieme dei punti del piano e con identificatori della forma A, B,C, . . . i singoli punti.

Sui punti del piano sono definite le seguenti operazioni Point� Point:

• omotetia: dati due punti A, B ed un numero reale λ si definisce comepunto omotetico di B rispetto ad A di rapporto λ il punto B� situatosulla retta passante per A e B tale che sia λ il rapporto delle lunghezzedei due segmenti AB� ed AB; tale punto viene indicato con la notazionefunzionale

hom�A,B,λ�

A

B�

B

AB� � λAB

Figura 20.2: Omotetia di rapporto λ del punto B rispetto al punto A.

Al variare del parametro λ in R, l’espressione hom�A,B,λ� fornisce ungenerico punto della retta passante per A e B; per λ � 0 si ottiene ilpunto A; per λ � 1 si ottiene il punto B; per λ A 1 si ottengono i puntidella semiretta Ð�AB oltre il punto B; per λ @ 0 si ottengono punti sulprolungamento della semiretta di vertice A e dalla parte opposta a B;per 0 @ λ @ 1 si ottengono tutti i punti compresi fra A e B. In generale,λ rappresenta il rapporto di omotetia del punto B� rispetto al centro A,assumendo AB di lunghezza unitaria.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 323: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.3. OPERAZIONI SUI PUNTI 313

• rotazione: dati due punti A, B e la misura α di un angolo si definiscecome punto ruotato di B rispetto ad A di angolo α il punto B� corri-spondente di B che si ottiene ruotanto il segmento AB di un angolo αin senso antiorario attorno al vertice A; tale punto viene indicato con lanotazione funzionale

rot�A,B,α�

α

A

B

B�

Figura 20.3: Rotazione di angolo α del punto B rispetto al punto A.

L’operazione hom presenta i seguenti interessanti casi particolari:

hom�A,B,0� � Ahom�A,B,1� � Bhom�A,B, 1

2� � punto medio del segmento AB

hom�A,B,2� � punto simmetrico di A rispetto a B

hom�A,B,�1� � punto simmetrico di B rispetto a A

Vale inoltre la seguente proprietà:

hom�A,B,2� � hom�B,A,�1�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 324: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

314 CAPITOLO 20. PUNTEGGIARE

Esempio 160. L’algoritmo 100 descrive un procedimento per determinare ilbaricentro di un triangolo basandosi sulla sua definizione (il baricentro di untriangolo è il punto d’incontro delle mediane) e su una sua proprietà (il ba-ricentro si trova su una diagonale ed è tale che la sua distanza dal vertice èdoppia della sua distanza dal punto medio).

A

B M C

R

Figura 20.4: Calcolo del baricentro R del triangolo ABC.

Algoritmo 100 - Baricentro di un triangoloInput: vertici A, B, C del triangoloOutput: baricentro del triangolo ABC1: M � hom�B,C, 1

2� # punto medio del segmento BC2: R � hom�A,M, 2

3�3: return R.

L’algoritmo 100 può essere condensato nell’unica espressione

hom�A,hom�B,C, 12�, 2

3�Esempio 161. L’uso combinato delle funzioni hom e rot permette di descrivereinteressanti algoritmi geometrici. Ricorrendo a queste funzioni si può scrivereun’espressione che rappresenta il baricentro del quadrato di lato AB situatoalla sinistra del segmento (orientato) AB. L’espressione è la seguente:

hom�A, rot�B,A,90�, 12�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 325: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.4. IL PIANO VETTORIALE 315

Osservazione. Fissati due generici punti distinti A e B l’espressione

rot�A,hom�A,B,λ�, α�al variare della coppia �α,λ� in R2, descrive tutto il piano; fissando il valore diα si ottiene il luogo geometrico dei punti appartenenti alla retta passante peri punti A e B; fissando il valore di λ si ottiene il luogo geometrico costituitodai punti della circonferenza di centro A e raggio dist�A,B�.

Osservazione. La disponibilità delle funzioni di base (sui punti e sullealtre entità geometriche) equivale all’uso di particolari strumenti di misura edi costruzione geometrica; ad esempio la funzione dist equivale all’uso di unariga graduata; la funzione hom equivale all’uso di una riga di tracciamento edi una riga graduata; la funzione rot equivale all’uso di un compasso e di ungoniometro.

20.4 Il piano vettorialeUn interessante arricchimento del piano punteggiato consiste nel definire unpunto di riferimento detto origine e denotato generalmente con O. In questasituazione il piano viene detto piano vettoriale.

La definizione del punto origine permette di definire delle ulteriori opera-zioni sui punti, come descritto a seguire.

• addizione fra due punti A e B: è il punto opposto all’origine che si ottienecostruendo il parallelogramma di lati OA ed OB, come descritto nellafigura 20.5.

O

B

A �B

A

Figura 20.5: Addizione fra il punto A ed il punto B.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 326: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

316 CAPITOLO 20. PUNTEGGIARE

• inverso di un punto A: è il punto che addizionato a A da come risultatoil punto origine O; si tratta del punto simmetrico di A rispetto ad O;L’inverso del punto A viene denotato con �A. La figura 20.6 illustra lacostruzione geometrica del punto �A.

O

A

�A

Figura 20.6: Inverso �A del punto A.

• sottrazione fra il punto A ed il punto B: è il punto definito come segue:

A �Bdef� A � ��B�

La figura 20.7 illustra la costruzione geometrica del punto A �B.

O

B

A

�B

A �B

Figura 20.7: Sottrazione fra punti.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 327: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.4. IL PIANO VETTORIALE 317

• moltiplicazione di un punto A per un numero λ > R: è il punto dellaretta passante per O ed A, tale che sia SλS il rapporto delle lunghezzedei segmenti OA� ed OA; il punto si trova sulla semiretta OA se λ A 0;altrimenti sulla semiretta opposta

O

A�

A

OA� � λOA

Figura 20.8: Moltiplicazione del punto A per il numero λ � 1.3.

Al posto di λ �A viene più spesso utilizzata la notazione λA. L’appli-cazione A ( λA di Point in sé stesso viene detta omotetia di rapportoλ.

• rotazione del punto A di un angolo α: è il punto che si ottiene ruotandoil segmento OA di un angolo α attorno all’origine O; viene indicato con

P r α

α

O

A

A�

Figura 20.9: Rotazione del punto A di un angolo α.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 328: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

318 CAPITOLO 20. PUNTEGGIARE

Esempio 162. Dati due punti A e B, dalle definizioni delle operazioni sui puntiriportate sopra e dall’osservazione che il punto di intersezione le diagonalidel parallelogramma OA�B � C�B dimezza le diagonali, dalla figura 20.10 siriconosce facilmente che �A �B�~2 costituisce il punto medio fra A e B.

O

B

A �B

A

Figura 20.10: Calcolo del punto medio fra A e B.

20.5 L’algebra dei puntiLe operazioni sui punti descritte nel precedente paragrafo godono di molteproprietà che sono riassunte nel seguente teorema.

TEOREMA 6. L’insieme Point dei punti del piano, con le operazioni sopradefinite, soddisfa alle seguenti proprietà:

G1. P �Q � Q � P per ogni P,Q > Point [commutatività]

G2. �P �Q� �R � P � �Q �R� per ogni P,Q,R > Point [associatività]

G3. P �O � O � P � P per ogni P > Point [elemento neutro]

G4. per ogni P > Point esiste �P > Point tale che P � ��P � � O [inverso]

G5. λ �P �Q� � λP � λQ per ogni P,Q > Point e λ > R

G6. �λ � µ�P � λP � µP per ogni P > Point e λ,µ > R

G7. �λµ�P � λ�µP � per ogni P > Point e λ,µ > R

G8. 1P � P per ogni P > Point

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 329: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.5. L’ALGEBRA DEI PUNTI 319

Le proprietà G1,G2,G3,G4 possono essere sintetizzate affermando che lastruttura �Point,�� costituisce un gruppo abeliano. Queste quattro pro-prietà costituiscono infatti gli assiomi dei gruppi abeliani. Le proprietàG5,G6,G7,G8 (assieme a molte altre) discendono come conseguenza dalle pri-me quattro; la loro dimostrazione può essere fatta nel contesto astratto dellateoria dei gruppi.

L’insieme di proprietà riportate nel Teorema 6 corrisponde alle usuali pro-prietà dell’algebra; questo permette di scrivere e di elaborare espressioni coin-volgenti i punti operando formalmente, senza preoccuparsi del significato delletrasformazioni, ottenendo, alla fine, dei risultati semanticamente corretti.Esempio 163. Indicando con P,Q dei generici punti, si possono ottenere leseguenti trasformazioni di espressioni:

2P � 3P � 5PP �Q � P � 2P �Q

3P � 2Q � P � 2�P �Q�Esempio 164. Per determinare il simmetrico Q di un punto P rispetto al centroC si può operare come segue:

12�P �Q� � C

P �Q � 2CQ � 2C � P

Esempio 165. Il calcolo del baricentro R di un triangolo di vertici A,B,C puòessere svolto con i seguenti calcoli, dove con M si denota il punto medio fra Ae B:

M �12A �

12B

R �13A �

23M

�13A �

23�12A �

12B�

�13�A �B �C�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 330: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

320 CAPITOLO 20. PUNTEGGIARE

20.6 Proprietà delle operazioni

Le seguenti due proprietà mettono in relazione le operazioni hom e rot con leoperazioni addizione, sottrazione e rotazione fra punti.

PROPRIETÀ 4. Siano A,B due punti distinti del piano. Vale la relazione

hom�A,B,λ� � A � λ�B �A�Dimostrazione. Consideriamo la seguente figura:

O

A

BP

λ�B �A�B �A

Il punto λ�B � A� si trova sulla retta per O e B � A. In base alla regoladel paralleogramma applicata all’addizione fra i due punti A e λ�B � A� sideduce che il punto P deve stare sulla retta per A e B in quanto i quattropunti O,λ�B �A�, P e A sono i vertici di un parallelogramma.

Osservazione. Al variare del parametro reale λ, l’espressione A�λ�B�A�genera tutti i punti appartenenti alla retta passante per A e B.

Esempio 166. Una semplice applicazione di quanto sopra descritto permettedi determinare il punto medio M fra due dati punti A,B: prendendo λ �

12 si

ha:

M � A � 12�B �A� � 1

2A � 12B �

12�A �B�

PROPRIETÀ 5. Siano A,B due punti distinti del piano. Vale la relazione

rot�A,B,α� � A � ��B �A� r α�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 331: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.6. PROPRIETÀ DELLE OPERAZIONI 321

α

O

P �

P ��

α

A

B

P

Dimostrazione. L’espressione rot�A,B,α� rappresenta il punto P ottenutodalla rotazione di un angolo α del segmento AB attorno al punto A.

Consideriamo le due rette per O e parallele rispettivamente a AB ed APe consideriamo i due parallelogrammi OP �BA e OP ��PA. Per costruzionerisulta P � � B � A. I due angoli P �OP �� e BAP sono isometrici in quantoalterni generati dall’intersezione di rette parallele di due fasci. Dunque P �� �

P � r α � �B �A� r α. Osservando che P � A � P ��, si conclude.Osservazione. Fissato il punto origine O e due punti distinti A,B (diversi

dall’origine), l’espressione

λA � µB λ,µ > R

detta combinazione lineare fra A e B, genera, al variare di λ,µ in R tutti ipunti del piano. Rimane così stabilita una corrispondenza biunivoca fra ipunti del piano e le coppie �λ,µ� > R2. I valori di tale coppia vengono detticoordinate del punto generato. Imponendo delle condizioni alla variabilitàdella coppia �λ,µ� rimane individuato un sottoinsieme dei punti del piano.In particolare imponendo la condizione

λ � µ � 1

si descrivono tutti i punti della retta passante per A e B. Di conseguenzal’espressione

λA � �1 � λ�Bdescrive tutti i punti della retta passante per A e B.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 332: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

322 CAPITOLO 20. PUNTEGGIARE

20.7 Esercizi1. Determinare il perimetro di un triangolo di dati vertici.

2. Dati i vertici di un triangolo, stabilire se

(a) il triangolo è scaleno(b) il triangolo è isoscele(c) il triangolo è equilatero(d) il triangolo è rettangolo

3. Dati i vertici di due triangoli, decidere se due triangoli sono

(a) isometrici(b) equivalenti(c) simili

4. Decidere se un punto appartiene

(a) ad un segmento(b) ad una retta(c) ad una circonferenza

5. Decidere se un punto è interno

(a) ad una circonferenza(b) ad un triangolo(c) ad un quadrilatero(d) ad una striscia di larghezza un dato segmento

6. Decidere se un segmento è completamente contenuto all’interno di unacirconferenza.

7. Decidere se

(a) due segmenti sono allineati(b) due segmenti sono paralleli.(c) due rette sono parallele

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 333: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

20.7. ESERCIZI 323

8. Determinare la distanza di un punto da

(a) un segmento(b) una retta(c) una circonferenza(d) un cerchio(e) un triangolo

9. Determinare il più piccolo segmento che

(a) contiene 3 dati punti allineati(b) contiene 4 dati punti allineati

10. Decidere se si intersecano

(a) due segmenti(b) due circonferenze(c) due cerchi(d) due triangoli

11. Decidere se un dato quadrilatero è

(a) circoscrittibile da una circonferenza(b) inscrittibile in una circonferenza

12. Data una sequenza di quattro punti, decidere se il quadrilatero corri-spondente è convesso. Suggerimento: ogni punto deve essere esterno altriangolo formato dagli altri tre punti.

13. Data la sequenza dei vertici di un quadrilatero, determinarne l’area edil perimetro.

14. Dimostrare che la seguente sequenza di assegnazioni ha l’effetto di scam-biare i due punti P,Q:

P � P �Q

Q� P �Q

P � P �Q

15. Dimostrare che il punto medio di un segmento AB è dato dall’espressione12�A �B�.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 334: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

324 CAPITOLO 20. PUNTEGGIARE

16. Determinare un punto C interno ad un segmento AB in modo da sud-dividerlo in proporzioni auree, ossia in modo tale che AB � AC � AC �

CB.

17. Dati due punti A, B, determinare altri due punti C, D in modo che ilquadrilatero ABCD risulti un quadrato di diagonali AC e BD.

18. Dati tre punti A,B,C, determinare un quarto punto D in modo che iquattro punti ABCD, nell’ordine, formino un parallelogramma.

19. Basandosi sulla funzione dist che determina la distanza fra due genericipunti del piano, scrivere degli algoritmi per:

(a) stabilire se 3 dati punti sono allineati.(b) determinare la distanza di un punto dalla retta passante per due

punti

20. Sia A � �P1, P2, . . . , Pn� un insieme di punti del piano. Stabilire cosarappresenta l’espressione

1n

n

Qi�1Pi

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 335: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 21

Aggregare

I programmi per computer usualmenteoperano su tabelle d’informazioni. Nel-la maggioranza dei casi queste tabelle nonsono semplicemente masse amorfe di va-lori numerici; esse coinvolgono importantirelazioni strutturali fra i dati elementi.D. Knuth,The Art of Computer Programming

Nel mondo fisico ogni cosa è composta da elementi fondamentali primitivinon scomponibili (atomi) o considerati tali nel contesto in cui ci si pone;similmente in informatica esistono componenti elementari che sono i più piccoliframmenti dotati di significato e non ulteriormente scomponibili. Gli elementifondamentali possono essere aggregati per formare oggetti più complessi, dettistrutture. Le strutture possono essere formate da elementi che sono a lorovolta strutture composte da elementi.

Le sequenze sono particolari strutture formate da un numero finito di ele-menti disposti in fila, uno dopo l’altro. Le sequenze specializzano il concettodi struttura, in quanto non sono solo una struttura insiemistica di elemen-ti, ma una struttura in sequenza in quanto ogni elemento della struttura ècaratterizzato da una sua specifica posizione.

325

Page 336: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

326 CAPITOLO 21. AGGREGARE

21.1 Atomi e strutture

Il meccanismo di aggregazione può essere pensato come un’operazione cheraggruppa un insieme di elementi, secondo lo schema descritto nella figura 21.1.

aggregazione-

YY

Y

YY

Y

Y YY

YY

Y

YY

Y

Y YY

atomi struttura

Figura 21.1: Operazione di aggregazione di un insieme di atomi per formareuna struttura.

21.2 Le sequenze

Gli elementi che costituiscono una struttura possono essere organizzati in di-versi modi; una delle forme più elementari di organizzazione è costituita dallasequenzializzazione che consiste nel disporre (fisicamente) o considerare (vir-tualmente) gli elementi in fila, uno dopo l’altro, secondo lo schema descrittonella figura 21.2.

sequenzializzazione-

YY

Y

YY

Y

Y YY

Y Y Y Y Y Y Y Y Y

0 1 2 3 4 5 6 7 8

Figura 21.2: Operazione di sequenzializzazione di un insieme di elementi.

In una sequenza ogni elemento occupa una ben precisa posizione all’internodella sequenza. Per compatibilità con molti linguaggi di programmazione, leposizioni degli elementi in una sequenza iniziano dalla posizione 0.

Il meccanismo di sequenzializzazione fornisce il supporto per lo sviluppodi molti ed importanti algoritmi, come gli algoritmi di ricerca e di ordinamen-to. Inoltre, le sequenze costituiscono un meccanismo spesso utilizzato perrealizzare delle particolari strutture di dati astratte.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 337: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.2. LE SEQUENZE 327

Con il termine sequenza si indica una struttura di elementi, detti atomi,disposti in fila, uno dopo l’altro; in generale, un atomo o una sequenza vienechiamato elemento. Se a0, . . . , an sono degli elementi, la scrittura 1

�a0, . . . , an�denota la sequenza costituita dagli elementi a0, . . . , an, mentre la scrittura

� �denota la sequenza vuota, ossia la sequenza composta da nessun elemento.

Una sequenza �a0, a1, . . . , an� viene spesso descritta graficamente medianteuno schema simile a quello riportato nella figura 21.3.

a0 a1 . . . an

Figura 21.3: Rappresentazione grafica della sequenza �a0, a1, . . . , an�.Se h e k sono due numeri naturali con h B k, con

�h..k�si denota la sequenza composta dai numeri naturali compresi fra h e k, estremicompresi, mentre con

range�k�si denota la sequenza dei numeri naturali compresi fra 0 e k � 1 e con

range�h, k�si denota la sequenza dei numeri naturali compresi fra h e k � 1.Esempio 167. Dalla definizione di sequenza, si può immediatamente ricono-scere che i seguenti sono degli esempi di sequenze:

� ��7��3,2,5��8, TRUE, ”cielo”�1La scrittura �. . . � usata per denotare una sequenza (oltre che essere sintatticamente

compatibile con molti linguaggi di programmazione) ha una valenza figurativa che richiamala gestualità delle mani per raggruppare degli oggetti.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 338: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

328 CAPITOLO 21. AGGREGARE

In generale, una sequenza può essere formata da una sequenza di espres-sioni della forma �e0, e1, . . . , en�Esempio 168. Esempi di sequenze formate da espressioni:

�8, ”uno”, TRUE,1 � 2,3 A 4���2 � 3� � 5,3 A 4,max�4,7� � 5�Nel momento in cui in un programma la sequenza viene considerata, le

varie espressioni ei che compongono la struttura vengono valutate e vienegenerata una sequenza di valori, come evidenzia l’esempio che segue.Esempio 169. L’esempio che segue evidenzia come le sequenze di espressionivengano valutate nel momento in cui vengono considerate:

x � 10y � x � 1x � 20a � �x, y, x � y�y � 30

Al termine di questa sequenza di assegnazioni la sequenza a vale �20,11,31�.Le sequenze possono essere costituite da elementi che sono a loro volta

delle sequenze; in questi casi si parla di sequenze composte.Esempio 170. Alcuni esempi di sequenze composte:

��1�, �2�, �3����7, TRUE�, �4, FALSE����1�, �2,2�, �3,3,3�, �4,4,4,4��21.3 Operazioni sulle sequenzeLa costruzione di una sequenza �a0, . . . , an� può essere vista come l’applicazio-ne dell’operatore � � in notazione distribuita applicato agli operandi a0, . . . , an.Tale operazione viene detta sequenzializzazione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 339: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.3. OPERAZIONI SULLE SEQUENZE 329

Data una generica sequenza a, con

len�a�si denota la lunghezza di a, ossia il numero di elementi che la compongono. Lasequenza vuota � � ha lunghezza 0.

L’operazione di concatenazione fra due sequenze produce come risultatouna sequenza costituita dagli elementi della prima sequenza seguiti dagli ele-menti della seconda; l’operazione di concatenazione viene solitamente denotatamediante l’operatore binario infisso � come segue 2 :

�a0, . . . , an� � �b0, . . . , bm�� �a0, . . . , an, b0, . . . , bm�La sequenza vuota � � costituisce l’elemento neutro (sinistro e destro) perl’operazione di concatenazione. L’operazione di concatenazione gode del-la proprietà associativa, ossia, per generiche sequenze a, b, c, vale l’identità�a � b� � c � a � �b � c�; l’operazione di concatenazione non gode invece dellaproprietà commutativa, ossia, in generale, a � b x b � a.

Le operazioni di inserimento in testa ed aggiunta in coda di un elemen-to in una sequenza possono essere espresse tramite l’operatore � � di sequen-zializzazione e l’operatore � di concatenazione, come illustrato dai seguentiesempi: �x� � �p, q, r�� �x, p, q, r�

�p, q, r� � �x�� �p, q, r, x�Sulle sequenze si può applicare l’operazione di ripetizione: il risultato della

ripetizione di una sequenza a � �a0, . . . , an� per una costante naturale k ècostituito da una sequenza ottenuta concatenando k sequenze a, ossia

k � �a0, . . . , an�� �a0, . . . , an, a0, . . . , an, . . . �L’espressione naturale k è detta ripetitore. Il valore k � 1 costituisce l’ele-mento neutro per l’operazione di ripetizione di sequenze, ossia 1 � a� a. Perconvenzione si pone 0�a� � �. L’operazione di ripetizione può essere espressaanche in notazione postfissa, nella forma a � k.

L’operazione di ripetizione di sequenze realizza anche il meccanismo dicostruzione e dimensionamento iniziale: l’espressione

n � �x�2Qualora non risulti ambiguo, nei testi il segno � dell’operatore di concatenazione viene

talvolta omesso e le due sequenze da concatenare vengono semplicemente scritte affiancate.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 340: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

330 CAPITOLO 21. AGGREGARE

produce una sequenza di n elementi x.L’operazione di ripetizione di una sequenza per un numero gode di alcune

interessanti proprietà; in particolare, se a è una sequenza e h e k sono duenumeri naturali, vale la proprietà

h � a � k � a � �h � k� � aEsempio 171. A seguire sono riportati alcuni esempi di operazioni e corrispon-denti calcoli sulle sequenze:

�1,2,3� � �4,5� � �1,2,3,4,5�5 � �0� � �0,0,0,0,0�

4 � �1,2� � �1,2,1,2,1,2,1,2�2 � �3 � �4�� � ��4,4,4�, �4,4,4��

Esempio 172. Le operazioni di aggregazione e ripetizione di elementi possonocombinarsi in tutti i modi possibili in modo da costituire un’effettiva algebracon proprie specifiche proprietà; segue qui un esempio di calcolo che illustracome si opera in quest’algebra:

�0,1� � 2 � �2 � �0� � �1�� � �0� � �0,1� � 2 � ��0,0� � �1�� � �0��� �0,1� � 2 � �0,0,1� � �0��� �0,1� � �0,0,1� � �0,0,1� � �0��� �0,1� � �0� � �0,1� � �0� � �0,1� � �0��� �0,1,0� � �0,1,0� � �0,1,0��� 3 � �0,1,0�

Esempio 173. Nel contesto dei linguaggi di programmazione le sequenze posso-no essere denotate mediante degli identificatori e questi identificatori possonoessere usati come elementi costituenti altre sequenze; un esempio di questapossibilità è riportato nella seguente porzione di codice.

a � �1,2,3�b � �4,5,6,7,8�c � a � b

Osservazione. Le sequenze sono degli oggetti e con un’assegnazione dellaforma a� �. . . � l’identificatore a diventa un riferimento alla sequenza. Un’o-perazione fra sequenze (ad esempio una concatenazione) comporta invece lacreazione di una nuova sequenza costituita da copie delle sequenze. Que-sta osservazione diventa fondamentale per interpretare situazioni come quelledescritta nell’esempio che segue.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 341: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.4. ELABORAZIONE DI SEQUENZE 331

Esempio 174. Con seguente sequenza di assegnazioni:

a � �1,2,3�b � a � a

c � �a, a�a�1� � 4

si ottiene la seguente situazione:

a � �1,2,3�b � �1,2,3,1,2,3�c � ��1,4,3�, �1,4,3��

21.4 Elaborazione di sequenzeLa forma più elementare di elaborazione di una sequenza consiste nel passarein esame tutti i suoi elementi ed elaborarli sequenzialmente. A questo scopoè predisposto il controllo for nella forma riportata nell’algoritmo 101.

Algoritmo 101 - Elaborazione sequenziale di una sequenzaInput: sequenza a1: for x in a do2: elabora elemento x3: end for

Esempio 175. Calcolo della somma degli atomi di una sequenza numericapiatta.

Algoritmo 102 - Somma degli elementi di una sequenza semplice numericaInput: sequenza aOutput: somma degli elementi della sequenza a1: s� 02: for x in a do3: s� s � x4: end for5: return s

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 342: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

332 CAPITOLO 21. AGGREGARE

21.5 Array e matriciGli array sono delle particolari sequenze sulle quali si può accedere e modificaregli elementi individualmente, accedendovi mediante un indice di posizione. Sea è una sequenza, con

a�i�si denota l’i-esimo elemento di a; in generale al posto di i si può mettere unaqualsiasi un’espressione naturale che, valutata, produca un numero naturale.La modifica di un elemento di un array avviene con la notazione

a�i�� esp

che ha l’effetto di assegnare all’i-esimo elemento dell’array a il valore ottenutodalla valutazione dell’espressione esp. L’elaborazione di un array a di dimen-sione n avviene generalmente con un ciclo for secondo il seguente schema dialgoritmo:

Algoritmo 103 - Elaborazione di un array a di dimensione nInput: array a di dimensione n1: for i in range�n� do2: elabora l’elemento a�i�3: end for

Un caso particolare di array è costituito dalle matrici (bidimensionali)che sono degli array i cui elementi sono a loro volta degli array della stessalunghezza.Esempio 176. L’array

� �2,3,7,1�, �5,8,4,2�, �3,0,2,5� �costituisce una matrice bidimensionale. Una tale matrice viene usualmentedescritta in forma tabellare come segue:

2 3 7 15 8 4 23 0 2 5

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 343: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.5. ARRAY E MATRICI 333

Se a è una matrice bidimensionale, coerentemente con la notazione usataper l’operatore di selezione ad indice, con la notazione

a�i�si denota l’array costituito dall’i-esima riga della matrice a, mentre con

a�i��j�si denota il j-esimo elemento dell’i-esima riga della matrice a. In generale alposto di i e j si può mettere qualsiasi un’espressione naturale che, valutata,produca un numero naturale. Con l’istruzione

a�i��j�� esp

si ottiene l’effetto di assegnare all’elemento a�i��j� il valore ottenuto dallavalutazione dell’espressione esp.

Il numero m di righe ed n di colonne di una matrice a è ricavabile mediantela funzione len come segue:

m � len�a�n � len�a�0��

L’elaborazione di una matrice a di m righe ed n colonne avviene general-mente con un ciclo for secondo il seguente schema di algoritmo:

Algoritmo 104 - Elaborazione di una matrice a di dimensioni n �mInput: matrice a di dimensione m � n1: for i in range�m� do2: for j in range�n� do3: elabora l’elemento a�i��j�4: end for5: end for

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 344: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

334 CAPITOLO 21. AGGREGARE

21.6 Esercizi1. Descrivere il significato degli operatori � e � che compaiono nella se-

guente espressione:

��1 � 2� � �3�� � �4 � �4 � 5 � 6��Valutare l’espressione.

2. Calcolare le seguenti espressioni:

(a) �1��0�(b) �0� � �1�(c) 2 � �1��0�(d) �2 � �1���0�(e) 1 � �2� � �3�(f) �5 � �4����3 � �2���1��(g) ��1� � 2 � �3� � 4 � �5���6�

3. Scrivere delle espressioni che generino le seguenti sequenze:

(a) �1,1,1,1,1,1,1,1,1,1�(b) �1,2,3,4,5,6,7,8,9,10�(c) �1,2,1,2,1,2,1,2,1,2�(d) �1,1,1,1,1,2,2,2,2,2�(e) �1,2,3,4,5,1,2,3,4,5�

4. Scrivere delle espressioni che generino le seguenti sequenze di dimensione16:

(a) �0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0�(b) �0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1�(c) �0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1�(d) �0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1�

5. Dato il numero naturale n, generare le seguenti sequenze:

(a) �1,2,3, . . . , n�(b) �n,n � 1, . . . ,3,2,1�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 345: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.6. ESERCIZI 335

(c) �1,1,2,1,2,3,1,2,3,4, . . . ,1,2, . . . , n�(d) �1,2,2,3,3,3, . . . , n, n, . . . , n�

6. Sia x un atomo e m,n due numeri naturali. Discutere se le seguentiespressioni sono equivalenti:

(a) �m � n� � �x�(b) m � �n � �x��(c) n � �m � �x��(d) m � �n � �x� �

7. Date le sequenze a � �x�, b � �y�, scrivere, in funzione di a e b, un’espres-sione che rappresenti la sequenza �x,x, . . . , x, y, y, . . . , y� costituita da katomi x e da k atomi y.

8. Date le sequenze a � �x�, b � �y�, scrivere, in funzione di a e b, un’e-spressione che rappresenti la sequenza �x, y, x, y, . . . , x, y� costituita da katomi x e da k atomi y alternati.

9. Data la sequenza a � �1,2,3�, calcolare le seguenti espressioni:

(a) a � a(b) 2 � a(c) �a� � �a�(d) 2 � �a�(e) �a � a�(f) �2 � a�

10. Dato il numero naturale n, generare le seguenti sequenze:

(a) sequenza dei numeri da 1 a n(b) sequenza dei primi n numeri naturali dispari(c) sequenza dei numeri pari minori o uguali a n(d) sequenza dei divisori di n(e) sequenza dei numeri primi minori o uguali a n(f) sequenza delle coppie di numeri naturali che danno per prodotto n

11. Determinare le eventuali soluzioni intere di un’equazione di secondogrado.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 346: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

336 CAPITOLO 21. AGGREGARE

12. Risolvere un’equazione di secondo grado, gestendo anche i casi in cui leradici siano complesse non reali.

13. Determinare la sequenza delle cifre (in base 10) di un dato numeronaturale. Ad esempio, la sequenza delle cifre di 3482 è �3,4,8,2�.

14. Data una sequenza di cifre binarie, determinare il numero corrisponden-te; ad esempio, alla sequenza �1,1,0,1� corrisponde il numero 13.

15. Determinare le coppie di numeri naturali che danno per prodotto undato numero naturale.

16. Determinare la sequenza dei divisori di un dato numero naturale.

17. Dato un numero naturale rappresentante una quantità di denaro espressain centesimi di Euro, determinare il più piccolo insieme di monete (da 1,2, 5, 10, 20, 50 centesimi di Euro) equivalente alla data cifra. Esprimereil risultato mediante una sequenza di coppie.

18. Dato un numero naturale @ 100, determinare la più piccola sequenzadi monetine centesimi di taglio 1,2,5,10,20,50. Ad esempio, dato ilnumero 96 si deve determinare la sequenza �50,20,20,5,1�.

19. Dato un array di numeri, determinare

• il massimo• il minimo ed il massimo• il massimo e le sue posizioni• la somma degli elementi presenti• il prodotto dei elementi presenti• la media di tutti i numeri• la media escludendo dal calcolo i valori uguali a zero• la media escludendo dal calcolo i valori minimo e massimo

20. Determinare quante volte è presente un dato valore in un array.

21. Decidere se in un array è presente un dato valore.

22. Determinare i numeri primi presenti in un array di numeri naturali.

23. Determinare il numero di elementi distinti presenti in un array.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 347: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

21.6. ESERCIZI 337

24. Suddividere una sequenza semplice di numeri naturali in due parti: unacontenente i numeri pari e l’altra i numeri dispari.

25. Data una sequenza, determinare la sottosequenza degli elementi di po-sizione pari e quella degli elementi di posizione dispari.

26. Costruire la sequenza composta ��1�, �2,2�, �3,3,3�, �4,4,4,4���.27. Costruire la sequenza composta dalle righe dei numeri del triangolo di

Tartaglia.

28. Costruire delle matrici rettangolari secondo i seguenti schemi:

0 0 0 0 0 0 0 1 0 1 0 10 1 1 1 1 0 1 0 1 0 1 00 1 1 1 1 0 0 1 0 1 0 10 1 1 1 1 0 1 0 1 0 1 00 0 0 0 0 0 0 1 0 1 0 1

29. Costruire delle matrici di numeri secondo i seguenti schemi, riferiti amatrici di dimensioni m � 5, n � 6:

11 12 13 14 15 16 1 2 3 4 5 621 22 23 24 25 26 7 8 9 10 11 1231 32 33 34 35 36 13 14 15 16 17 1841 42 43 44 45 46 19 20 21 22 23 2451 52 53 54 55 56 25 26 27 28 29 30

30. Costruire una matrice quadrata ad anelli concentrici, mettendo 1 sull’a-nello esterno, 2 nel secondo anello e così via.

31. Costruire una matrice quadrata con i valori 0 e 1, mettendo il valore 1(e 0 altrove) secondo i seguenti schemi:

(a) sulla diagonale principale(b) sulla diagonale secondaria(c) su entrambe le diagonali(d) sui bordi della matrice(e) sul triangolo superiore destro

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 348: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

338 CAPITOLO 21. AGGREGARE

(f) sul triangolo superiore sinistro(g) sul triangolo inferiore destro(h) sul triangolo inferiore sinistro(i) sulle righe di indice pari(j) sulle colonne di indice pari

32. Costruire una matrice quadrata n � n che costituisca la tabella di addi-zione modulo n.

33. Costruire la matrice tavola pitagorica 10 � 10.

34. Determinare il valore massimo fra quelli presenti in una matrice nume-rica.

35. Determinare il minimo ed il massimo e la loro frequenza, in una matricenumerica.

36. Decidere se all’interno di una matrice è presente un dato elemento.

37. Ricercare se e dove è presente un dato valore in una matrice.

38. Determinare quante volte un dato elemento è presente all’interno di unamatrice.

39. Decidere se una matrice è composta da elementi tutti uguali.

40. Contare il numero di elementi distinti presenti in una matrice.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 349: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 22

Astrarre

Parliamo di livelli di astrazione, di gestio-ne, di dettaglio. Tutte queste cose cuivengono comunemente attribuiti dei livellihanno qualcosa in comune? Si: ciascunadi essere sembra riflettere una certa manie-ra di organizzare le idee, e ciascuna apparevagamente gerarchica.M. Minsky,La società della mente

Per dominare la complessità, sia dal punto di vista concettuale che dalpunto di vista operativo, l’uomo fa spesso ricorso al principio di astrazioneche consiste nell’isolare le caratteristiche peculiari di un oggetto di indagine.Questo modo di procedere viene sintetizzato nella nozione di blocco: essa per-mette di definire un’utile dicotomia fra il fuori ed il dentro, fra il progetto ela realizzazione, fra il cosa fa un oggetto verso l’esterno e come è fatto al suointerno; in questo modo viene facilitata la comprensione e gestione della realtàin quanto si può trascurare i dettagli di come il blocco è fatto al suo interno.

I blocchi vengono utilizzati sia a livello progettuale, quando si definiscel’interfaccia di un blocco e si demanda a tempi successivi o a qualcun altrola sua implementazione, sia quando un blocco viene utilizzato considerandonesolamente la sua interfaccia d’uso, tralasciando i dettagli della sua implemen-tazione interna; inoltre offrono il vantaggio operativo fondato sulla possibilitàdi utilizzarli nella costruzione di altri blocchi.

339

Page 350: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

340 CAPITOLO 22. ASTRARRE

22.1 BlocchiIl concetto di blocco può assumere diversi significati a seconda del contesto incui si colloca, assumendo di volta in volta delle diverse denominazioni, comedescritto dalla lista che segue:

• problema: blocco vuoto in cui sono esplicitati solamente gli ingressi (datidel problema), le uscite (risultati del problema) ed i vincoli fra gli ingressie le uscite

• algoritmo: blocco in cui si vuole evidenziare la descrizione del procedi-mento di elaborazione interna; in pratica il blocco-algoritmo costituiscel’implementazione del blocco-problema

• macchina: blocco caratterizzato da un meccanismo di elaborazione auto-matico interno che produce delle uscite in conseguenza di certi ingressi;altri termini sinonimi: automa, robot.

• funzione: blocco in cui si vuole evidenziare il legame funzionale fra gliingressi e le uscite, ossia fra gli argomenti del dominio ed i risultati delcodominio

• operazione: blocco che genera un risultato eseguendo un’operazione sugliingressi

• oggetto: blocco dotato di uno stato interno

• componente: blocco costituente un elemento di un sistema

• sistema: blocco costituito da più componenti fra loro interagenti

• rete: blocco in cui si evidenziano le mutue interrelazioni fra le compo-nenti costitutive

• struttura: blocco composto da una struttura di dati

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 351: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.2. FUNZIONE DI TRASFORMAZIONE DI UN BLOCCO 341

Un blocco, considerandolo solamente dal punto di vista di come interagiscecon l’esterno, può essere pensato come una scatola nera, e può essere utilizzatosenza riferirsi ad alcun dettaglio relativo alla sua costituzione interna. Indi-pendentemente dalla sua funzionalità, un blocco viene generalmente descrittomediante un rettangolo come descritto nella figura 22.1.

blocco

Figura 22.1: Schema grafico per denotare un blocco.

22.2 Funzione di trasformazione di un bloccoUn blocco, per essere efficace, deve interagire con l’ambiente circostante. L’in-terazione di un blocco con l’ambiente esterno ad esso può essere scissa in duecomponenti: ingressi e uscite. Gli ingressi x e le uscite y sono legati da unarelazione funzionale della forma

y � F�x�dove F è la funzione di trasformazione che caratterizza il blocco; Questa rela-zione funzionale evidenzia che le uscite y si ottengono mediante la trasforma-zione F che agisce sugli ingressi x. Si evidenzia così una perfetta equivalenzafra blocco e funzione: un blocco rappresenta la percezione fisica e la versioneingegneristica del concetto matematico di funzione. La situazione è descrittadalla figura 22.2.

x yF- -

Figura 22.2: Schema di un blocco avente funzione di trasformazione F , ingressix ed uscite y.

Due blocchi aventi funzioni di trasformazione F1 e F2 si dicono equivalentise, con ingressi uguali, forniscono uguali uscite. Matematicamente significache

F1�x� � F2�x� per ogni ingresso x

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 352: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

342 CAPITOLO 22. ASTRARRE

Quando si vuole esplicitare i singoli ingressi x1, x2, . . . , xm e le singole uscitey1, y2, . . . , yn viene solitamente usata la seguente notazione testuale:

�y1, y2, ..., yn� � F�x1, x2, ..., xm�L’equivalente notazione grafica è descritta nella figura 22.3. In questo caso Fè una funzione vettoriale costituita da una sequenza di funzioni �f1, f2, . . . , fn�;in dettaglio, per ciascuna componente dell’uscita, si ha:

y1 � f1�x1, x2, . . . , xm�y2 � f2�x1, x2, . . . , xm�

yn � fn�x1, x2, . . . , xm�

F

xm

x2

x1

yn

y2

y1

Figura 22.3: Schema di un blocco avente funzione di trasformazione F , aventeingressi x1, x2, . . . , xm ed uscite y1, y2, . . . , yn.

Il legame funzionale fra gli ingressi e le uscite può essere descritto in varimodi:

• mediante una descrizione di tipo dichiarativoEsempio 177. Un blocco che determina il massimo comune divisore fradue numeri naturali può essere descritto come segue:

– ingressi: numeri naturali m, n– uscite: massimo numero naturale che è divide m ed n

• mediante un’espressioneEsempio 178. Un blocco che determina la potenza di un numero realeelevato ad un esponente intero può essere descritto come segue:

– ingressi: numero reale x, numero intero k– uscite: numero reale xk

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 353: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.3. CLASSIFICAZIONE DEI BLOCCHI 343

• mediante un insieme di vincoliEsempio 179. Un blocco che ordina due numeri può essere descritto comesegue:

– ingressi: numeri reali x1, x2

– uscite: numeri reali y1, y2 tali che �y1 B y2� , ��x1, x2� � �y1, y2��22.3 Classificazione dei blocchiI blocchi possono essere classificati in base alla loro funzione di trasformazione,ed in particolare in base al tipo del risultato che forniscono. Alcuni linguaggidi programmazione (Scratch, Snap!) adottano la seguente classificazione:

• reporter : blocco che, in funzione degli ingressi, produce un’uscita; ècaratterizzato da una generica funzione di trasformazione della forma:

c � A� B

Esempio 180. Per valutare la somma dei primi n numeri naturali si puòricorrere ad un blocco avente la seguente funzione di trasformazione:

somma � N � N

• predicato: è un caso particolare di blocco reporter che fornisce in usci-ta un valore di tipo booleano ed è caratterizzato da una funzione ditrasformazione della forma

p � A� B

dove A è un generico insieme e B è l’insieme dei valori logici.Esempio 181. Per decidere se un dato numero naturale a identifica unanno bisestile si può usare un blocco descritto dal seguente predicato:

bisestile � N � B

• comando: blocco che non fornisce alcun risultato in uscita; è caratteriz-zato da una funzione della forma:

c � A� g

L’attivazione di un comando si manifesta mediante la modificazione del-l’ambiente, ad esempio indirizzando il suo risultato su un dispositivo dioutput (visualizzazione di una scritta, disegno di una figura, produzionedi un suono) oppure depositando il risultato su un argomento.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 354: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

344 CAPITOLO 22. ASTRARRE

Esempio 182. Tipici esempi di comandi sono quelli che disegnano dellefigure su video; ad esempio:

esagono � N � g

A seguire è riportata la notazione grafica usata nei linguaggi di program-mazione di tipo visuale per denotare le diverse tipologie di blocchi.

comando reporter���� predicato��

@@@@��

Figura 22.4: Le varie tipologie dei blocchi.

22.4 Compositori e selettori

I meccanismi di aggregazione ed accesso ad una componente di una strutturasono casi particolare di blocchi, come descritto a seguire.

L’operatore di aggregazione di elementi che caratterizza le sequenze è de-scritto nella figura 22.5.

���xn

x2

x1

�x1, x2, . . . , xn�

Figura 22.5: Schema dell’operatore di composizione.

In modalità testuale l’operatore di composizione descritto nella figura 22.5si scrive �x1, x2, . . . , xn�

L’operatore di composizione completa la sua efficacia ed utilità in com-binazione con l’operatore di selezione, che consente di accedere ad un datoelemento di una sequenza, come descritto nella figura 22.6.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 355: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.5. IMPLEMENTAZIONE, DEFINIZIONE ED USO 345

����k

�x1, x2, . . . , xn� xk

Figura 22.6: Schema dell’operatore di selezione.

In modalità testuale l’operatore di selezione descritto nella figura 22.6 siscrive con la seguente notazione distribuita:

�x1, x2, . . . , xn��k�Equivalentemente, se a denota la sequenza �x1, x2, . . . , xn�, la scrittura

a�k�denota la k-esima componente della sequenza a, ossia xk.

22.5 Implementazione, definizione ed uso

La progettazione, la realizzazione e l’uso di un blocco sono passi sequenzialisvolti, in momenti temporalmente distinti, da soggetti logicamente distinti,chiamati rispettivamente analista, costruttore ed utente (del blocco). Que-ste fasi, tipiche di ogni processo di realizzazione di un prodotto industriale,possono essere riassunte come segue:

1. specifica: viene definito cosa fa il blocco: vengono individuati gli ingressi,le uscite ed il criterio che li lega. Questa fase costituisce il progetto,necessario per la successiva fase di realizzazione, e fornisce le informazioninecessarie all’utente per poter usare il blocco.

2. implementazione: viene realizzato il blocco, avvalendosi di componentielementari di base, già predisposti dall’ambiente in cui ci si pone, oppuredi altri blocchi definiti precedentemente. Questa fase consiste nellascrittura della porzione di codice che traduce l’algoritmo mediante ilquale vengono calcolate le uscite a partire dagli ingressi.

3. uso: una volta realizzato, un blocco può essere usato come qualsiasi altroblocco primitivo. In questa fase, specificando gli argomenti attuali, vienecalcolato il risultato.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 356: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

346 CAPITOLO 22. ASTRARRE

Osservazione. Generalmente l’attività di definizione di un blocco precedequella di utilizzo del blocco stesso. In pratica si richiede che avvenga primasoltanto la definizione della specifica del blocco e l’implementazione effettivapuò essere posticipata. Questo modo di procedere è tipico della metodologiatop-down. Poi, ovviamente, l’uso effettivo del blocco non potrà prescinderedalla sua precedente realizzazione.

22.6 Prototipi dei blocchiIl prototipo di un blocco rappresenta la specifica sintattica di come deve essererichiamato il blocco. Il prototipo è costituito dal nome identificativo delblocco, dal numero degli ingressi, dal loro tipo, dal numero delle uscite e dalloro tipo. Per questioni di leggibilità un blocco viene denotato mediante unidentificatore che suggerisce il significato del blocco stesso.Esempio 183. Il massimo comune divisore fra due numeri naturali m ed n puòessere determinato mediante un blocco caratterizzato dal seguente prototipo:

mcd � N2� N

Esempio 184. Il disegno di un poligono regolare di n lati di lunghezza l puòessere realizzato mediante un blocco caratterizzato dal seguente prototipo:

poligono � N �R � g

Esempio 185. Per decidere se una terna di numeri naturali costituisce unaterna pitagorica si può usare un blocco avente il seguente prototipo:

pitagorica � N3� B

Il prototipo di un blocco viene generalmente arricchito da informazioni chedocumentano il significato del blocco.Esempio 186. Il calcolo delle radici x1, x2 di un’equazione di secondo gradoax2 � bx � c � 0 può essere svolto mediante un blocco specificato come segue:

eq � R3� R2

�a, b, c� ( radici �x1, x2� dell’equazione ax2 � bx � c � 0

Esempio 187. Il processo di ordinamento di una sequenza di n elementi di uninsieme A può essere realizzato mediante un blocco specificato come segue:

ordina � An� An

sequenza �a1, . . . , an� ( sequenza �ap�i�, . . . , ap�n�� ordinatadove p è una permutazione di �1, . . . , n� tale che �i @ j�� �ap�i� B ap�j��.L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 357: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.6. PROTOTIPI DEI BLOCCHI 347

Il prototipo descrive tutte le informazioni necessarie ad usare correttamenteil blocco e fornisce sufficienti indicazioni per poter controllare se una chiamataad un blocco è corretta in un dato contesto.Esempio 188. Indicando con N l’insieme dei numeri naturali e con B è l’insiemedei valori logici, il seguente prototipo individua un blocco di nome f ed aventeper argomento una coppia di valori �x, y� > N � B; viene descritto con laseguente notazione 1 :

f�N,B�� B

Questo prototipo garantisce che la seguente espressione è corretta:

if�f�1,2 � 3�,4,5�Esempio 189. Il prototipo di un blocco è spesso deducibile dal contesto d’usodel blocco stesso; ad esempio, nel seguente contesto:

a� if�f�x�, a @ b, x � 1�il tipo ed il risultato delle entità che vi compaiono può essere dedotto dallaseguente catena di considerazioni:

1. a è una variabile in quanto compare alla sinistra di un’assegnazione

2. il tipo di a è il tipo del secondo e terzo argomento dell’operatore if

3. il tipo di a @ b e x � 1 è B

4. dai precedenti tre punti discende che a è una variabile di tipo B

5. essendo a @ b un’espressione compatibile, a e b sono dello stesso tipo

6. dai precedenti due punti discende che b è di tipo B

7. essendo che il primo argomento dell’operatore if deve essere una condi-zione, discende che f è un predicato

8. dalla compatibilità del confronto x � 1 discende che x è di tipo N

9. dai precedenti due punti discende che il prototipo di f è f�N�� B

In sintesi:

a, b > Bx > Nf�N�� B

1Notazioni alternative equivalenti sono: B f�N,B� oppure f � N � B� B.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 358: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

348 CAPITOLO 22. ASTRARRE

È possibile avere, in uno stesso contesto, blocchi con lo stesso nome iden-tificativo ma con diverso prototipo; per questioni di controlli di coerenza suitipi non sono ammessi blocchi il cui prototipo si differenzi solamente sul ti-po del risultato. Per questo motivo il tipo del risultato non è un elementocaratterizzante.Esempio 190. I seguenti prototipi sono tutti compatibili fra loro (in quantodistinguibili fra loro) in uno stesso contesto:

f�N,B�� N

f�B,N�� N

f�N,B,N�� N

g�N,B�� N

mentre il seguente prototipo è incompatibile con quelli riportati sopra:

f�N,B�� B

Al momento della chiamata, in fase di elaborazione, viene scelto il bloc-co avente un prototipo che coincida con il prototipo della chiamata. Poichéil prototipo contiene, oltre all’identificatore del blocco, anche le informazio-ni relative ai parametri, sono lecite e ammessi più blocchi aventi lo stessoidentificatore. Questa possibilità viene detta overloading.Esempio 191. Un esempio di overloading è descritto dai blocchi aventi le fun-zioni di trasformazione definite sotto. Questi diversi blocchi permettono dideterminare il minimo di due, tre e quattro valori.

min�x, y� def� if�x @ y, x, y�

min�x, y, z� def� min�x,min�y, z��

min�x, y, z, t� def� min�min�x, y�,min�z, t��

22.7 Chiamate ai blocchiIncontreremo spesso nel seguito i termini chiamante e chiamato riferiti ai bloc-chi. Il loro significato è evidente: il chiamante è il contesto dell’espressionenel quale viene usato il blocco, mentre il termine chiamato denota il bloccoche viene utilizzato. La situazione è descritta nella figura 22.7.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 359: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.8. ARGOMENTI FORMALI ED ATTUALI 349

chiamante

chiamantedel

ambiente

chiamato

chiamatodel

ambiente-

?�

ingressi

uscite

Figura 22.7: Meccanismo di comunicazione fra chiamante e chiamato.

L’uso (chiamata) di un blocco avviene, similmente ad una qualsiasi altraistruzione, precisando il nome del blocco e specificando gli ingressi del blocoo.Le seguenti istruzioni illustrano alcuni tipici casi d’uso dei blocchi:

F�x� � 7 operando in un’espressioney � F�x� assegnazioneG�F�x�� funzione composta

Osservazione. Ogni chiamata ad un blocco corrisponde ad un momen-to di astrazione: l’utente deve sapere unicamente cosa il blocco fornisce inuscita e non come avviene l’elaborazione. L’utente di un blocco deve porsiconcettualmente nella stessa posizione in cui si pone l’utente di un qualsiasiprogramma applicativo; l’unica differenza sta nel fatto che i dati ed i risultatidi un blocco vengono comunicati attraverso i dispositivi di ingresso ed uscita(ad esempio tastiera e video) ma attraverso i parametri del blocco ed il valoreviene ritornato come risultato.

22.8 Argomenti formali ed attualiL’uso di un blocco richiede che ci sia la possibilità di comunicazione, dal chia-mante al chiamato, per fornire al blocco i dati mediante i quali valutare ilrisultato. Il meccanismo di comunicazione viene realizzato mediante gli argo-menti (detti anche parametri o ingressi). Non è questo l’unico modo con cuiun blocco può comunicare con l’ambiente del chiamante, ma è certamente ilpiù caratteristico, il più chiaro ed il più indicato nella maggioranza dei casi.

Gli argomenti specificati nella fase di costruzione del blocco sono dettiargomenti formali mentre quelli che il chiamante precisa, al momento dellachiamata del blocco, sono detti argomenti attuali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 360: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

350 CAPITOLO 22. ASTRARRE

Le seguenti regole precisano le condizioni sulla compatibilità di tipo fra iargomenti attuali ed i corrispondenti argomenti formali2:

• il numero degli argomenti attuali deve essere uguale al numero degliargomenti formali

• il tipo di un argomento attuale deve essere uguale (o compatibile) aquello del corrispondente argomento formale

22.9 Direzionalità degli argomenti

Gli argomenti di un blocco servono per la comunicazione dei dati e dei risultatitra il chiamante ed il chiamato. Ponendosi virtualmente all’interno dell’am-biente del chiamato, il flusso delle informazioni rappresentato dagli argomentipuò essere in entrata, in uscita o in entrata-uscita. Corrispondentemente aquesti tre casi, gli argomenti di un blocco possono essere suddivisi in tre classidi direzionalità:

• argomenti di in: questi argomenti vengono utilizzati dal blocco chiama-to solo in lettura e non vengono modificati; coerentemente con questofatto, gli argomenti attuali corrispondenti a degli argomenti formali condirezionalità di in possono essere delle generiche espressioni.

• argomenti di out: questi argomenti vengono utilizzati per la comunica-zione dei risultati dal chiamato al chiamante; per questo, i corrispondentiargomenti attuali devono essere delle variabili (in generale degli l-valori)destinate a ricevere i risultati prodotti dal blocco chiamato.

• argomenti di inout: questo caso riunisce i due casi esaminati sopra, nelsenso che gli argomenti sono sia di ingresso che di uscita: vengono comu-nicati dal chiamante al chiamato, quest’ultimo li elabora modificandolie li riconsegna al chiamante; conseguentemente con il fatto che si trattadi argomenti di uscita, l’argomento attuale corrispondente ad un argo-mento formale con direzionalità di inout deve essere una variabile (ingenerale un l-valore).

2 Nei linguaggi di programmazione tipizzati e nei linguaggi che permettono di apportaremodifiche agli argomenti, vengono imposte ulteriori condizioni.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 361: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.10. PASSAGGIO DEI PARAMETRI 351

22.10 Passaggio dei parametri

Quello che a livello logico appare come un flusso di dati fra chiamante e chia-mato, viene in pratica realizzato mediante l’uso di variabili di comunicazionecostituite dagli argomenti. A seconda del linguaggio di programmazione uti-lizzato, esistono diverse possibilità e modalità di trasmissione degli argomentifra chiamante e chiamato. In quasi tutti i linguaggi di programmazione piùevoluti (C/C++, Java, Python, ...) sono fornite due tecniche per realizzare ilpassaggio degli argomenti nelle funzioni).

• passaggio per valore: all’interno dell’ambiente del chiamato viene creatauna variabile copia dell’argomento attuale del chiamante. Tale variabileviene inizializzata, al momento della chiamata, con il valore ottenutodalla valutazione dell’espressione che costituisce l’argomento attuale delchiamante. Le azioni che il chiamato esegue sull’argomento formale ven-gono svolte su questa variabile copia. Al termine dell’esecuzione delleazioni del chiamato, la variabile copia viene disallocata (eliminata). Nelcaso di passaggio per valore, l’argomento attuale del chiamante può es-sere una generica espressione (compatibile con il tipo del corrispondenteargomento formale).

• passaggio per referenza o indirizzo o variabile: il chiamato opera diretta-mente sull’argomento attuale del chiamante corrispondente all’argomen-to formale. L’accesso da parte del chiamato all’argomento attuale delchiamante avviene per mezzo dell’identificatore del corrispondente argo-mento formale. Le eventuali modifiche svolte dal chiamato sull’argomen-to formale influenzano direttamente l’argomento attuale del chiamante.Nel caso di passaggio per referenza, l’argomento attuale del chiamantedeve essere una variabile o, più in generale, un l-valore (compatibile conil tipo del corrispondente argomento formale).

22.11 Fase di elaborazione di un blocco

La fase di elaborazione di un blocco può avvenire con due modalità:

• macroespansione e valutazione

• passaggio dei parametri e ritorno del risultato

Il primo meccanismo consiste nella sostituzione degli argomenti attuali alposto degli argomenti formali nell’espressione che definisce il blocco; svolta

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 362: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

352 CAPITOLO 22. ASTRARRE

questa fase avviene la fase di valutazione. In questo caso il blocco vie-ne detto anche macrodefinizione ed il processo di sostituzione viene dettomacroespansione.Esempio 192. Nel contesto

min�x, y� def� if�x @ y, x, y�

a� 2b� 3c�min�a � 2, b�

la fase di valutazione si attua secondo i seguenti passi:

min�a � 2, b�� if��a � 2� @ b, a � 2, b�� if�4 @ 3,4,3�� 3

Nei casi in cui la definizione del blocco usi un suo ambiente locale (per me-morizzare dei risultati intermedi) o nei casi in cui il blocco richiami se stesso, lavalutazione non può avvenire mediante una macroespansione ma viene attivatoun ambiente locale dove avviene la valutazione: l’elaborazione del chiamanteviene momentaneamente sospesa ed inizia l’elaborazione del chiamato; quan-do termina l’esecuzione del blocco chiamato, comunicando in qualche modo irisultati della sua elaborazione, avviene il ritorno al chiamante dove l’elabora-zione riprende dal punto immediatamente successivo a quello della chiamata(figura 22.8). Questo meccanismo di chiamata è sostanzialmente lo stesso intutti i linguaggi di programmazione di qualsiasi livello.

chiamante

109321

chiamata di f

chiamato

87654

fine blocco

blocco f���

������:

?XXXXXX

XXXy

Figura 22.8: Flusso dell’elaborazione in una chiamata ad un blocco. I numeririportati a lato descrivono l’ordine della sequenza di esecuzione delle singoleistruzioni. Al termine dell’esecuzione del blocco, viene eseguita l’istruzionedel chiamante immediatamente successiva al punto della chiamata.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 363: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

22.12. ESERCIZI 353

22.12 Esercizi1. Stabilire gli ingressi di un blocco che calcola la sommatoria

n

Qi�m

xi

2. Classificare e descrivere i prototipi dei blocchi che risolvono le seguenticlassi di problemi:

(a) Determinare il massimo fra due dati numeri naturali.(b) Disegnare un poligono regolare di n lati di lunghezza l.(c) Decidere se un numero naturale è primo.(d) Decidere se tre punti del piano sono allineati.(e) Determinare il punto medio di un segmento.(f) Determinare la circonferenza passante per tre dati punti.(g) Determinare l’eventuale soluzione naturale di un’equazione di primo

grado.(h) Risolvere un’equazione di secondo grado.(i) Decidere se un dato valore numerico è radice di una data equazione

di secondo grado.

3. Descrivere i prototipi corrispondenti ai seguenti blocchi che operano sullestringhe:

(a) lunghezza di una stringa(b) concatenazione fra due stringhe(c) sottostringa di una stringa(d) carattere di data posizione in una stringa(e) stringa ottenuta cambiando in una stringa un carattere di data

posizione con un altro dato carattere

4. Classificare (variabili, reporter, predicati, comandi) le entità rappresen-tate dagli identificatori che compaiono nelle seguenti porzioni di codice.Nel caso sia possibile, dedurre il tipo delle variabili ed il tipo del risultatodei blocchi.

(a) linea�x1, y1, x2, y2�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 364: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

354 CAPITOLO 22. ASTRARRE

(b) m�massimo�a, f�g�x���(c) y � potenza�x,mcd�m,n��(d) c� if�minore�a, b�, a, b�(e) x�y�z��(f) if x�y� then p� x�p� endif(g) if x�a @ y�t�� then z�a and �t � 2�� endif(h) if r�s � �s � z�� then x�y�z�� endif(i) if x�y� then p� x�p � y� endif(j) while x�a�b�� do y�r�s�� endwhile(k) while a�i� � b�a�i� � j� do c�k� endwhile(l) while x�a� � �a � b� do y�a � z�b�� endwhile

(m) while if�p�q�a��, r�b�, s�c�� do w � x�y�z�� t�a� endwhile(n) while a�b�i�� do if r�i, j� @ �i @ b�j�� then s�i � 1� endif endwhile(o) while x�p � q� do y�r � 1�� endwhile

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 365: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 23

Comporre

Ci fu un tempo, prima che i nostri traguar-di diventassero più ambiziosi, in cui trova-vamo strano e meraviglioso riuscire a fareuna torre o una casa coi blocchetti delle co-struzioni. Eppure, benché tutti gli adultisappiano fare queste cose, nessuno ancoraha capito come s’impari a farle!M. Minsky, La società della mente

Come una macchina meccanica è composta da dadi, bulloni, staffe, ingra-naggi ed altri componenti elementari, così le “macchine informatiche” sonocomposte da elementi di base che eseguono delle operazioni elementari suidati.

I blocchi possono essere composti fra loro per realizzare un sistema aven-te una specifica funzionalità. Un sistema, a sua volta, è caratterizzato dadegli ingressi e delle uscite legate agli ingressi secondo una ben specifica re-lazione funzionale. In pratica un sistema si comporta a sua volta come unblocco costituito da blocchi che costituiscono l’implementazione del sistemacomplessivo.

355

Page 366: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

356 CAPITOLO 23. COMPORRE

23.1 Notazioni

La composizione dei blocchi che costituiscono un sistema può essere descrit-ta con diverse notazioni. Queste diverse modalità sono specifiche dei varilinguaggi di programmazione ed ambienti di sviluppo visuale.

• notazione a fili (wired blocks): ingressi ed uscite sono rappresentati me-diante dei fili unidirezionali che trasportano i dati che entrano nei blocchi(ingressi) e che escono dai blocchi (uscite). Questa notazione è utilizzatain alcuni ambienti di progettazione visuale, quali LabVIEW e l’ambientedi sviluppo del robot EV3.

F1

F2 F3

F4 F5

x5

x4

x3

x2

x1

Figura 23.1: Composizione di blocchi con notazione a fili.

• notazione ad annidamento (nested blocks): negli ambienti di program-mazione visuale (quali Scratch, Snap! ed altri) gli ingressi di un bloccovengono rappresentati mediante dei riquadri interni al blocco; la formadei riquadri indica il tipo degli ingressi e la forma del blocco denota iltipo dell’uscita del blocco.

'

&

$

%

'

&

$

%x1

����

JJJ

JJJ

����x2 x3 x4 x5

Figura 23.2: Composizione di blocchi con notazione ad annidamento.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 367: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.2. COMPOSIZIONE DI BLOCCHI 357

• notazione funzionale: un sistema di blocchi viene denotato, basandosisul meccanismo della composizione di funzioni, mediante un’espressionefunzionale avente per argomenti ingressi oppure altre espressioni funzio-nali; ad esempio, i sistemi descritti precedentemente vengono denotatimediante la seguente espressione:

F5�F4�F1�x1�,F3�F2�x2, x3�, x4, x5��Nei casi in cui ci siano degli sdoppiamenti oppure per spezzare la descri-zione dell’algoritmo per renderlo più leggibile, vengono utilizzate delleassegnazioni (�) per memorizzare nelle variabili i risultati intermedi.

23.2 Composizione di blocchiI blocchi possono essere composti fra loro per costituire blocchi più complessi,più potenti e versatili. Uno dei metodi più semplici per costruire dei blocchiconsiste nel comporre due o più blocchi in modo tale che le uscite di unovengano usate come ingressi per un altro. Gli esempi che seguono illustranoalcuni possibili schemi di composizione di blocchi.Esempio 193. Lo schema riportato nella figura 23.3 descrive la modalità dicomposizione sequenziale.

F1 F2- - -x y

Figura 23.3: Composizione sequenziale di due blocchi aventi funzioni ditrasformazione F1 e F2.

In questo caso, coerentemente con la notazione matematica relativa allacomposizione di funzioni, l’uscita è definita dalla scrittura

y � F2�F1�x��Equivalentemente, memorizzando in una variabile t il risultato del primoblocco, si può scrivere

� xt� F1�x�y � F2�t�� y

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 368: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

358 CAPITOLO 23. COMPORRE

Esempio 194. Oltre alla composizione sequenziale descritta nell’esempio prece-dente, i blocchi possono essere combinati in modi più articolati come descrittonella figura 23.4. In questo caso l’uscita del primo blocco viene sdoppiata peralimentare i due blocchi che seguono.

F1

F2

F3

stx

y1

y2

Figura 23.4: Composizione di blocchi con sdoppiamento di un’uscita.

Il sistema di blocchi riportato nella figura 23.4 può essere sequenzializ-zato in modo testuale come segue, usando la variabile t per realizzare losdoppiamento dell’uscita del primo blocco.

� xt� F1�x�y1 � F2�t�y2 � F3�t�� �y1, y2�

Esempio 195. Un altro fondamentale schema di composizione di blocchi èdescritto nella figura 23.5.

F1

F2

F3

x2

x1

y

Figura 23.5: Composizione di blocchi con connessione di uscite.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 369: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.2. COMPOSIZIONE DI BLOCCHI 359

Il sistema di blocchi riportato nella figura 23.5 può essere sequenzializzatoin modo testuale come segue:

� �x1, x2�t1 � F1�x1�t2 � F2�x2�y � F3�t1, t2�� y

Esempio 196. Il seguente sistema di blocchi utilizza tutte le precedenti formedi composizione.

F1

F2

F3

F4

F5

F6s

sx1x2

x3

y1

y2

Questo sistema di blocchi può essere sequenzializzato come segue:

� �x1, x2, x3�t1 � F1�x1, x2�t2 � F2�x3�t3 � F3�t1, t2�t4 � F4�t2�y1 � F5�t3�y2 � F6�t3, t4�� �y1, y2�

Osservazione. Dalle scritture sequenziali riportate negli esempi precedentisi evidenzia una perfetta corrispondenza fra sistema di blocchi e sequenza diespressioni.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 370: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

360 CAPITOLO 23. COMPORRE

23.3 Costruzione dei blocchiUn blocco viene costruito connettendo fra loro i blocchi elementari che rea-lizzano le operazioni di base (�, �, �, ~, . . . ); Nella costruzione dei blocchi,in molte situazioni insorge l’esigenza di duplicare un ingresso; in questi casiviene utilizzato un particolare operatore duplicatore che duplica l’ingresso:come descritto nella figura 23.6.

dupxx

x

Figura 23.6: Specifica del blocco che duplica l’ingresso x.

Solitamente, l’operatore dup viene sottinteso e viene sostituito da unasemplice biforcazione, evidenziata con un pallino, del ramo di ingresso, comedescritto nella figura 23.7.

x x

x

sFigura 23.7: Schema del blocco che duplica l’ingresso x.

Il seguente esempio illustra le tre fasi della realizzazione di un blocco.Esempio 197. Supponiamo di avere a disposizione gli operatori aritmetici dibase e l’operatore condizionale if ; supponiamo inoltre che sugli ingressi di unblocco sia definita una relazione d’ordine B. Vogliamo costruire l’operatoremin che determina il minimo fra due ingressi x1 e x2 secondo la specificafunzionale descritta nella figura 23.8.

minx2

x1 minimofra x1 ed x2

Figura 23.8: Specifica del blocco che determina il minimo fra x1 e x2.

L’operatore min può essere realizzato come descritto nella figura 23.9.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 371: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.3. COSTRUZIONE DEI BLOCCHI 361

@ if

min

x2

x1 minimofra x1 ed x2

ss

Figura 23.9: Struttura del blocco che determina il minimo fra i due ingressix1 e x2.

In modalità testuale il blocco min può essere definito dalla scrittura

min�x1, x2�0 if�x1 @ x2, x1, x2�L’operatore min può essere usato in vari contesti: per risolvere una specificaistanza di problema, ad esempio per determinare il minimo fra due elementi ae b e depositare il risultato nella variabile r, scrivendo, in modalità testuale:

r �min�a, b�oppure per costruire altri blocchi, ad esempio per determinare il minimo fratre elementi, come illustrato dal diagramma riportato nella figura 23.10. Inmodalità testuale questo blocco viene definito dalla scrittura

min�x1, x2, x3�0 min�min�x1, x2�, x3�

min min

x3

x2

x1 minimo frax1, x2, x3

Figura 23.10: Struttura del blocco min per determinare il minimo fra treelementi x1, x2 ed x3.

La costituzione interna di un blocco può essere descritta mediante un al-goritmo sequenziale, dove possono essere usate delle variabili locali interne alblocco per memorizzare dei risultati parziali oppure per realizzare i blocchiduplicatori (sequenzializzazione dei blocchi).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 372: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

362 CAPITOLO 23. COMPORRE

Esempio 198. La struttura interna del blocco descritto nella figura 23.9 puòessere descritta mediante la seguente porzione di algoritmo:

� �x1, x2�t� x1 @ x2y � if�t, x1, x2�� y

23.4 Metodologie di costruzione dei blocchi

I blocchi costituiscono un importante strumento per concretizzare le metodo-logie top-down e bottom-up nella soluzione dei problemi.

Per costruire un blocco (ma, in generale, per risolvere un problema) si pos-sono adottare due strategie: comporre gli operatori che già si hanno a disposi-zione (operatori di base o operatori precedentemente costruiti) oppure usare,pensandoli già disponibili, dei blocchi che verranno costruiti in un secondomomento. La prima strategia corrisponde alla metodologia bottom-up mentrela seconda alla metodologia top-down. Spesso queste due strategie dimostranola loro massima efficacia se vengono utilizzate in modo combinato.

Esempio 199. La rete combinatoria riportata nella figura 23.11 valuta il valoredi un binomio della forma ax � b.

� �

bin

b

xa

ax � b

Figura 23.11: Blocco per il calcolo del binomio ax � b.

Il blocco bin può essere usato per costruire un blocco tri per valutareil valore del trinomio ax2 � bx � c, componendo due istanze del blocco bin,basandosi sull’identità

ax2 � bx � c � �ax � b�x � c � bin�bin�a, x, b�, x, c�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 373: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.5. COMPLESSITÀ DEI BLOCCHI 363

bin bin

tri

cb

xa

ax2 � bx � cs

Figura 23.12: Rete combinatoria per il calcolo del trinomio ax2 � bx � c.

23.5 Complessità dei blocchi

Nel caso di blocchi equivalenti risulta importante analizzare e decidere qualesia il “migliore”, dove con tale termine si intende che usa la minor quantitàdi risorse. Nel caso dei blocchi combinatori, come quelli precedentementeesaminati, la complessità di un blocco viene definita come il numero dei suoicomponenti elementari.

Per tempo di esecuzione di un blocco si intende il numero di unità ditempo impiegate per l’elaborazione del blocco. Un’approssimazione plausibi-le, benché semplificativa, consiste nel ritenere che il tempo dell’operatore diduplicazione sia trascurabile mentre tutti gli altri operatori impieghino unastessa quantità di tempo unitaria. Bisogna comunque distinguere i seguentidue casi:

• esecuzione sequenziale: in ogni istante è operativo un solo componente

• esecuzione parallela: i componenti, i cui ingressi ed uscite non sonointerdipendenti, operano contemporaneamente

Questa distinzione è descritta nell’esempio che segue.

Esempio 200. I seguenti due blocchi sono equivalenti (entrambi determinanola somma dei quattro numeri in ingresso). La dimostrazione di equivalenzasi può fondare sulla proprietà associativa dell’operazione di addizione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 374: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

364 CAPITOLO 23. COMPORRE

add4

�x4

x3

x2

x1

x1 � x2 � x3 � x4

add4

x4

x3

x2

x1 x1 � x2 � x3 � x4

Questi due blocchi hanno la stessa complessità strutturale ma il secondo èpiù efficiente del primo in caso di esecuzione parallela, in quanto impiegadue unità di tempo (al posto delle tre unità di tempo impiegate dal primo).Essi corrispondono a due diverse parentizzazioni descritte dalle seguenti dueespressioni: ��x1 � x2� � x3� � x4�x1 � x2� � �x3 � x4�23.6 Blocchi con controlliUn sistema di blocchi ha delle potenzialità molto limitate; ad esempio, dati iningresso due numeri x ed n non si riesce a costruire un sistema di blocchi ingrado di calcolare il valore della potenza xn, usando i quattro operatori arit-metici di base �,�,�, ~. Questa limitazione è dovuta al fatto che un sistema diblocchi è equivalente alla valutazione di un’espressione che, in sostanza, cor-risponde all’applicazione di una formula. D’altra parte moltissimi problemi,anche limitandosi ai problemi numerici (ad esempio il calcolo del massimo co-mune divisore fra due generici numeri naturali), non sono risolvibili medianteuna formula, ma richiedono procedimenti più articolati.

Nei casi in cui la soluzione di un problema richieda delle elaborazioni con-dizionali e cicliche, nella costruzione di un blocco si fa ricorso ai controlli dellaprogrammazione strutturata.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 375: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.6. BLOCCHI CON CONTROLLI 365

Esempio 201. Il calcolo del massimo comune divisore fra due numeri naturalim ed n è realizzabile mediante un blocco avente la seguente interfaccia:

mcdnm massimo comune divisore

fra m ed n

L’implementazione di questo blocco può essere basata sull’algoritmo di Eucli-de.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 376: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

366 CAPITOLO 23. COMPORRE

23.7 Esercizi1. Dimostrare che il seguente blocco produce sempre il valore di verità vero.

C

@

if

ss sx2

x1

y

2. Stabilire cosa produce il seguente blocco, essendo x1 ed x2 ingressinumerici:

�sssx2

x1

y2

y1

Dare una dimostrazione di quanto stabilito.

3. Esprimere in notazione funzionale i sistemi di blocchi descritti nelle figureche seguono.

F1 F2 F3r rx y

F1 F2x2x1 yr

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 377: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.7. ESERCIZI 367

4. Descrivere mediante una sequenza di passi elementari i sistemi di blocchidescritti nelle figure che seguono.

F1

F2

F3x yr r

F1

F2

F3x1

x2

y

rr

5. Descrivere mediante una sequenza di passi elementari i sistemi di blocchidescritti nelle figure che seguono.

F1

F2

F3

F4

rrx1

x2

y

F1

F2

F3

F4

F5

rrx1

x2

y

Indicando con ti il tempo di esecuzione del blocco avente funzione ditrasformazione Fi, determinare il tempo di esecuzione sequenziale e del-l’esecuzione parallela (nell’espressione del tempo è possibile usare glioperatori min e max).

6. Usando gli operatori binari � , � e max, costruire un blocco per deter-minare il minimo fra due numeri.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 378: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

368 CAPITOLO 23. COMPORRE

7. Usando gli operatori aritmetici, l’operatore if e gli operatorimin emax,costruire un blocco per determinare la somma dei due valori più piccolifra tre valori.

8. Costruire un blocco per decidere se tre dati valori possono costituire lemisure dei lati di un triangolo.

9. Usando i soli operatori di confronto binari � e x, costruire un bloccoequivalente alla porta logica not.

10. Usando gli operatori di confronto �, x, @, A, B, C e l’operatore if , costrui-re un blocco per determinare il massimo fra 2 valori. Utilizzando taleblocco come componente elementare, costruire un blocco per determinareil massimo fra 3 elementi ed il massimo fra 4 elementi.

11. Realizzare dei blocchi che svolgono le seguenti funzioni:

(a) valutazione di un binomio della forma ax � b(b) valutazione di un trinomio della forma ax2 � bx � c

(c) decidere se x è soluzione dell’equazione ax2 � bx � c � 0

12. Componendo il blocco bin, costruire un blocco quad per valutare il qua-drinomio ax3 � bx2 � cx � d. Generalizzare al caso di un polinomio digrado n prefissato.

13. Usando l’operatore tri che valuta un trinomio della forma ax2 � bx � ccostruire un blocco per decidere se un punto del piano cartesiano dicoordinate �x, y� appartiene alla parabola di equazione y � ax2 � bx � c.

14. Costruire un blocco con ingresso x ed uscita x5.

15. Costruire un blocco ad un unico ingresso x e con le uscite x, x2, x3, x4,x5, .

16. Usando gli operatori aritmetici binari �, �, �, ~ che operano sui numerinaturali, costruire un blocco che calcoli il quoziente ed il resto della divi-sione intera fra due dati numeri naturalim ed n. Descrivere un algoritmosequenziale equivalente alla rete combinatoria che si è descritta.

17. Utilizzando la grafica della tartaruga costruire un blocco poligono�n, l�che disegna un poligono regolare di n lati di lunghezza l. Usando ilblocco poligono disegnare una casa costituita da una facciata quadratae da un tetto a forma di triangolo equilatero.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 379: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

23.7. ESERCIZI 369

18. Utilizzando la grafica della tartaruga costruire un blocco casa�b, h, a�che disegni una casa di data base b ed altezza h, avente il tetto con duefalde che formano fra loro un angolo a. Usando il blocco casa, costruireun blocco schiera che disegni una serie di case a schiera. Costruireun blocco campanile ed un blocco chiesaConCampanile. Discutere comesono intervenute le metodologie top-down e bottom-up nello sviluppodella soluzione di questo esercizio.

���

QQQ

�� @@ �� @@ �� @@ ���

@@@

����

BBBB

Usando il blocco casa�b, h, a� che disegna una casa come descritto sopra,scrivere un blocco casa�b, h, a, f� che disegna una casa con fattore discala f. Costruire un blocco viale che disegni un viale di case a schieracon effetto prospettico.

19. Costruire un blocco lunghezza�n� che valuti il numero di cifre di cui ècomposto un numero naturale n, considerato in base 10. Costruire unblocco cifra�n, k� che valuti il valore della k-esima cifra di un numeronaturale n (nell’ipotesi che sia k B lunghezza�n�). Usando i blocchisopra definiti, scrivere un blocco-predicato palindromo�n� per deciderese il numero naturale n è palindromo.

20. Risolvere ciascuno dei problemi sotto riportati mediante un adeguatoblocco. I numeri devono essere intesi in notazione decimale. Determi-nare il rovescio di un numero (ad esempio, il rovescio di 4527 è 7254).Decidere se un numero è palindromo, ossia se si legge indifferentementeda sinistra a destra e da destra a sinistra (esempi di numeri palindromi:7, 44, 121, 3663, 25352). Decidere se un numero naturale è un quadrato(esempi di quadrati: 0, 1, 4, 9, 16, 25). Decidere se un numero è unquadrato palindromo (esempi di quadrati palindromi: 0, 1, 4, 9, 121).Descrivere il grafo delle chiamate reciproche dei vari blocchi utilizzati.Discutere il caso dei numeri che terminano con degli zeri (in questi casinon è chiaro cosa deve valutare la funzione che rovescia un numero ...).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 380: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

370 CAPITOLO 23. COMPORRE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 381: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 24

Ripetere

Di tutte le idee alle quali ho iniziato i bam-bini, quella della iterazione spicca in quan-to è un’idea che provoca una reazione di en-tusiasmo. Io penso che ciò accada in parteperchè l’idea di una cosa che va avanti persempre colpisce la fantasia di ogni bambi-no e in parte perchè l’iterazione stessa haradici nella cultura popolare.S. Papert, Mindstorm

Il pattern ripetere fa leva su un assunto, generalmente accettato, che ri-guarda il rapporto fra uomini e macchine; suona come segue: gli uomini sonointelligenti e creativi, ma sono lenti, si annoiano e incorrono in errori nellasvolgimento di compiti ripetitivi; al contrario, le macchine sono stupide maveloci, precise ed instancabili nell’eseguire delle azioni ripetitive.

La ripetizione di azioni, movimenti, oggetti, figure, . . . , è un procedimentotrasversale a disparati contesti e situazioni; moltissimi sono gli esempi nellavita quotidiana, nella scienza e nell’arte. La potenza del meccanismo dellaripetizione può essere sintetizzata mediante la seguente osservazione: eseguen-do molte volte una piccola cosa si può ottenere una cosa grande, significativa,importante. A sostegno di questa ovvia considerazione c’è il detto popolareche “la goccia scava la roccia”; il fatto che un filmato sia composto da moltediapositive che si differenziano di poco; il fatto che continuando a sommare 1ad una quantità, anche piccola, si ottiene un numero grande quanto si vuole;ed una moltitudine di simili esempi.

371

Page 382: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

372 CAPITOLO 24. RIPETERE

24.1 L’operatore di ripetizioneIndicando con α una generica entità (espressione o comando), la scrittura

k � �α�denota, la sequenza �α,α, . . . , α� costituita da k entità α. Qui α può essereun valore, un oggetto, un’espressione, un’istruzione oppure una sequenza diqueste componenti oppure una qualsiasi altra cosa.

Quando l’operatore di ripetizione compare in un algoritmo viene solita-mente espresso mediante un’equivalente espressione in un formato e più estesoe rilassato.

Algoritmo 105 - ripetizione1: repeat k times2: α3: end repeat

Un’espressione in cui compare l’operatore di ripetizione, quando viene ela-borata genera una sequenza di elementi oppure un effetto (grafico, sonoro, . . . ).Gli esempi che seguono descrivono alcune elementari situazioni di questa formedi elaborazione.Esempio 202. L’elaborazione dell’espressione

2 � �3 � �4 � 5� �genera la sequenza � �20,20,20�, �20,20,20� �Esempio 203. L’elaborazione dell’espressione

7 � �forward�10��genera una linea di 70 unità.Esempio 204. L’elaborazione dell’espressione

5 � �x� x � 1�ha l’effetto di incrementare di 5 il valore della variabile x.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 383: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24.2. RIPETIZIONE E AGGREGAZIONE 373

24.2 Ripetizione e aggregazioneSpesso il meccanismo di ripetizione viene associato al meccanismo di aggrega-zione. L’operazione di ripetizione di un fattore per una sequenza costituisce unmeccanismo molto potente per scrivere dei programmi con istruzioni ripetitivecome illustrato dal seguente esempio.Esempio 205. Un’espressione per generare un quadrato di lato 100 può essereespressa in forma compatta come segue:

4 � �forward�100�, left�90��In forma estesa questa espressione si esprime con il seguente algoritmo:

Algoritmo 106 - quadrato di lato 1001: repeat 4 times2: forward�100�3: left�90�4: end repeat

I meccanismi di aggregazione e ripetizione sono ricorsivi (è possibile ag-gregare degli aggregati ed è possibile ripetere delle ripetizioni) ed ortogonali (èpossibile aggregare delle ripetizioni e ripetere degli aggregati). Un esempio diqueste possibilità è fornito dal seguente esempio.Esempio 206. La seguente espressione genera una sequenza di 36 quadrati dilato 100 con un vertice in comune e ruotati ciascuno rispetto al precedente diun angolo di 10 gradi.

36 � �4 � �forward�100�, left�90��, left�10��

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 384: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

374 CAPITOLO 24. RIPETERE

24.3 Figure periodiche

L’operazione di ripetizione risulta particolarmente utile quando si vuole gene-rare delle figure periodiche. Ad esempio, nella figura che segue si può notareil periodo evidenziato con un segno più spesso:

In generale, la tipica struttura di un algoritmo per generare una figuraperiodica è la seguente e può essere espressa mediante un’espressione dellaforma n��...�. Qualora si desideri un forma più discorsiva si usa un algoritmocome segue:

Algoritmo 107 - Disegno di una figura periodica1: for n times do2: disegna un elemento della figura3: esegui un’azione di raccordo4: end for

Esempio 207. Scriviamo un’espressione per generare un poligono regolare di nlati di lunghezza l. È evidente che dopo aver disegnato un lato, la tartarugadeve ruotare (a sinistra o a destra) di un angolo α che è il supplementaredell’angolo interno del poligono, ossia

α � 180 � ���n � 2� � 180�~n� � 360~nTale valore può essere determinato direttamente in base alla seguente osserva-zione: dopo aver disegnato un poligono, la tartaruga si troverà alla posizionedi partenza, con lo stesso angolo di orientamento iniziale, avendo ruotato com-plessivamente per un angolo giro. Tale rotazione di un angolo giro è stataottenuta in n rotazioni parziali ognuna delle quali ha, pertanto, un’ampiezzapari a α � 360~n. In definitiva, l’espressione per generare un poligono regolaredi n lati di lunghezza l è la seguente:

n � �forward�l�, left�360~n��L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 385: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24.3. FIGURE PERIODICHE 375

Esempio 208. Le istruzioni che seguono generano una spirale formata da nsegmenti, avente il lato iniziale di lunghezza l, incremento d ed angolo dirotazione a.

x� ln � �forward�x�, left�90�, x� x � d�

Esempio 209. Vogliamo disegnare, mediante la grafica della tartaruga, laseguente figura:

È evidente che c’è qualche schema ripetitivo, ma non è evidente quale. Sup-poniamo di considerare come atomi della figura i seguenti, con il significatoriportato in corrispondenza a ciascuno di essi, similmente a quanto avvienenegli L-sistemi:

F : avanza di un passo unitario+ : ruota a destra di 90 gradi- : ruota a sinistra di 90 gradi

Con questi atomi la figura può essere espressa come segue:

F-F-F+F+FFF+F+F-F-FFF-F-F+F+FFF+F+F-F-FFF-F-F+F+FFF+F+F-F-FF . . .

Ragionando ad un così basso livello di granularità risulta non immediato in-dividuare il periodo della figura. Ad un più grosso livello di granularità, alivello grafico si possono individuare i seguenti elementi costituenti la figura:

X=F-F-

-

Y=F+F+

-

Z=FF

La figura si può allora descrivere con

XYZYXZXYZYXZXYZYXZ . . .

in cui si evidenzia abbastanza facilmente il periodo XYZYXZ, e quindi la figurapuò essere disegnata con

n � �X,Y,Z,Y,X,Z�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 386: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

376 CAPITOLO 24. RIPETERE

24.4 Calcoli iterativi

Il meccanismo di ripetizione di calcoli aritmetici sta a fondamento di moltialgoritmi numerici; a seguire sono riportati alcuni esempi.

Esempio 210. Calcolo di xn usando solo moltiplicazioni. Il risultato vienememorizzato nella variabile p.

p� 1n � �p� p � x�

Esempio 211. Calcolo di xn usando solo addizioni. Il risultato viene memo-rizzato nella variabile p.

p� 1n � �t� 0, x � �t� t � p�, p� t�

È interessante notare che il sottoproblema p� p � x, che si presenta nella for-ma finale nell’esempio precedente, in questo secondo esempio viene esplicitatomediante la sequenza di istruzioni �t� 0, n � �t� t � p�, p� t�.24.5 Scomposizioni e ripetizioni

Scomporre e ripetere sono due meccanismi ortogonali che esplicano il massimodell’efficacia se utilizzati in combinazione. Il concetto può essere sintetizzatocome segue: si scompone un oggetto in componenti elementari uguali al finedi poter attivare un meccanismo di ripetizione.

Il punto cruciale risiede nell’individuare l’elemento base da ripetere, comedescritto negli esempi che seguono.

Esempio 212. Consideriamo la figura che segue:

A seguire sono riportate due diverse scomposizioni:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 387: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24.5. SCOMPOSIZIONI E RIPETIZIONI 377

Dall’analisi di queste due diverse scomposizioni emerge che la figura risultapiù facilmente costruibile se viene scomposta in una sequenza di 6 esagoniaventi un vertice in comune e ruotati l’uno rispetto all’altro.

A seguire è riportata un’espressione che genera questa figura, dove k rap-presenta la misura del lato dell’esagono che ruota:

6 � �6 � �forward�k�, left�60��, left�60��Esempio 213. Consideriamo la seguente figura:

�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@

Questa figura può essere scomposta in più modi, come descritto nella figurache segue.

�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@

�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@�� �� �� �� �� �� �� �� �� ��

@@ @@ @@ @@ @@ @@ @@ @@ @@ @@

Esempio 214. Vogliamo disegnare le seguenti tre figure:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 388: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

378 CAPITOLO 24. RIPETERE

Si possono attivare diverse strategie:

1. disegnare le figure considerandole individualmente

2. disegnare una figura ed utilizzarla (come sottofigura) per disegnare l’al-tra

3. individuare uno schema generale che comprende le tre figure

Queste diverse strategie possono portare a soluzioni sostanzialmente diver-se; a seguire è riportata la soluzione basata sulla prima di queste strategie (kdenota la lunghezza dei segmenti che costituiscono le figure).

f1�k�( 6 � �6 � �forward�k�, left�60��, left�60��f2�k�( 8 � �6 � �forward�k�, left�45��, left�45��f3�k�( 8 � �8 � �forward�k�, left�45��, left�45��

L’analisi formale delle espressioni che disegnano le figure evidenzia che questediverse soluzioni sono derivabili dallo schema comune descritto dalla seguentefunzione:

f�m,n, k, a�(m � �n � �forward�k�, left�a��, left�a��

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 389: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24.6. ESERCIZI 379

24.6 Esercizi

1. Determinare la sommatoria 1 � 2 � 3 �� � n.

2. Determinare il prodotto m � n usando solo addizioni.

3. Determinare il fattoriale n! � 1 � 2 �� � n.

4. Determinare l’n-esimo numero di Fibonacci.

5. Determinare il numero naturale formato da n cifre 1.

6. Sia T è un generico operatore unario della grafica della tartaruga (for-ward, back, left, right), e una generica espressione numerica e k è unmoltiplicatore naturale. Dimostrare che

k � �T �e�� � T �k � e�7. Stabilire il risultato della seguente espressione:

4 � �forward�x�, left�90�, forward�y��8. Generare una stella intrecciata a 5 punte. Il vero problema consiste nel

determinare gli angoli di rotazione della tartaruga.

9. Nell’espressione che segue, determinare il valore di a in modo che ven-ga generata una stella incrociata a cinque punte, essendo k un numeronaturale che rappresenta la lunghezza del lato della stella.

5 � �forward�k�, right�a�, forward�k�, right�2 � a��Determinare, in funzione di k, la misura del perimetro e la misuradell’area racchiusa dalla stella.

10. Senza provare al calcolatore, determinare il risultato generato dalla se-guente espressione:

8 � �2 � �3 � �forward�100�, left�45��, left�45��, left�45��11. Generare i seguenti disegni ornati. Suggerimento: individuare, per

ciascuno di essi, il periodo che si ripete ciclicamente.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 390: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

380 CAPITOLO 24. RIPETERE

����

����

����

����

����

����

����

����

@@

@@

@@@@

@@

@@

@@

@@

@@@@

@@

@@

@@

@@

@@@@

���

@@ @@@

���

��@

@@

12. Si considerino le figure ad onda quadra, a diversi ordini di increspa-tura, come descritto nella figura che segue. Generare una di questeonde, in funzione dell’altezza della striscia del disegno e dell’ordine diincrespatura.

13. Assegnati due valori interi p e q, da interpretarsi come coordinate diun punto P del piano cartesiano, scrivere mediante dei cicli le 8 coppiedi coordinate intere attorno al punto P , compreso il punto P centrale.Stesso esercizio, scrivendo le 8 coppie dei punti attorno al punto P ,escluso il punto P .

14. Determinare le coordinate delle n2 caselle disposte a spirale in sensoantiorario attorno ad una data posizione �p, q�; le coordinate delle primecaselle dovranno essere �p, q�, �p, q�1�, �p�1, q�1�, �p�1, q�, �p�1, q�1�,�p, q � 1�, �p � 1, q � 1�, �p � 1, q�, . . .

15. Si lanciano 3 dadi. Determinare tutte le possibili terne che si possonopresentare: �1,1,1�, �1,1,2�, . . . . I dadi sono considerati indistinguibili

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 391: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

24.6. ESERCIZI 381

fra loro; ad esempio, le terne �1,2,3� e �3,1,2� devono essere considerateuguali; pertanto tale terna va considerata una sola volta. Generalizzareal caso di n dadi.

16. Si consideri il poligono regolare P �n, l� definito mediante il seguentealgoritmo:

Algoritmo 108 - P �n, l�Input: numero n dei vertici, lunghezza l dei lati1: repeat n2: forward�l~n�3: left�360~n�4: end repeat

Determinare la figura alla quale converge P �n, l� per n�ª.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 392: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

382 CAPITOLO 24. RIPETERE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 393: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 25

Ricorrere

L’annidarsi di cose entro cose e le sue va-riazioni [. . . ], un racconto all’interno di unracconto, una commedia nella commedia,un quadro dentro un quadro, scatole cinesidentro scatole cinesi (perfino commenti traparentesi all’interno di commenti tra pa-rentesi!): tutto ciò dà solo una piccola ideadel fascino della ricorsività.D. R. Hofstadter, Godel, Escher, Bach

In generale, un’entità (definizione, problema, soluzione, funzione, azione,oggetto, dato, struttura, figura, ...) si dice ricorsiva se fa riferimento, di-rettamente o indirettamente, a se stessa. Casi molto importanti di entitàricorsive sono costituiti dalle definizioni ricorsive, dalle funzioni ricorsive edalle strutture dati ricorsive.

Le tecniche di programmazione ricorsive si basano sulla scomposizione deiproblemi mediante la metodologia top-down. In questo caso non si trattadi scomporre il problema in sottoproblemi, ma di ridurre il problema ad unosimile ma di dimensione inferiore. I termini problemi simili e dimensione diun problema risulteranno chiariti dagli esempi che seguiranno.

Pur non incrementano le potenzialità di calcolo, la ricorsività si prestaper definire e trattare elegantemente e semplicemente (anche se non sem-pre efficientemente) delle entità che per loro natura si presentano in formaricorsiva.

383

Page 394: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

384 CAPITOLO 25. RICORRERE

25.1 Definizioni ricorsiveUna definizione è ricorsiva se nella definizione si fa riferimento alla definizionestessa. Molte entità, grazie alla loro struttura, si prestano ad essere definitein modo ricorsivo, come illustrato dagli esempi che seguono.Esempio 215. Un treno merci (di una volta) è formato da una locomotivaoppure da un vagone attaccato alla fine di un treno merci. Un esempio èdescritto nello schema riportato nella figura 25.1.

locomotiva vagone vagone vagone

Figura 25.1: Schema di un treno merci.

Questa definizione può essere adattata per definire un treno di n vagoni,come segue: un treno di n vagoni è costituito dalla sola locomotiva se n � 0,altrimenti è costituito da un vagone attaccato alla fine di un treno di n � 1vagoni.Esempio 216. Gli alberi binari sono delle particolari figure che si prestanonaturalmente ad essere definite in modo ricorsivo. Indicando con T �l, n, k�un generico albero binario di lunghezza l, ordine n e rapporto k, un alberobinario può essere descritto ricorsivamente dalla figura 25.2

CCCCCC

HHH

HHH

HHH

HHH

������

���

���

���

���

T �l,0, k� T �l, n, k�l l

T �l~k,n � 1, k� T �l~k,n � 1, k�

Figura 25.2: Schema della definizione ricorsiva di un albero binario.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 395: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.2. STRUTTURE DATI RICORSIVE 385

25.2 Strutture dati ricorsiveUna struttura dati si dice ricorsiva se è caratterizzata da una struttura che siripete internamente in modo simile alla struttura stessa.Esempio 217. Le liste costituiscono un’importantissima struttura dati che siincontra spesso in informatica. Una lista può essere definita, in modo ricorsi-vo, come segue: una lista è una lista vuota � � oppure è una coppia �a, x� dovea è un elemento, detto testa ed x è una lista detta coda. In base a questadefinizione si riconosce che �1, �2, �3, � � � � � è una lista; una tale lista vienesolitamente viene denotata più semplicemente con �1,2,3�.25.3 Funzioni ricorsiveUna funzione è ricorsiva se richiama (direttamente o indirettamente) se stessa.La definizione di una funzione ricorsiva si fonda essenzialmente sul principiodi ricorsione dei numeri naturali.

Nel seguito sono presentati alcuni esempi di definizioni ricorsive e le corri-spondenti funzioni ricorsive. I primi tre esempi evidenziano la stretta analogiaesistente fra definizione di una funzione ricorsiva e la sua codifica in un linguag-gio di programmazione: la codifica consiste nella traduzione della definizionedella stessa funzione.Esempio 218. Il fattoriale n! di un numero naturale n può essere definitoricorsivamente come segue:

n! � � 1 se n � 0n � �n � 1�! se n A 0

In base a questa definizione si può calcolare, ad esempio, 4! mediante il processodi calcolo descritto dalle seguenti espansioni:

4!� 4 � 3!� 4 � 3 � 2!� 4 � 3 � 2 � 1!� 4 � 3 � 2 � 1 � 0!� 4 � 3 � 2 � 1 � 1� 24

Basandosi su questa definizione, si può definire la seguente funzione ricorsiva:

fatt�n�( if�n � 0,1, n � fatt�n � 1��Esempio 219. Prendendo spunto dalle seguenti proprietà godute dalla funzionemcd che valuta il massimo comune divisore fra due numeri naturali m ed n:

mcd�m,0� � m

mcd�m,n� � mcd�n,m%n�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 396: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

386 CAPITOLO 25. RICORRERE

si può definire la funzione ricorsiva che segue:

mcd�m,n�( if�n � 0,m,mcd�n,m%n��Il processo di calcolo innescato da una chiamata ricorsiva può essere de-

scritto anche mediante una sequenza di trasformazioni come segue, dove vienecalcolato il massimo comune divisore fra 15 e 24:

mcd�15,24��mcd�24,15��mcd�15,9��mcd�9,6��mcd�6,3��mcd�3,0�� 3

Esempio 220. Nella letteratura informatica è spesso riportato un famoso esem-pio di funzione ricorsiva: la funzione di Ackerman, definita come segue:

A�0, n� � n � 1A�m � 1,0� � A�m,1�

A�m � 1, n � 1� � A�m,A�m � 1, n��La definizione data sopra si presta ad essere immediatamente e facilmentecodificata come segue:

A�m,n�( if�m � 0, n � 1, if�n � 0,A�m � 1,1�,A�m � 1,A�m,n � 1����Esempio 221. Le funzioni che seguono costituiscono una triade di funzionibasilari (di livello zero) sulle quali si basa la definizione assiomatica dei numerinaturali:

s�n� ( n � 1 successivo

p�n� ( if�n � 0,0, n � 1� precedente

z�n� ( n � 0 controllo

Componendo queste funzioni mediante la ricorsione si possono definire le fun-zioni (di primo livello) di addizione e sottrazione, add, sub � N2

� N, comeriportato a seguire:

add�m,n� ( if�z�n�,m, s�add�m,p�n����sub�m,n� ( if�z�n�,m, sub�p�m�, p�n���

Componendo queste funzioni di primo livello si possono definire delle fun-zioni mul, div, mod (di secondo livello) corrispondenti, rispettivamente, aglioperatori aritmetici �, ~, %.

mul�m,n� ( if�z�n�,0, add�m,mul�m,p�n����div�m,n� ( if�m @ n,0, s�div�sub�m,n�, n����mod�m,n� ( if�m @ n,m,mod�sub�m,n�, n���

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 397: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.4. FIGURE RICORSIVE 387

In molte situazioni le funzioni ricorsive sono definite richiamando altrefunzioni (ricorsive o non).Esempio 222. Nell’esempio che segue dove viene calcolato il rovescio di un nu-mero naturale n considerato in base 10; la funzione di supporto conc concatenadue numeri nella forma �123,45�� 12345.

conc�x, y� ( if�y � 0, x, �conc�x, y~10� � 10� � �y%10��rov�n� ( if�n @ 10, n, conc�n%10, rov�n~10���

25.4 Figure ricorsiveLa ricorsione trova un fertile terreno di applicazione nell’ambito della grafica.Gli esempi che seguono illustrano alcune famose figure ricorsive.Esempio 223. L’algoritmo che segue disegna, usando la grafica della tartaruga,un albero mediante una procedura ricorsiva derivata direttamente dalla defini-zione stessa di albero presentata alle pagine seguenti. Il parametro k denotail rapporto fra la lunghezza di un ramo e quella dei suoi diretti discendenti.

Algoritmo 109 - albero�l, n, k� : albero di lunghezza l, ordine n e rapportokInput: l, n, k1: forward�l�2: if n A 0 then3: left�45�4: albero�l~k,n � 1�5: right�90�6: albero�l~k,n � 1�7: left�45�8: end if9: penup

10: back�l�11: pendown

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 398: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

388 CAPITOLO 25. RICORRERE

Nella seguente figura è riportato un albero binario di lunghezza 2 centimetri(altezza del fusto dell’albero), di ordine 4 e rapporto

º2.

���

@@@��

@@

@@ �� @@ ��

@@

��

Esempio 224. Un altro bel esempio di figura ricorsiva è costituito dalla curvadi Von Kock che è definita come segue: la curva di base x ed ordine 0 è co-stituita da un segmento di lunghezza x; una curva di ordine 1 viene costruitadividendo il segmento di base in 3 parti, eliminando la parte centrale, sullaquale viene innalzato un triangolo equilatero; in generale una curva di ordi-ne superiore viene costruita replicando questo procedimento, innalzando untriangolo equilatero sulla parte centrale di ogni tratto rettilineo della curva diordine precedente. La curva di Von Kock ha la caratteristica, di particolareinteresse nell’ambito dell’Analisi Matematica, di generare, al tendere all’infi-nito dell’ordine n di ricorsione, una funzione continua che non è derivabile inalcun punto.

Figura 25.3: Istanze della curva di von Kock di ordine 1, 2, 3 e 4.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 399: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.4. FIGURE RICORSIVE 389

L’algoritmo che segue disegna una curva di Von Kock, mediante i comandidella grafica della tartaruga.

Algoritmo 110 - vonKock�l, n� : curva di lunghezza l ed ordine nInput: l, n1: if n � 0 then2: forward�l�3: else4: vonKock�l~3, n � 1�5: left�60�6: vonKock�l~3, n � 1�7: right�120�8: vonKock�l~3, n � 1�9: left�60�

10: vonKock�l~3, n � 1�11: end if

Esempio 225. Nell’ambito dell’Analisi Matematica è famosa anche la seguentecurva di Hilbert-Peano, nota con il nome dei matematici che l’hanno scopertaed analizzata. L’importante caratteristica che la contraddistingue consiste nelgenerare, al tendere all’infinito dell’ordine di ricorsione, una curva che riempieuna porzione di piano. Alcune istanze di questa curva sono riportate nellafigura 25.4.

Figura 25.4: Istanze della curva di Hilbert-Peano di ordine 1, 2 e 3.

A seguire è riportato il codice di una procedura ricorsiva per disegnare lacurva di Hilbert-Peano; il parametro k � 0 genera una curva a sinistra rispettoalla direzione attuale, il valore k � 1 una curva a destra.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 400: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

390 CAPITOLO 25. RICORRERE

Algoritmo 111 - hilbert�l, n, k� : curva di di lunghezza l, ordine n e verso kInput: l, n, k1: if n A 0 then2: left�90 � k � 180�3: hilbert�l, n � 1, �k � 1�%2�4: forward�l�5: left�270 � k � 180�6: hilbert�l, n � 1, k�7: forward�l�8: hilbert�l, n � 1, k�9: left�270 � k � 180�

10: forward�l�11: hilbert�l, n � 1, �k � 1�%2�12: left�90 � k � 180�13: end if

Esempio 226. La curva del drago fu scoperta dal fisico della NASA John Hei-ghway. Fu successivamente analizzata dai matematici e teorici dei computerDonald Knuth e Chandler Davis, con particolare riferimento alle rappresenta-zioni dei numeri. Il modo più semplice per descriverla si basa su un procedi-mento grafico ricorsivo, simile al metodo usato per la generazione della curvadi Von Kock: si inizia con un segmento che costituisce la curva di ordine 0; adogni passo successivo della ricorsione si sostituisce ciascun segmento della cur-va con due segmenti adiacenti che formano un angolo retto, alternativamentedalle due bande della curva (vedi figura 25.5).

Figura 25.5: Passi della generazione di alcune istanze della curva del drago,dall’istanza di ordine 0 all’istanza di ordine 5; la linea tratteggiata denota lacurva di supporto ottenuta al passo precedente.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 401: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.4. FIGURE RICORSIVE 391

Il procedimento sopra illustrato suggerisce direttamente l’algoritmo 112.

Algoritmo 112 - drago�l, n, k� : curva di lunghezza l, ordine n e verso kInput: l, n, k1: if n � 0 then2: forward�l�3: else4: left�45 � �k � 270��5: drago�l, n � 1,0�6: right�90 � �k � 180��7: drago�l, n � 1,1�8: left�45 � �k � 270��9: end if

La figura 25.6 riporta curva del drago di ordine 6 senza le linee di supportodell’istanza di ordine 5.

Figura 25.6: Curva del drago di ordine 6.

Un modo pratico per generare la curva del drago consiste nel prendere unfoglio di carta ed eseguire dei successivi piegamenti del foglio a metà: il profilodel foglio, opportunamente dispiegato in modo da formare degli angoli retti incorrispondenza di ciascun piegamento, assumerà, di profilo, la forma di unacurva del drago.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 402: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

392 CAPITOLO 25. RICORRERE

25.5 Esercizi

1. Definire ricorsivamente un treno composto da una locomotiva seguita dauna sequenza di almeno un vagone.

2. Definire in modo ricorsivo un treno merci formato da una locomotivaall’inizio, di traino, e, nel caso ci siano più vagoni, da un eventualelocomotiva di spinta alla fine.

3. Un quad di lunghezza l e ordine 0 è un quadrato di lato l; un quad dilunghezza l ed ordine n A 0 è un quadrato di lato l avente costruiti unquad di lunghezza l e ordine n � 1 su ciascuno dei suoi lati. Eventualilinee sovrapposte non vengono considerate. Descrivere graficamentecom’è fatto un quad di ordine 3.

4. Motivare perché la seguente definizione ricorsiva della funzione fattorialeè mal posta:

n! � � 1 se n � 0�n�1�!

n�1 se n A 0

5. Spiegare perché la seguente funzione ricorsiva per il calcolo della distanzafra i due numeri m ed n “non funziona”.

f�m,n�( if�m @ n,n �m,f�n,m��Modificare la definizione in modo da renderla corretta.

6. Individuare e definire mediante una relazione di ricorrenza la legge chegeneri la seguente successione di numeri naturali:

1 2 4 7 11 16 22 29 . . .

Definire una funzione ricorsiva corrispondente alla relazione di ricorrenzadefinita.

7. Stabilire cosa valutano le funzioni f � N � N definite come segue, deter-minando, se possibile, una formula chiusa (non ricorsiva) corrispondentealla funzione.

(a) f�n�( if�n � 0,0,1 � f�n � 1��(b) f�n�( if�n � 0,0, n � f�n � 1��(c) f�n�( if�n @ 1,1, n � f�n � 1��

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 403: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.5. ESERCIZI 393

(d) f�n�( if�n @ 10,1,1 � f�n~10��(e) f�n�( if�n � 0,0, n%10 � f�n~10��(f) f�n�( if�n A 0, f�n~10�, n%10�(g) f�n�( if�n A 0, f�n~10�, n�(h) f�n�( if�n A 0, n%10, f�n~10��(i) f�n�( if��n%2� � 0, f�n � 1�, if�n A 0, n, f�n � 2���

8. Stabilire cosa valutano le funzioni f � N � N � N definite come segue,determinando, se possibile, una formula chiusa (non ricorsiva) corrispon-dente alla funzione.

(a) f�m,n�( if�n � 0,m,1 � f�m,n � 1��(b) f�m,n�( if�m � 0,0,m � n � 1 � f�m � 1, n � 1��(c) f�m,n�( if�m @ n,0,1 � f�m � n,n��(d) f�m,n�( if�m @ n,m, f�m � n,n��

9. Dire cosa avviene quando vengono richiamate le seguenti funzioni ricor-sive:

(a) f�n�( f�f�n��(b) f�n�( if�f�n� A 0, f�n � 1� � 1, f�n � 1� � 1�

10. Stabilire cosa valuta il seguente predicato p sui numeri naturali cherichiama il predicato ricorsivo q.

(a) p�n�( q�n,2�(b) q�m,n�( if��m%n� � 0,m � n, q�m,n � 1��

11. Decidere se i seguenti due predicati ricorsivi terminano, nel quale casodeterminare cosa valutano.

(a) p�n�( if�n � 0,TRUE, p�n � 2��(b) p�n�( if�n @ 2, n � 0, p�n � 2��

12. Dimostrare che i seguenti due predicati sono equivalenti e corrispondonoal predicato di relazione d’ordine B sui numeri naturali:

(a) p�m,n�( if�m � 0,TRUE, if�n � 0,FALSE, p�m � 1, n � 1���(b) q�m,n�( if�n � 0,m � 0, if�m � 0,TRUE, q�m � 1, n � 1���

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 404: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

394 CAPITOLO 25. RICORRERE

13. Definire una funzione ricorsiva che esprima il numero di regioni formateda n rette, con il vincolo che per un punto passino al più due rette.

14. Usando le funzioni successivo �s � x� x� 1�, precedente �p � x� x� 1� econtrollo di uguaglianza a zero �z � x� x � 0� definire in forma iterativaed in forma ricorsiva due funzioni che valutino la somma e la differenzafra due numeri naturali. Comparare l’efficienza delle due funzioni.

15. Definire una funzione per determinare l’n-esimo numero della successionedi Fibonacci, descritta dalla seguente regola ricorsiva:

f0 � 0, f1 � 1, fn � fn�1 � fn�2

16. Determinare la somma dei primi n termini della successione di Fibonacci.

17. Definire una relazione di ricorrenza che generi la seguente sequenza diespressioni frazionarie:

1, 1 � 11, 1 � 1

1 � 11, 1 � 1

1 � 11� 1

1

, 1 � 11 � 1

1� 11� 1

1

, . . .

Definire una funzione per calcolare l’n-esimo termine della successione.Dimostrare che la successione tende al rapporto aureo φ �

1�º

52 .

18. Definire una funzione ricorsiva che determini il numero di bit della rap-presentazione binaria di un numero naturale.

19. Definire una funzione ricorsiva che determini il numero di bit uguali a 1della rappresentazione binaria di un numero naturale.

20. Descrivere un algoritmo iterativo ed uno ricorsivo per valutare la fun-zione (di Dijkstra) definita mediante le seguenti identità:

f�0� � 1f�1� � 1

f�2n� � f�n�f�2n � 1� � f�n� � f�n � 1�

Valutare a mente il valore f�5�.L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 405: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.5. ESERCIZI 395

21. Dimostrare che la definizione della funzione A di Ackerman presentatanelle pagine precedenti è ben posta, nel senso che definisce un processo divalutazione che converge verso la chiusura della ricorsione, rappresentatadalla prima parte della definizione. Valutare, a mano con carta e penna,il valore di A�2,2�.

22. Definire la funzione A di Ackerman in modo iterativo.

23. Definire un procedimento iterativo per risolvere il problema della torredi Hanoi.

24. Basandosi sull’identità algebrica �n� 1�2 � n2 � 2n� 1, definire una fun-zione ricorsiva che valuti il quadrato di un numero usando solo addizionie sottrazioni.

25. Usando le sole operazioni di addizione e sottrazione, determinare, inmodalità iterativa ed in modalità ricorsiva, il quoziente della divisioneintera fra due numeri naturali.

26. Usando le sole operazioni di addizione e sottrazione, determinare, inmodalità iterativa ed in modalità ricorsiva, il resto della divisione interafra due numeri naturali.

27. Definire una funzione ricorsiva che valuti la somma delle cifre di unnumero naturale, considerato in base 10. Suggerimento: la funzionericorsiva può essere basata sulla seguente osservazione: La somma dellecifre è uguale alla somma dell’ultima cifra con la somma delle cifre delnumero ottenuto escludendo l’ultima cifra. Usando questa funzione,definire una funzione che determini la somma delle cifre di un numeronaturale, iterando il procedimento finché si ottiene un numero compostoda una sola cifra.

28. Definire una versione iterativa ed una ricorsiva di una funzione che valutil’operazione di elevamento a potenza fra due numeri naturali. Per laversione ricorsiva si tenga presente la relazione

xn� � 1 se n � 0

x � xn�1 se n A 0

29. Definire una funzione ricorsiva per calcolare la potenza di un numero,sfruttando la definizione che segue. Valutare, in funzione di n, il numerodelle attivazioni e la profondità della ricorsione della funzione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 406: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

396 CAPITOLO 25. RICORRERE

xn�

¢¦¤1 se n � 0�xn~2�2 se n è pari

x � xn�1 se n è dispari

30. Definire una funzione ricorsiva per il calcolo del massimo comune divisorefra due numeri naturali m ed n, basandosi sulle seguenti proprietà:

mcd�m,n� � ¢¦¤m se m � n

mcd�m,n �m� se m @ nmcd�m � n,n� se m A n

Illustrare graficamente l’attivazione delle varie chiamate che vengonoinnescate con la chiamata mcd�28,62�.

31. La funzione binomiale di n su k è definita come segue:

b�n, k� � n!k!�n � k�!

Utilizzando la definizione b�n,0� � 1 e l’identità matematica

b�n � 1, k� � b�n, k� � b�n, k � 1�definire la funzione binomiale in modo ricorsivo.

32. Definire la funzione binomiale di n su k, utilizzando la proprietà di Stiefel

b�n, k� � b�n, k � 1� � b�n � 1, k � 1�33. Usando le seguenti identità relative alla funzione binomiale di n su k,

valide per 0 B k B n,

b�n,0� � 1b�n, k� � b�n,n � k�

b�n, k � 1� �b�n, k��n � k�

k � 1

definire in forma iterativa ed in forma ricorsiva una funzione per deter-minare il coefficiente binomiale fra due numeri naturali n e k. Valutarecomparativamente l’efficienza delle due versioni della funzione.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 407: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.5. ESERCIZI 397

34. Una coltura di batteri raddoppia la propria popolazione dopo una unitàdi tempo. Definire una funzione ricorsiva che, a partire da una certapopolazione iniziale p di batteri, fornisca il numero di batteri dopo nunità di tempo. Definire una funzione che determini le unità di temponecessarie a raggiungere una popolazione di (almeno) n batteri, a partireda una popolazione iniziale di p batteri.

35. Definire in forma ricorsiva una funzione che concateni due numeri natu-rali espressi in base 10; ad esempio:

�352,1765�� 3521765

Usando tale funzione di concatenamento sopra, definire in forma ricorsivauna funzione che inverta le cifre di un dato numero naturale espresso inbase 10; ad esempio:

4735813� 3185374

36. Definire una funzione (ricorsiva) che generi tutti i differenti modi secondoi quali un dato numero n può essere espresso come somma di più addendi.Ad esempio, se n � 5,

5 � 5� 4 � 1� 3 � 2� 3 � 1 � 1� 2 � 2 � 1� 2 � 1 � 1 � 1� 1 � 1 � 1 � 1 � 1

37. Dimostrare che le seguenti due procedure sono equivalenti:

(a) q�h, k�( 4 � �forward�h�, if�k A 0, q�h, k � 1��, left�90��(b) q�h, k�( if�k A 0,4 � �forward�h�, q�h, k � 1�, left�90���Determinare il risultato della chiamata q�10,2�.

38. Un fiocco di von Kock è ottenuto sostituendo i lati di un triangolo equila-tero con tre curve di von Kock. Determinare, in funzione della lunghezzadel lato di base e dell’ordine della curva, il perimetro e l’area ddi un fioc-co di von Kock. Valutare questi valori al tendere all’infinito dell’ordinedella curva. Disegnare un fiocco di von Kock.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 408: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

398 CAPITOLO 25. RICORRERE

39. Determinare il numero di segmenti che compongono una curva del dragodi ordine n.

40. Determinare la lunghezza di una curva del drago di ordine n costruita apartire da un segmento iniziale di lunghezza l (curva di ordine 0).

41. Nonostante l’apparenza, la curva del drago è costituita da una lineacontinua che non interseca mai se stessa. Definire una funzione chegeneri una curva del drago in modo in modo da arrotondare gli spigoliper evidenziare meglio la struttura lineare della curva.

42. Descrivere graficamente lo schema ricorsivo per generare la figura ripor-tata nella copertina di questo Quaderno. Scrivere un algoritmo pergenerare la figura.

43. Determinare in modo ricorsivo il rovescio di una stringa.

44. Decidere in modo ricorsivo se una stringa è palindroma.

45. Determinare gli anagrammi di una data stringa. Suggerimento: descri-vere l’algoritmo in modo ricorsivo.

46. Disegnare, in modalità iterativa ed in modalità ricorsiva, le seguenti figu-re. Determinare la lunghezza di ciascuna figura (mediante un algoritmoo mediante una formula chiusa).

���

@@@

@@@

���

��

@@

@@

��

47. Disegnare, in modalità iterativa ed in modalità ricorsiva, una figura com-posta da una sequenza di triangoli equilateri incritti ciascuno in unaltro ed aventi per vertici i punti medi del triangolo immediatamenteprecedente.

48. Generare un’istanza della successione di figure generate dalla seguenteregola ricorsiva:

- una figura di ordine 0 e lato h è costituita da un quadrato di lato h- una figura di ordine n viene generata suddividendo ciascun quadra-to della figura di ordine n � 1 in 9 quadrati uguali, eliminando itratti centrali di ciascun lato

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 409: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.5. ESERCIZI 399

-

49. Una tassellazione del piano consiste nella partizione del piano medianteun disegno di figure appartenenti ad una classe predefinita, similmentea come si ricopre un pavimento mediante delle piastrelle di forme pre-fissate. Definire delle funzioni per generare una tassellazione del piano(una porzione del video) definita mediante le seguenti regole:

- la tassellazione è costituita da quadrati ed ottagoni regolari diuguali lati

- ogni quadrato è circondato da 4 ottagoni (ciascuno su ogni lato delquadrato)

- ogni ottagono è circondato da 4 quadrati (ciascuno alternato suilati dell’ottagono)

50. Si consideri la successione di figure generate mediante la seguente regolaricorsiva:

- la figura di ordine 0 e lato h è costituita da un cerchio inscritto inun quadrato di lato h

- la figura di ordine n viene generata suddividendo ciascun quadratodella figura di ordine n� 1 in 4 quadrati in ciascuno dei quali vienegenerato un cerchio inscritto

'&$% ��������

�������� ����������������������������������������������������������������

Dimostrare che le figure sono equivalenti (ma non isoperimetriche). De-finire una funzione ricorsiva per generare una figura della successione.

51. Una figura è composta da una sequenza di triangoli uno dentro l’altro,ciascuno avente per vertici i punti medi del triangolo esterno contiguo,secondo il seguente schema ricorsivo:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 410: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

400 CAPITOLO 25. RICORRERE

T0 : triangolo assegnatoTn�1 : è il triangolo ottenuto da Tn congiungendone i punti medi dei latiDefinire in forma iterativa ed in forma ricorsiva una funzione che generila figura sopra descritta.Determinare il punto a cui tende la successione dei triangoli descrittasopra. Discutere la convergenza del procedimento iterativo.

52. Sono state definite funzioni crescenti sui numeri naturali che assumonovalori molto grandi anche in corrispondenza di piccoli valori dell’argo-mento. Una di queste, ideata dal matematico Leo Moser, è definitamediante la seguente regola ricorsiva in termini numerico-geometrici:

� x in un triangolo � xx

x in un n-agono � x in x �n � 1�-agoniBasandosi su questa definizione si può generare il seguente calcolo:

2 �

���

TTT

��TT2 �

���

TTT4 � 44 � 256

Si tratta di una funzione µ�x,n� � N2� N che dipende dal numero x

e dal numero naturale n di lati del poligono (n C 3�. Definire questafunzione mediante la tradizionale notazione algebrica. Esprimere in mo-do grafico (mediante l’uso di poligoni) le seguenti istanze: µ�µ�3,3�,4�,µ�µ�5,4�,4�. Stimare il numero di cifre di µ�5,5�. Posto η�x� � µ�x,x�,calcolare η�η�2��.

53. Illustrare comparativamente i concetti di iterazione e di ricorsione.

54. La ricorsività unita alla generazione di numeri casuali può costituirela base per ottenere dei disegni e degli effetti grafici gradevoli, moltoutilizzati in alcuni campi della computer graphics. Definire una funzionericorsiva per generare un albero casuale. Tali figure vengono dette piantegraftali.

55. C’è una particolare simbiosi fra i concetti di semplicità, complessità ericorsione che può essere sintetizzata con le seguenti affermazioni:

- problemi complessi possono avere semplici soluzioni ricorsive

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 411: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

25.5. ESERCIZI 401

- mediante la ricorsione si possono generare situazioni complesseapplicando semplici regole

Si commentino queste affermazioni proponendo degli adeguati esempi edargomentazioni per sostenerle.

56. Il triangolo di Pascal è costituito da numeri naturali disposti in righe;ogni riga è formata da un numero di numeri uguale al numero di rigae, disponendo le righe in modo centrato, ogni numero è la somma deidue numeri adiacenti della riga superiore. A seguire è riportata unaporzione del triangolo.

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

(a) Determinare il k-esimo numero dell’n-esima riga del triangolo diPascal (tale numero viene detto binomiale di n su k).

(b) Determinare l’n-esima riga del triangolo di Pascal.(c) Determinare la sequenza delle prime n righe del triangolo di Pascal

(� �1�, �1,1�, �1,2,1�, . . . �)57. Determinare tutte le possibili scomposizioni in addendi non nulli di un

dato numero naturale (indipendentemente dall’ordine); ad esempio, ilnumero n � 4 può essere scomposto in addendi come segue:

4 � 44 � 1 � 34 � 2 � 24 � 1 � 1 � 24 � 1 � 1 � 1 � 1

e la soluzione può essere espressa mediante la sequenza

� �4�, �1,3�, �2,2�, �1,1,2�, �1,1,1,1� �

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 412: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

402 CAPITOLO 25. RICORRERE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 413: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 26

Computare

Partendo dagli enti e dai metodi della ma-tematica classica, i matematici del XIXsecolo, per progredire ulteriormente, so-no stati costretti a inventare nuovi entimatematici e nuovi metodi".J. Dieudonné, L’arte dei numeri

Esistono molti problemi matematici di tipo numerico per i quali non siconosce alcun metodo risolutivo che conduca in modo deterministico, univocoe finito al risultato esatto; si pensi, ad esempio, al problema di risolvere l’e-quazione x� sinx � 0. Di fronte a problemi di questo tipo si possono adottarediversi atteggiamenti:

• ammettere che il problema non è risolvibile (in modo esatto) riconoscen-do che non esiste alcun procedimento che produce il risultato

• accontentarsi di una soluzione approssimata senza sapere quanto

• adottare un procedimento iterativo in grado di condurre al risultato,avvicinadosi quanto si desidera

Un problema strettamente connesso alla determinazione di un numero ri-guarda la possibilità di esprimere in modo finitistico il risultato, anche nelcaso si tratti di un numero decimale illimitato (esprimibile come frazione onumero periodico (esempio 2~3) o di un numero irrazionale (esempio

º2) o

trascendente (esempio π).

403

Page 414: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

404 CAPITOLO 26. COMPUTARE

26.1 Definizione e determinazione

Nell’indagine scientifica, in generale, ci sono due momenti cruciali e stretta-mente connessi: la definizione dell’oggetto di indagine e la determinazionedello stesso. La fase di definizione viene realizzata specificando delle pro-prietà caratterizzanti univocamente l’oggetto di indagine, mentre la fase dideterminazione consiste nell’attività di ricerca o di costruzione basata su unastrategia operativa. In alcuni casi la fase di determinazione viene precedutadalla dimostrazione di esistenza (in un prefissato insieme) dell’oggetto cercato.

In informatica il termine determinare ha una valenza molto specifica: Fis-sato un contesto ed un insieme di operazioni utilizzabili, descrivere un procedi-mento risolutivo per generare l’oggetto richiesto. Può trattarsi di un contestologico popolato da proposizioni e da regole per generare delle conclusioni (sitratta del classico meccanismo della dimostrazione matematica); può trat-tarsi dell’ambiente costituito dal piano geometrico euclideo con le operazionidi costruzioni geometriche con riga e compasso; può trattarsi dell’ambientearitmetico dei numeri dove sono possibili le quattro operazioni aritmetichedi addizione, sottrazione, moltiplicazione e divisione. Spesso il processo digenerazione del risultato viene descritto mediante un algoritmo.

26.2 Computabilità dei numeri

Un apparente limite di cui sembrano soffrire gli elaboratori consiste nella dif-ficoltà di gestire in modo numerico (e non solamente simbolico) i numeri realiirrazionali. Ciò dipende dal fatto che la rappresentazione dei numeri avvienein modo finito mentre i numeri irrazionali richiedono un’espansione numericadecimale non finita. In questi casi, come avviene in molti algoritmi nume-rici, si approssima l’infinito attuale con un infinito potenziale, secondo l’ideadescritta nella seguente definizione.

DEFINIZIONE 6. Un numero reale x si dice computabile se esiste un al-goritmo A � N � �0,1, . . . ,9� tale che A�n� sia l’n-esima cifra decimale di x,assumendo che A�0� � x�; in altri termini deve essere calcolabile (medianteun procedimento effettivo) la seguente funzione:

f�n� � � x� se n � 0n-esima cifra decimale di x se n A 0

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 415: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26.3. ALLA RICERCA DELLAº

2 405

Equivalentemente, la computabilità di un numero reale x può essere basatasulla calcolabilità della seguente funzione:

g�n� � � x� se n � 0numero formato dalle prime n cifre decimali di x se n A 0

Risulta abbastanza evidente e facile da dimostrare che tutti i numeri razio-nali sono computabili. La computabilità effettiva dei numeri reali con espan-sione decimale illimitata e non periodica richiede invece che venga fornito unprocedimento algoritmico che genera una successione convergente.Esempio 227. I seguenti due risultati stabiliscono che i due numeri reali

º2 e

π sono computabili:

la successione a0 � 1, an �12�1 � 1

an�1� converge a

º2

la serie 4ª

Qk�1

��1�k�1 1k� 4�1 � 1

3�

15�

17��� converge a π

Esistono però numeri irrazionali non computabili.

26.3 Alla ricerca dellaº

2In questo paragrafo considereremo come oggetto di indagine la

º2. La

º2 è

un personaggio matematico, non altrettanto noto come i suoi colleghi famosii, e, φ e π (che hanno avuto un nome proprio), ma è sicuramente un individuointeressante in quanto stimola considerazioni ed approfondimenti sia dal puntodi vista matematico che da quello informatico.

Il matematico francese Benoit Rittaud nel capitolo introduttivo del suolibro La favolosa storia della radice quadrata di due dice:

La radice quadrata di 2, che vale approssimativamente 1,414213562, è,secondo la definizione attualmente più in voga, Il numero che, moltipli-cato per se stesso, dà 2. È anche La radice del quadrato di dimensionipari a 2, ovvero la lunghezza del lato di un quadrato di area 2. È questocarattere geometrico che fa di questa radice un punto di partenza, un’ori-gine. Entrambe le definizioni potrebbero farci pensare di avere a che farecon un numero buono solamente a esprimere la soluzione di un problemadi geometria per degli studenti cui si chieda di imparare che l’area A diun quadrato di lato a è data dalla formula A � a2. In realtà, non soloi due aspetti (quello algebrico e quello geometrico) hanno numerosissi-me conseguenze in direzioni spesso inattese, ma la radice quadrata di 2

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 416: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

406 CAPITOLO 26. COMPUTARE

ammette ulteriori definizioni, e anche queste danno vita a ramificazioniche si estendono ben oltre il semplice calcolo dell’area di un quadrato.È così che i campi in cui interviene questo numero almeno quattro voltemillenario nella storia del pensiero sono di una varietà pressoché infini-ta. [...] Una prima caratteristica interessante della radice di 2 è cheessa rappresenta una porta aperta su interi settori della matematica, siaantica che moderna: la geometria e la teoria dei numeri, ma anche lalogica, l’algebra, l’aritmetica, l’analisi e, più recentemente, l’algoritmica,le strutture di dati, i numeri gadici e la dinamica simbolica.

La definizioneº

2 è quel numero che moltiplicato per se stesso dà 2 comerisultato, apparentemente innocua, sembra autosufficiente, conclusiva e nonlascia presagire alcuna problematica. Sfruttando delle proprietà che discen-dono direttamente dalla sua definizione, questo oggetto può essere manipolatoin modo formale; ad esempio si possono eseguire dei calcoli quali:

º2 �º

2� 2º2 � 1º

2� 1

1º2�

º2º

2 �º

2�

º2

2

I problemi iniziano a sorgere quando si considera l’obiettivo Determinarelaº

2. Ovviamenteº

2 non è la soluzione del problema, è semplicementeuna notazione, un simbolo che denota quel numero che moltiplicato per sestesso da 2, in modo analogo a come possiamo usare 3~4 per denotare quelnumero che otteniamo eseguendo l’operazione 3 diviso 4. Determinare unoggetto significa esibirlo, in un contesto ben precisato, in un formato ed inuna notazione specifica del contesto considerato. Questo quesito richiedeimplicitamente di definire l’insieme nel quale la

º2 viene cercata. I greci

pensavano che tutti i numeri fossero esprimibili come numeri razionali, comerapporto di due numeri naturali. La

º2 non è invece esprimibile come numero

razionale.Con le premesse date, il problema della

º2 solleva le seguenti questioni

(che saranno affrontate e risolte più avanti):

1. dimostrare cheº

2 non è esprimibile mediante un numero razionale

2. determinare in quale insieme si trovaº

2

3. determinare una frazione che approssima bene il valoreº

2

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 417: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26.3. ALLA RICERCA DELLAº

2 407

4. determinare e descrivere un procedimento che, basandosi solo sulle quat-tro operazioni aritmetiche fondamentali sulle frazioni, fornisca le variecifre decimali di

º2

5. dato un segmento di lunghezza unitaria nel piano, costruire con riga ecompasso un segmento di lunghezza

º2

È facile mostrare che una taleº

2 non è esprimibile come frazione: unrisultato che risale alla scuola pitagorica ed era ben noto a Euclide. Unadimostrazione del risultato pitagorico, considerata dal matematico e teoricodei numeri Paul Erdös come una delle più belle di tutta la matematica, èriportata a seguire.Dimostrazione. Supponiamo per assurdo che esistano due numeri naturali p eq tali che

2 � �pq�2

�p2

q2

Possiamo supporre che la frazione sia ridotta, ovvero che p e q siano primi fradi loro. Dalla precedente relazione si ottiene

p2� 2 � q2

Ne segue che 2 divide p2, e quindi p è pari. Quindi p � 2 � k per qualche k > N.Di conseguenza otteniamo:

2 � k2� q2

Allora anche q è pari, in contraddizione con il fatto che p e q siano coprimi.Dunque deve essere falsa l’ipotesi iniziale, cioè

º2 non può essere razionale.

Dimostrato cheº

2 non può essere un numero razionale, si tratta ora diaccertarsi che tale numero esiste fra i numeri reali. Ciò è garantito dal seguente

TEOREMA 7 (Esistenza diº

2). Nell’insieme dei numeri reali R esiste laradice quadrata di 2, cioè un numero positivo il cui quadrato è esattamente 2.

La dimostrazione di questo teorema, che qui non viene riportata, può es-sere basata usando soltanto le quattro operazioni e i principi fondamentalidell’ordinamento di R.

Laº

2 ha anche una semplice definizione geometrica: è la lunghezza delladiagonale del quadrato di lato unitario. Questa lineare definizione ed il cor-rispondente metodo di costruzione con riga e compasso fa intuire che questonumero si trova più a suo agio in ambito geometrico.

I greci traducevano i numeri in ambito geometrico, mediante segmenti lacui lunghezza rappresentava il numero stesso; in particolare determinare un

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 418: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

408 CAPITOLO 26. COMPUTARE

numero significava costruire un segmento la cui lunghezza era il numero. Intale contesto, determinare

º2 significava costruire con riga e compasso un

segmento di lunghezzaº

2 a partire da un segmento di lunghezza unitaria.La figura 26.1 descrive una costruzione.

Figura 26.1: La costruzione di un segmento di lunghezzaº

2 a partire dalsegmento di lunghezza unitaria AB.

I babilonesi, usando un sistema di numerazione in base 60 diedero unaapprossimazione di

º2, tramite

1 � 2460

�51602 �

10603 � 1,414213562373095...

Un’altra approssimazione di questo numero è quella data da un anticotesto matematico indiano, il Sulbasutras, che cita: Aumenta la lunghezza [dellato] della sua terza parte, poi aggiungi la sua dodicesima parte, infine sottraiun trentaquattresimo della sua dodicesima parte. Tradotta numericamente,questa approssimazione diventa

1 � 13�

112

�1

12 � 34�

577408

� 1.414215686

Esiste una gran quantità di algoritmi atti a calcolare le cifre diº

2. Unodei più usati dai calcolatori è un antico metodo babilonese descritto di seguito.Adottando la definizione stessa, si tratta di trovare la soluzione dell’equazionex2 � 2. Tale equazione può essere scritta nella forma x � 2~x. Se x0 non èla soluzione esatta di questa equazione ma una sua approssimazione, allora idue valori x0 e 2~x0 saranno delle approssimazioni, una per difetto e l’altraper eccesso. La soluzione effettiva sarà quindi compresa fra questi due valori.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 419: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26.3. ALLA RICERCA DELLAº

2 409

La media fra questi due valori vale

x1 �12�x0 �

2x0�

e costituirà quindi un’approssimazione migliore. Generalizzando, si puògenerare una successione di numeri x0, x1, . . . , xn, . . . mediante le relazioni

x0 � valore

xn�1 �12�xn �

2xn�

dove valore è una generica approssimazione iniziale, ad esempio 1. Talesuccessione converge a

º2. Notiamo che, se x0 è un numero razionale, tutti

i valori della successione �xi� sono numeri razionali.La tabella 26.1 riporta il processo di generazione di alcuni termini della

successione. La successione converge con velocità quadratica, ossia il numerodi decimali corretti raddoppia ad ogni iterazione. Il suo valore approssimato aquaranta cifre decimali è: 1,4142135623730950488016887242096980785696...

n xn

0 11 1.52 1.41666666666663 1.414215686274514 1.41421356237469

Tabella 26.1: Valori della successione per il calcolo diº

2 mediante il metodobabilonese; in grassetto sono evidenziate le cifre corrette.

Maggiore è il numero di iterazioni, migliore sarà la precisione del risultato.Nel febbraio 2006 utilizzando questo metodo sono state calcolati 200 miliardidi cifre in 13 giorni e 14 ore. Tra le costanti matematiche irrazionali nonperiodiche, solo π è stata calcolata con maggior precisione.

Laº

2 può essere calcolata anche mediante strumenti e metodi dell’Algebrae dell’Analisi. Ad esempio può essere espressa mediante una frazione continua:

º2 � 1 �

1

2 �1

2 �1

2 �1�

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 420: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

410 CAPITOLO 26. COMPUTARE

Rappresentazioni tramite prodotti infiniti delle funzioni seno e cosenoconsentono di ricavare formule quali le seguenti:

º2 �

ª

Mk�0

�4k � 2�2�4k � 1��4k � 3� � �2 � 21 � 3

��6 � 65 � 7

��10 � 109 � 11

��14 � 1413 � 15

��º

2 �

ª

Mk�0

�1 � 14k � 1

��1 � 14k � 3

� � �1 � 11��1 � 1

3��1 � 1

5��1 � 1

7��

26.4 Calcoli iterativi indefiniti

La palestra di problematiche e di procedimenti relativi allaº

2, analizzate edescritti nel precedente paragrafo, può essere generalizzata per la computa-zione di altri numeri. Riprendiamo qui gli argomenti presentati nel paragrafoprecedente e li applichiamo per il calcolo della radice quadrata di un numero.Mediante l’algoritmo di Newton il calcolo della radice quadrata di un nu-mero naturale a può essere svolto mediante il procedimento iterativo linearestazionario di primo grado descritto dal seguente schema iterativo:

x0 � p

xk �12 �xk�1 �

axk�1

�Si può dimostrare che, indipendentemente dal valore di partenza p, la suc-cessione �xk� converge a

ºa. Il procedimento può essere arrestato quando il

risultato si è sufficientemente stabilizzato. Benché il valore di partenza x0 noninfluenzi sensibilmente la velocità di convergenza della successione, un valoreconsigliabile è:

x0 �1 � a

2Sono stati fatti studi particolari per la determinazione di buoni valori di parten-za x0 (in funzione di a); in particolare sono state individuate delle espressionipolinomiali per ottenere valori di partenza ottimi per x0.

26.5 Funzioni computabili

Una funzione dicesi computabile o calcolabile se esiste un procedimentomeccanico (algoritmo) che permette di determinare il valore della funzione per

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 421: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26.5. FUNZIONI COMPUTABILI 411

ogni possibile valore degli argomenti. Nel caso in cui il processo di calcolo, perqualche valore dei dati di input, non termini si parla di funzioni parzialmentecomputabili.

Per le considerazioni che seguiranno ci limiteremo a considerare funzionisui numeri naturali.Esempio 228. Sono esempi di funzioni computabili le seguenti:

n ( 2n

�m,n� ( massimo comune divisore fra m ed nn ( n-esima cifra decimale di

º2

La distinzione fra funzioni computabili e non computabili non avrebbe ra-gione d’esistere fintantochè non si sia dimostrato che esistono funzioni noncomputabili oppure non si sia prodotto un esempio di funzione non computa-bile.

Dimostriamo subito che esistono funzioni non computabili. Ogni MdT èdescritta mediante il suo programma (insieme di quintuple); tale programmapuò essere convertito in una stringa (ad esempio concatenando le stringhe checodificano ciascuna quintupla). Le stringhe che codificano le MdT possonoessere enumerate in sequenza, ad esempio in ordine alfabetico. Le funzioni franumeri naturali (della forma N � N) non sono numerabili. Quindi esistonofunzioni non computabili.

Da questa dimostrazione abbiamo ottenuto un risultato più forte di quantoci eravamo prefissi: le funzioni non computabili sono la stragrande maggioran-za fra tutte le funzioni ossia, in altri termini, ”quasi” tutte le funzioni franumeri naturali sono non computabili. Il fatto che questa conclusione contra-sti con l’opinione comune che le funzioni siano tutte computabili dipende dalfatto che le funzioni che si incontrano spontaneamente e che si costruisconosono definite apposta per essere computabili.

Esibire degli esempi di funzioni non computabili non è facile e serve un po’di inventiva. Un classico esempio di funzione non computabile 1 è rappresen-tato dalla funzione f � N� N definita come segue:

f�n� � ¢¦¤1 se nella rappresentazione decimale di π

c’è una successione di n cifre 7 consecutive0 altrimenti

Esssendo che un algoritmo è concettualmente assimilabile ad una fun-zione, si può parlare indifferentemente di problemi risolvibili e funzionicomputabili.

1Riportato in N. Cutland, Computability, Cambridge Univ. Press, 1980.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 422: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

412 CAPITOLO 26. COMPUTARE

26.6 Esercizi1. Dimostrare che tutti i numeri razionali sono computabili.

2. Dimostrare che esistono numeri reali non computabili. Suggerimen-to: utilizzare un procedimento diagonale analogo a quello utilizzato perdimostrare che l’insieme dei numeri reali non è numerabile.

3. Dimostrare che, per ogni x > R�,ºx è computabile.

4. Scrivere un algoritmo per il calcolo diº

2 basandosi sul metodo babilo-nese descritto nel paragrafo 6.2.

5. Scrivere un algoritmo corrispondente alla seguente espressione dellaº

2mediante una frazione continua:º

2 � 1 �1

2 �1

2 �1

2 �1�

.

6. Scrivere degli algoritmi per il calcolo diº

2 basati sulle rappresentazionimediante prodotti descritti alla fine del paragrafo 6.2.

7. Calcolare la radice n-esima di un dato numero positivo a, basandosi sulseguente schema iterativo:

x0 � a

xk �1n ��n � 1�xk�1 �

a�xk�1�n�1 �

La successione �x0, x1, . . . , xk, . . . � converge al valore nºa.

8. Usando l’automa tartaruga calcolareºa.

9. Sia P �n, l� un poligono regolare di n lati di lunghezza l. Dimostrareche i seguenti limiti tendono ad una circonferenza:

limn�ª

P �l, n�lim

n�ªP �l~n,n�

Determinare il raggio di tali circonferenze.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 423: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

26.6. ESERCIZI 413

10. Dati due numeri qualsiasi a, b, si consideri la successione

x0 � a

x1 � b

xn � xn�1 � xn�2

Questa successione costituisce una generalizzazione della successione diFibonacci. Dimostrare e verificare sperimentalmente che il rapporto fradue termini consecutivi tende al rapporto aureo, ossia:

limx�ª

xk�1xk

º5 � 12

11. Si valuti in modo iterativo (lento) un valore approssimativo di π in basealla seguente formula:

π � 4ª

Qk�1

��1�k�1 1k� 4 �1 � 1

3�

15�

17� ...�

Determinare quanti addendi sono necessari per avere una precisione ameno di 10�n. Ottimizzare l’algoritmo raggruppando a due a due itermini della serie: 1

2n�1 �1

2n�3 �2

4n2�8n�3 .

12. Valutare in modo approssimato il valore della costante π (pigreco), ba-sandosi sul seguente sviluppo in serie:

π �

¿ÁÁÀ ª

Qk�1

1k2

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 424: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

414 CAPITOLO 26. COMPUTARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 425: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 27

Metrizzare

In generale, il compito della matematicae dei matematici consiste nell’esprimere leregolarità visibili nel mondo fisico e intel-lettuale e nel trovare nuovi modelli struttu-rali non percepibili dall’intuizione diretta edal senso comune.M. Gromov, dal discorso al Premio Balzan1999

Agli inizi del secolo scorso, nel 1906, M. Frechét ha scoperto una strut-tura matematica molto semplice ma assolutamente generale che si fonda sulconcetto intuitivo di distanza. Il concetto è stato formalizzato, sempre agliinizi del XX secolo, dal matematico tedesco Felix Hausdorff. Tale struttura ènota con il nome di spazio metrico e traduce in un contesto assiomatico l’ideaintuitiva di distanza fra due elementi di un generico insieme. Proprio per lasua generalità, tale struttura si presenta in moltissime argomentazioni teoricheed in molte applicazioni pratiche.

Il concetto di spazio metrico generalizza la nozione di distanza geometricadi due punti su una retta, su un piano e nello spazio. Naturalmente, alfine di avere una generalizzazione coerente, gli assiomi che stanno alla base diquesta struttura devono rispettare le proprietà di cui gode l’usuale nozione didistanza.

La tematica relativa agli spazi metrici riguarda principalmente due aspetti:definire una distanza, ossia specificare un criterio che definisce la distanza ri-spettando i vincoli relativi ad un generico spazio metrico; misurare la distanzafra due dati oggetti in base ad un prefissato criterio di misura di distanza.

415

Page 426: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

416 CAPITOLO 27. METRIZZARE

27.1 Gli spazi metriciSi dice che un insieme costituisce uno spazio metrico se per ogni coppia dielementi dell’insieme è definita una funzione a valori numerici che rappresentala distanza fra due generici elementi dell’insieme. Coerentemente con il signi-ficato usuale di distanza, si impone che tale funzione soddisfi a delle specificheproprietà. Formalmente tale concetto viene descritto mediante la seguentedefinizione.

DEFINIZIONE 7. Uno spazio metrico è una coppia �E,d� dove E è ungenerico insieme e d è una applicazione di E �E nell’insieme dei numeri realiR:

d � E �E � R

soddisfacente alle seguenti proprietà 1:

M1. d�x, y� � 0 se e solo se x � y, per ogni x, y > E

M2. d�x, y� � d�y, x� per ogni x, y > EM3. d�x, z� B d�x, y� � d�y, z� per ogni x, y, z > E

La proprietà M3 è detta disuguaglianza triangolare, con evidente analogiaal caso geometrico. In generale, gli elementi di E si chiamano punti, lafunzione d si chiama metrica ed il numero reale d�x, y� si chiama distanza frax ed y.

Una immediata conseguenza dei tre assiomi sopra definiti è rappresentatadal seguente importante

TEOREMA 8. Una metrica è una funzione non negativa.Dimostrazione. Ponendo z � x nella M3, si ha d�x,x� B d�x, y� � d�y, x�;

per la M1 si ha d�x,x� � 0 e, per la M2, si ha d�y, x� � d�x, y� e quindi0 B 2 d�x, y� da cui d�x, y� C 0 e per la generalità dei punti x e z si conclude.j

Intuitivamente, due metriche equivalenti esprimono il fatto che due puntivicini rispetto ad una metrica risultano vicini anche rispetto all’altra; l’infor-matica, sensibile alle questioni di efficienza degli algoritmi, sceglie ed applicale metriche che vengono calcolate più efficientemente. Questa osservazioneviene sfruttata nei programmi di grafica per ricercare velocemente gli elementigrafici vicini ad un dato punto. Formalmente questo concetto viene espressoper mezzo della seguente

1Se al posto della condizione M1 si prende la meno esigente M �

1. d�x, x� � 0 per ognix > E, si parla di spazio pseudometrico.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 427: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.1. GLI SPAZI METRICI 417

DEFINIZIONE 8. Due metriche d1 e d2 su un insieme E si dicono equiva-lenti se esistono due numeri reali positivi a, b tali che

ad1�x, y� B d2�x, y� B b d1�x, y� per ogni x, y > EDato uno spazio metrico �E,d�, un generico sottoinsieme non vuoto A di E

può essere considerato spazio metrico dotandolo della metrica di E ristretta aldominio A�A; tale metrica viene detta metrica indotta. Pertanto, un genericosottoinsieme di uno spazio metrico verrà considerato tacitamente uno spaziometrico dotato della metrica indotta.

Nell’informatica si incontrano con frequenza degli interessanti esempi dispazi metrici.

Esempio 229. Sia A un generico insieme. Indipendentemente dalla naturadegli elementi di A e da eventuali strutture vigenti su A, su A si può definirela seguente metrica (detta metrica banale o metrica discreta):

d�x, y� � � 0 se x � y1 se x x y

Esempio 230. Sulla retta numerica, ossia prendendo E � R, si definisce laseguente metrica:

d�x, y� � Sx � ySNaturalmente, questa definizione di metrica presuppone che su R sia definital’operazione di sottrazione e l’operazione di valore assoluto.

Esempio 231. Il precedente esempio può essere generalizzato come segue. SiaA un generico insieme numerico (numeri naturali, numeri interi, numeri razio-nali, ...). L’insieme E � An può essere dotato della struttura di spazio metricoin vari modi; denotando con x � �x1, . . . , xn�, y � �y1, . . . , yn� due generici puntidi An, si possono definire le seguenti metriche:

d1�x, y� � Qi

Sxi � yiSd2�x, y� � maxi>�1,...,n� Sxi � yiSd3�x, y� �

¿ÁÁÀ n

Qi�1�xi � yi�2

In Rn le metriche definite in questo esempio sono fra loro equivalenti. Nelcaso di n � 1 le tre metriche coincidono.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 428: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

418 CAPITOLO 27. METRIZZARE

Esempio 232. Consideriamo il piano punteggiato P ed analizziamo in qualimodi può essere metrizzato. Il modo più naturale consiste nel fissare un’unitàdi misura e definire la distanza fra due generici punti P e Q come la lunghezzadel segmento AB congiungente i due punti. Si parla in questo caso di metricaeuclidea. Un modo alternativo consiste nel definire un sistema di riferimentocartesiano ortogonale; ciò permetterà di individuare un generico punto delpiano mediante le sue coordinate, stabilendo una corrispondenza biunivoca fraP e R2. A questo punto si possono adottare le metriche descritte nell’esempioprecedente. In particolare la metrica d3 coincide con la metrica euclidea. Diparticolare interesse computazionale è la metrica che risulta dalla d1: vienedetta metrica Manhattan ed è illustrata dal grafico riportato nella figura 27.1,dove è riportata la distanza d � h � k fra due punti P �x1, y1�, Q � �x2, y2�:

d�P,Q� � Sx1 � x2S � Sy1 � y2S

qq

P �x1, y1�

Q�x2, y2�h

k

Figura 27.1: Distanza Manhattan fra i due punti P e Q.

Esempio 233. L’insieme Date delle date, ciascuna delle quali individuata me-diante una terna �giorno,mese, anno�, può essere dotato della struttura dispazio metrico definendo

d�x, y� � numero di giorni che intercorrono fra le due date x ed y

Ad esempio: d��20, novembre,2009�, �3, dicembre,2009�� � 13. Questa me-trica viene frequentemente usata nelle applicazioni di tipo commerciale.Esempio 234. L’insieme String delle stringhe costituite da una sequenza di ca-ratteri di lunghezza fissata, può essere dotato della struttura di spazio metricodefinendo

d�x, y� � numero di caratteri diversi in x ed y in posizioni corrispondenti

Ad esempio: d�”romano”, ”ramino”� � 2. Questa metrica, detta di Hamming,risulta di una certa utilità in alcune applicazioni, ad esempio nella gestionedelle interrogazioni nelle basi di dati. Più avanti saranno presentate altremetriche sulle stringhe, più interessanti e più utili.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 429: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.2. DEFINIZIONI IN UNO SPAZIO METRICO 419

Esempio 235. L’insieme Z2 delle coppie �m,n� di numeri interi può esseremetrizzato mediante la metrica del cavallo degli scacchi definendo la distanzafra due caselle di coordinate �m1, n1� e �m2, n2� come il minimo numero dimosse del cavallo per spostarsi da una all’altra.Esempio 236. Nell’insieme C��a, b�� delle funzioni reali di una variabile realedefinite e continue nell’intervallo �a, b� si possono definire delle metriche comesegue:

d1�f, g� � maxx>�a,b� Sf�x� � g�x�Sd2�f, g� � S

b

aSf�x� � g�x�S dx

27.2 Definizioni in uno spazio metrico

La nozione di spazio metrico rappresenta una naturale generalizzazione dell’u-suale concetto di distanza fra due punti (della retta, del piano o dello spazio).Per tradizione e per ragioni tipografiche uno spazio metrico viene solitamenterappresentato graficamente con riferimento al piano usuale. Tale modalitàdi rappresentazione offre il vantaggio di suggerire delle importanti definizioniproprio tratte da usuali concetti del piano usuale, quali segmenti, diametri,linee, ... .

In un generico spazio metrico (in particolare nel piano punteggiato carat-terizzato dalla distanza euclidea, dal quale si prende spunto per generalizzare)molte entità geometriche quali segmenti, circonferenze, rette, possono esse-re definite come luogo geometrico (di punti), ossia come insieme di punti delpiano soddisfacenti ad una data proprietà. Si prende, per comodità, unaproprietà facilmente indagabile, basata sulla nozione di distanza; lasciandosiguidare dalle analoghe definizioni nel piano, si possono allora definire le rette,i segmenti e le circonferenze come segue:

DEFINIZIONE 9. In uno spazio metrico �E,d� dicesi circonferenza di cen-tro x0 > E e raggio r > R� l’insieme dei punti equidistanti r dal centro x0, ossial’insieme �x > E � d�x,x0� � r�e dicesi cerchio o disco di centro x0 > E e raggio r > R� l’insieme

�x > E � d�x,x0� B r�L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 430: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

420 CAPITOLO 27. METRIZZARE

Dicesi diametro di un sottoinsieme A di uno spazio metrico �E,d� il numero

diam�A� � supx,y>A d�x, y�Un insieme dicesi limitato se ha diametro finito.Dicesi segmento di estremi a ed b il luogo geometrico dei punti x tali che

d�x, a� � d�x, b� � d�a, b�Dicesi retta passante per i due punti a, b > E il luogo geometrico dei puntix > E tali che, posto α � d�a, x�, β � d�b, x�, γ � d�a, b�, si ha

max�α,β, γ� � �α � β � γ�~2Esempio 237. La figura che segue illustra il disco di Z2 di centro �0,0� e raggio1 con la metrica del cavallo.

••

••

27.3 Figure in uno spazio metricoCoerentemente con la terminologia della geometria, si chiama figura un insiemedi punti di uno spazio metrico. Ad esempio sono figure le seguenti: gli insiemisingoletti formati da un solo punto dello spazio metrico; le circonferenze, lerette, gli insiemi dei punti delimitati da una circonferenza.

In generale l’insieme delle figure di uno spazio metrico �E,d� è un insieme,che viene denotato con FE , ed è costituito da ³�E�, insieme delle parti diE. Vogliamo ora definire dei criteri per stabilire la distanza fra due generichefigure, ossia vogliamo metrizzare l’insieme FE . Per ottenere una funzione cherispetti gli assiomi di spazio metrico dobbiamo limitarci a considerare figurenon vuote e limitate. Basandosi sulla funzione δ che definisce la distanza fraun punto ed un insieme, si può definire la distanza fra due qualsiasi figureadottando la seguente

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 431: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.3. FIGURE IN UNO SPAZIO METRICO 421

DEFINIZIONE 10. Sia �E,d� uno spazio metrico, FE l’insieme delle figuredi E, δ � E �FE � R la funzione definita da δ�x,A� def

� infy>A d�x, y�. Dicesimetrica di Hausdorff la funzione dH � F2

E � R definita da

dH�A,B� def� max�supx>Aδ�x,B�, supy>Bδ�y,A��

Esempio 238. L’insieme delle entità geometriche del piano risulta metrizzatoconsiderando la metrica indotta dalla metrica euclidea mediante la definizionedi distanza fra due insiemi di uno spazio metrico. La figura 27.2 illustra ladistanza euclidea fra due figure rettangolari.

qqPPPPPPP

Figura 27.2: Distanza fra due figure.

Dato uno spazio metrico E, un sottoinsieme A b E, un punto x > E, laprecedente definizione di distanza fra figure suggerisce una coerente definizionedi distanza fra x ed A, definita da

δ�x,A� def� dH��x�,A�

ossiaδ�x,A� def

� infy>A d�x, y�In pratica, δ�x,A� rappresenta la distanza del punto di A più vicino ad x. Adessere rigorosi, la scrittura δ�x,A� risulta impropria, data la non omogeneitàdegli argomenti x ed A; si riacquista la coerenza formale intendendo questascrittura come una abbreviazione di δ��x�,A�.Esempio 239. Definita la distanza fra due punti, risulta conseguentementedefinita la distanza fra due qualsiasi altre entità geometriche (punto, retta,segmento, circonferenza, ...) secondo il seguente prototipo:

dist � G2� R

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 432: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

422 CAPITOLO 27. METRIZZARE

27.4 Interrogazioni negli spazi metrici

Gli insiemi dotati di una struttura di spazio metrico costituiscono un ambienteideale dove eseguire delle interrogazioni basate su un criterio di similarità; que-ste forme di elaborazione possono essere considerate come una generalizzazionedei procedimenti di ricerca basati sul criterio di uguaglianza.

Dato un sottospazio A di uno spazio metrico E ed un elemento x0 > E, leforma più tipiche di interrogazioni assumono le seguenti forme:

Q1: Determinare l’elemento x > A più vicino a x0.

Q2: Assegnato un numero naturale positivo k, determinare i k elementi di Apiù vicini a x0.

Q3: Fissato un numero reale positivo r (raggio) determinare gli elementi diA che hanno una distanza da x0 inferiore o uguale a r.

27.5 Criteri per definire la distanza

In molte applicazioni un criterio utilizzato per definire distanza fra due ele-menti consiste nel trasformare un elemento nell’altro e misurare la complessitàdella trasformazione; a questo scopo viene prefissato un insieme di trasforma-zioni elementari e si definisce come distanza il minor numero di trasformazionielementari necessario per trasformare un elemento nell’altro. Per garantire lacondizione di simmetria della metrica, ogni operazione elementare di trasfor-mazione, nell’insieme delle trasformazioni elementari ammesse, ha una simme-trica operazione (ad esempio: inserimento-eliminazione, alza-abbassa, ruota asinistra-ruota a destra). Questo metodo per la definizione della distanzadà luogo ad interessanti algoritmi per il calcolo della stessa; tali algoritmi sibasano su una particolare tecnica detta programmazione dinamica.

27.6 Metriche sulle stringhe

Una tipica funzione degli elaboratori di testi è costituita dalla funzione dicorrezione automatica che consiste nel ricercare in un dizionario le parole, se-gnalando quelle non appartenenti al dizionario. Una funzionalità collegataa questa consiste nel proporre un insieme di possibili parole (del dizionario)vicine alla parola non ritrovata nel dizionario, in modo da suggerire allo scri-vente delle opzioni sulla scelta della parola da inserire al posto di quella nonritrovata. Problemi analoghi sorgono in biologia molecolare per determinare

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 433: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.6. METRICHE SULLE STRINGHE 423

il grado di similarità di due sequenze di DNA, nei sistemi di riconoscimentovocale e nei sistemi basati sulla ricerca di similarità tra immagini, suoni, testi,etc. Tutte queste problematiche possono essere uniformate, definite in modopreciso e risolte dotando l’insieme delle stringhe di una struttura di spaziometrico.

Applichiamo ora le precedenti considerazioni relative agli spazi metrici alcaso in cui l’insieme E sia costituito dall’insieme delle stringhe. In questocaso il concetto di distanza fra stringhe esprime un indice di similarità fra duestringhe.

Si possono adottare diversi criteri per misurare la distanza fra due strin-ghe. Per motivazioni di carattere pratico si considera una particolare classedi funzioni di distanza che fanno riferimento a delle funzioni di trasformazionefra stringhe. Fra queste le più interessanti e frequenti sono le seguenti:

I : inserimento nella stringa s alla posizione k del carattere c. In nota-zione funzionale si scrive I�s, k, c�. Ad esempio, inserendo nella stringa”libro” alla posizione 4 il carattere ’e’ si ottiene la stringa ”libero”,ossia I�”libro”,4, ’e’� � ”libero”.

D: cancellazione dalla stringa s del carattere di posizione k. In notazionefunzionale si scrive I�s, k, c�. Ad esempio, cancellando dalla stringa”libero” il carattere di posizione 4 si ottiene la stringa ”libro”, ossiaD�”libero”,4� � ”libro”.

S: sostituzione nella stringa s del carattere di posizione k con il caratterec. In notazione funzionale si scrive S�s, k, c�. Ad esempio, sostituendonella stringa ”libro” il carattere di posizione 3 con il carattere ’t’, siottiene la stringa ”litro”, ossia S�”libro”,3, ’t’� � ”litro”.

T : trasposizione nella stringa s del carattere di posizione k con il carat-tere successivo. In notazione funzionale si scrive T �s, k�. Ad esem-pio, trasponendo nella stringa ”capra” il carattere di posizione 3 con ilsuccessivo), si ottiene la stringa ”carpa”, ossia T �”capra”,3� � ”carpa”.

Siamo ora pronti per dare la seguente

DEFINIZIONE 11. Fissato un insieme T di operazioni di trasformazione frastringhe, dicesi distanza fra due stringhe x ed y il minor numero di operazionidi trasformazione necessarie e sufficienti per trasformare la stringa x nellastringa y.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 434: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

424 CAPITOLO 27. METRIZZARE

Per opportuni insiemi T di funzioni di trasformazione la nozione di distanzasopra definita costituisce una funzione soddisfacente agli assiomi di spaziometrico. I casi più interessanti sono di seguito elencati.

Distanza di edit o Levenshtein : si ottiene questa metrica, denotata condE , assumendo T � �inserimento, cancellazione, sostituzione�. Si puòdimostrare che tale funzione di distanza soddisfa agli assiomi di spaziometrico. Questa metrica, introdotta nel 1965 dallo scienziato russo Vla-dimir Levenshtein, viene utilizzata per determinare il grado di similaritàdi due stringhe; l’importanza di questa metrica è dovuta al fatto cheessa esprime il numero di errori di battitura che separano una stringa(errata) da un’altra (corretta). I tipici errori atomici di digitazione contastiera sono i seguenti:

• digitazione di un tasto in più• mancata digitazione di un tasto• digitazione di un tasto sbagliato

Distanza di Hamming : prendendo T � �sostituzione� ed assumendo l’i-potesi SxS � SyS si ottiene la distanza di Hamming fra due stringhe, deno-tata solitamente con dH ; essa rappresenta il numero di caratteri in cui ledue stringhe si differenziano. Ad esempio, dH�”lavoro”, ”tavolo”� � 2.

Distanza della più lunga sottosequenza comune : sono ammesse le ope-razioni T � �inserimento, cancellazione�. Il nome di questa funzionedi distanza deriva dal fatto che essa si basa sulla lunghezza della piùlunga sequenza di caratteri accoppiabili fra le due stringhe ed esprimeil numero di caratteri non accoppiabili. Pertanto, vale evidentementela relazione d�x, y� B SxS � SyS. Ad esempio, d�”calibro”, ”colore”� � 7come si desume dal seguente schema di corrispondenza fra i caratteri.

c o l o r e

c a l i b r o

���

27.7 Calcolo della distanza di editNel paragrafo precedente abbiamo visto che la distanza di edit fra due strin-ghe è definita come il minor numero di operazioni di inserimento, cancella-zione, sostituzione di caratteri necessarie a trasformare una stringa nell’altra.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 435: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.7. CALCOLO DELLA DISTANZA DI EDIT 425

Il seguente algoritmo, adottando la tecnica della programmazione dinamica,permette di determinare la distanza di edit fra due stringhe e di determina-re le sequenze minimali di operazioni elementari di edit che permettono ditrasformare una stringa in un’altra.

Siano x � x1 . . . xm, y � y1 . . . yn due stringhe. Per trasformare x in y sipuò adottare una delle seguenti tre trasformazioni:

• accodare yn alla fine di x : x � x1 . . . xmyn e poi trasformare x1 . . . xm

in y1 . . . yn�1

• eliminare xm da x : x � x1 . . . xm�1 e poi trasformare x1 . . . xm�1 iny1 . . . yn

• cambiare xm in yn (se diversi): x � x1 . . . xm�1yn e poi trasformarex1 . . . xm�1 in y1 . . . yn�1

Ciò suggerisce uno schema algoritmico di tipo ricorsivo caratterizzato dal se-guente sottoproblema di trasformazione di un prefisso di x in un prefisso diy:

Trasformare x1 . . . xi in y1 . . . yj

Per la soluzione di questo sottoproblema costruiamo una matriceM�0..m��0..n�definita come segue (gli indici 0 corrispondono alla stringa vuota):

M�i��j� � ¢¦¤minimo numero di operazioni elementari di edit richieste pertrasformare x1 . . . xi in y1 . . . yj , per ogni 0 B i Bm,0 B j B n,ossia M�i��j� � dE�x1 . . . xi, y1 . . . yj�

La costruzione della matrice M si basa sulle seguenti proprietà:• M�0��j� � j, in quanto l’unico modo per trasformare la stringa vuota ε

in y1 . . . yj , consiste nell’aggiungere i j caratteri y1, . . . , yj

• M�i��0� � i, in quanto l’unico modo per trasformare x1 . . . xi nella stringavuota consiste nell’eliminare gli i caratteri x1, . . . , xi

• per i, j C 1: M�i��j� �min�M�i��j � 1� � 1, M�i � 1��j� � 1,M�i � 1��j �1� � c�xi, xj��, dove c�xi, xj� � 0 se xi � xj , 1 altrimenti

Dalla definizione della matrice M risulta che il valore M�m��n� costituiscela distanza di edit fra le due stringhe x ed y. Inoltre, ogni percorso dallaposizione �m,n� alla posizione �0,0� determina una sequenza di operazionidi edit che trasformano una stringa in un’altra. Si può dimostrare che lacomplessità di tempo dell’algoritmo è O�mn� e, per lunghezze equivalentidelle due stringhe, la complessità dell’algoritmo è quadratica.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 436: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

426 CAPITOLO 27. METRIZZARE

Esempio 240. Determiniamo la distanza di edit fra le due stringhe aabab nellastringa babb e la sequenza delle operazioni elementari che trasformano unastringa in un’altra. La trasformazione fra le due stringhe può essere descrittamediante il grafo riportato nella figura 27.3

babb

babab bab

babab

baabab abab

aabab

PPPPPPPq

�������)?

? ?

?

�������)

PPPPPPPq

D�4� I�3,b�

S�1,b�

D�4�D�2� D�3� D�1�

I�0,b� D�1�

Figura 27.3: Alcuni percorsi di trasformazione della stringa aabab in babb.

La matrice della distanza di edit fra le due stringhe aabab e babb è riportatanella tabella 27.4.

ε b a b bε 0 1 2 3 4a 1 1 1 2 3a 2 2 1 2 3b 3 2 2 1 2a 4 3 2 2 2b 5 4 3 2 2

Figura 27.4: Matrice della distanza di edit fra le due stringhe aabab e babb.I numeri in grassetto 1 e 3 sono stati calcolati in funzione dei corrispondentinumeri contigui evidenziati in sottolineato. Il numero 2, posto all’estremità inbasso a destra della matrice, costituisce la distanza di edit fra le due stringhe.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 437: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.8. CONVERGENZA NEGLI SPAZI METRICI 427

27.8 Convergenza negli spazi metriciNel contesto degli spazi metrici, con riferimento a molte problematiche di tipoalgoritmico (che saranno affrontate più avanti quando saranno analizzati i pro-cedimenti iterativi) acquista particolare importanza il concetto di convergenzadi una successione, oggetto della seguente definizione.

DEFINIZIONE 12. Sia �E,d� uno spazio metrico, �xk�k>N una successionedi E. Si dice che la successione considerata converge all’elemento x > E e siscrive

limnxn � x

oppurexn � x

se per ogni ε A 0 esiste k > N tale che d�xn, x� @ ε per ogni n A k.

Si può notare che la nozione di convergenza in uno spazio metrico puòessere fondata sulla nozione di convergenza topologica in R definendo che

xn � x in E se e solo se d�xn, x�� 0 in R

Intuitivamente, xn � x se al crescere di n l’elemento xn si avvicina indefinita-mente all’elemento x.

La seguente definizione stabilisce una importante caratterizzazione dellesuccessioni in uno spazio metrico.

DEFINIZIONE 13. In uno spazio metrico �E,d� una successione �xn�n>Ndicesi successione di Cauchy se per ogni ε A 0 esiste k > N tale che d�xm, xn� @ εper ogni m,n A k.

Si noti che la nozione di successione di Cauchy non fa alcun riferimentoall’elemento limite.

È evidente che ogni successione di Cauchy è convergente. Non è invecesempre vero il viceversa; ad esempio ci sono delle successioni di Cauchy in Qche non convergono ad alcun valore di Q (successioni che convergono ad unnumero irrazionale).

Si può prendere spunto dalla precedente osservazione per stabilire un’im-portantissima caratteristica degli spazi metrici, oggetto della seguente defini-zione.

DEFINIZIONE 14. Uno spazio metrico E dicesi completo se ogni succes-sione di Cauchy converge ad un elemento di E.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 438: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

428 CAPITOLO 27. METRIZZARE

27.9 Procedimenti iterativi indefinitiUna delle applicazioni più significative dell’Informatica riguarda i procedimentiiterativi della Matematica. Tali procedimenti vengono applicati per la ricercadi un elemento x appartenente ad un dato spazio di ricerca A e soddisfacentead una data condizione. Spesso l’elemento x cercato è un numero reale mapuò essere anche un punto (di una retta o del piano), una sequenza di numeri,una matrice o, più in generale, un elemento di uno spazio metrico.

La ricerca viene eseguita generando una successione �xk� � �x0, x1, . . . , xk, . . . �.Se, sotto opportune ipotesi, la successione �xk� converge ad un valore x, talevalore viene assunto come risultato della ricerca. Affinché abbia senso parlaredi convergenza, è necessario che lo spazio A sia dotato di una metrica. Ilmetodo algoritmico si dice convergente, secondo una data metrica d, al valorex se

limk�ª

d�xk, x� � 0

ossia se per ogni ε C 0, esiste n � �k A n�� d�xk, x� @ ε.Un passo del procedimento può essere visto come una trasformazione

Φ � xk ( xk�1

In generale, un algoritmo iterativo si presenta nella seguente forma:

Algoritmo 113 - Algoritmo iterativo1: xk � valore iniziale x02: while xk non è una sufficiente approssimazione do3: determina un altro xk�1 � Φ�xk�4: end while5: return xk

Notiamo che i parametri caratterizzanti un algoritmo iterativo sono i se-guenti:

• valore di partenza x0 : può essere considerato come un dato di inputoppure un dato intrinseco al procedimento (ricavabile, eventualmente,dagli altri dati di input).

• funzione di iterazione Φ : è caratteristica del metodo algoritmico adot-tato

• criterio di arresto del processo iterativo

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 439: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.10. CRITERI DI ARRESTO 429

27.10 Criteri di arrestoConsideriamo un generico procedimento iterativo per risolvere un dato pro-blema. Indicando con x un risultato del problema, è chiaro che, secondo lametrica adottata, deve risultare

limk�ª

xk � x

Anche nell’ipotesi di convergenza di un algoritmo, rimane un fondamentaleproblema che riguarda la scelta del criterio (stopping-test) da adottare nel-l’arresto del processo di elaborazione. In generale, il calcolo della successione�xk� viene iterato fino a quando ci si è sufficientemente avvicinati (secondo lametrica vigente) al valore x, ossia

dist�xk, x� B εcon ε sufficientemente piccolo. Questo criterio di arresto ha il difetto cheil valore x non è noto a priori e, pertanto, risulta impraticabile. Un crite-rio alternativo, che si dimostra efficace nella maggioranza dei casi, consistenell’arrestare il processo iterativo quando la soluzione si è sufficientementestabilizzata, ossia quando due valori consecutivi della successione �xk� sonosufficientemente vicini, ossia

dist�xk, xk�1� B εQuesto ultimo criterio si traduce nel seguente algoritmo:

Algoritmo 114 - Metodo iterativo stazionario lineare di primo grado1: xh � x02: xk � Φ�xh�3: while d�xh, xk� C ε do4: xh � xk

5: xk � Φ�xh�6: end while7: return xk

Un altro importante accorgimento riguarda la scelta della funzione di tra-sformazione Φ per avere una veloce convergenza. Inoltre, utilizzando i numeriin rappresentazione finita (come avviene nei calcolatori) servono delle precau-zioni che garantiscano la convergenza del metodo. Più avanti applicheremoquanto presentato in questo capitolo.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 440: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

430 CAPITOLO 27. METRIZZARE

27.11 L’errore nei processi di calcoloIl concetto di errore ha diverse significati: può avere una valenza morale quan-do denota una deviazione da una condotta ritenuta corretta; in matematicapuò consistere in una inconsapevole maldestra applicazione di una regola dicalcolo, di una formula o di un procedimento; nel seguito utilizzeremo tale ter-mine per denotare una conscia deviazione da un risultato considerato corretto;ad esempio, la frase La frazione 355

113 rappresenta il rapporto fra la lunghezza diuna circonferenza e del suo raggio con un errore inferiore a 0.01.

Un’esigenza sentita dalla matematica consiste nel misurare l’errore; questamisura dell’errore viene realizzata dotando l’ambiente di una metrica dist edesprimendo l’errore E come la distanza fra il valore effettivo ve ed un valoreapprossimato va:

E � dist�ve, va�Molto spesso l’ambiente di riferimento è costituito da un insieme numerico,nel qual caso la definizione precedente si esprime semplicemente con

E � Sve � vaSIn contesti costituiti da un insieme con struttura indotta da una generica

operazione X, l’errore viene definito mediante un elemento E di uno spazionormato soddisfacente alla condizione va XE � ve; in questo caso la misura èrappresentata da YEY.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 441: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.12. ESERCIZI 431

27.12 Esercizi

1. Dimostrare che i tre assiomi di uno spazio metrico possono essere sosti-tuiti dai seguenti due:

M1. d�x,x� � 0 per ogni x > EM2. d�x, y� B d�y, z� � d�z, x� per ogni x, y, z > E

2. Dimostrare che le metriche definite negli esempi riportati nel paragra-fo 27.1 soddisfano agli assiomi di spazio metrico.

3. Sia X un insieme finito e E � P�X� l’insieme delle parti di X. Di-mostrare che la seguente funzione su E � E definisce una metrica suE:

d�A,B� � SAS � SBS � 2SA 9BS4. Descrivere graficamente il cerchio e la circonferenza di raggio unitario

secondo le metriche riportate nel paragrafo 27.1.

5. Determinare la distanza fra due date �a1,m1, g1� e �a2,m2, g2�.6. Determinare i dischi di raggio 2 e di raggio 3 in Z2 con la metrica della

distanza del cavallo degli scacchi.

7. Determinare la distanza di Hausdorff fra due intervalli �a1, b1� e �a2, b2�della retta reale.

8. Evidenziare graficamente la distanza di Hausdorff fra i due segmenti αe β riportati nella seguente figura:

�����������

((((((((

(

α

β

���������

�����

������

αβ

9. Si considerino nel piano euclideo le seguenti tre coppie di circonferenze:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 442: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

432 CAPITOLO 27. METRIZZARE

&%'$����

&%'$����

&%'$����

Disegnare per ciascuno dei tre casi il segmento di lunghezza pari alladistanza fra le varie coppie di circonferenze. Esprimere tali distanze infunzione dei raggi r1 ed r2 delle coppie di circonferenze e della distanzad fra i centri. Dimostrare che tale distanza coincide con i casi in cui siconsiderino, al posto delle circonferenze, dei dischi pieni. Scrivere unalgoritmo per determinare la distanza fra due circonferenze.

10. Scrivere un algoritmo per determinare la distanza di Hausdorff fra unacoppia di elementi delle seguenti tipologie:

(a) punto - punto(b) punto - segmento(c) punto - retta(d) punto - circonferenza(e) segmento - segmento(f) segmento - retta(g) segmento - circonferenza(h) retta - retta(i) retta - circonferenza(j) circonferenza - circonferenza

11. Determinare il diametro di un insieme di punti in uno spazio metrico.

12. Un criterio spontaneo ed intuitivo per definire la distanza fra due figureA e B di uno spazio metrico consiste nel definire la seguente funzione:

δ�A,B� def� infx,y>A d�x, y�

Dimostrare che questa funzione, pur risultanto di indubbio interesse esignificato per molte applicazioni, non costituisce una metrica e quindinon permette di beneficiare di tutti i risultati e le proprietà validi per glispazi metrici. Suggerimento: osservare, ad esempio, che �A9B x g���δ�A,B� � 0�.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 443: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.12. ESERCIZI 433

13. Decidere se la seguente funzione sulle stringhe soddisfa agli assiomi dispazio metrico (con SαS viene denotata la lunghezza della stringa α):

d�x, y� � S SxS � SyS S14. Dimostrare che la funzione distanza di edit dE definisce effettivamente

una metrica, ossia soddisfa agli assiomi di spazio metrico.

15. Determinare nello spazio metrico ��a,b,c��, dE� il cerchio di raggio uni-tario e centro la stringa acaab.

16. Determinare la distanza di edit fra le due stringhe ah, bk.

17. Determinare la matrice di edit delle due stringhe "libro" ed "albero".Basandosi sulla matrice di edit, determinare la (minima) sequenza ditrasformazioni per trasformare una stringa nell’altra.

18. Scrivere un algoritmo per determinare la distanza di edit fra due stringhe.

19. Determinare la sequenza di operazioni che trasforma una stringa inun’altra secondo la distanza di edit.

20. Dati due testi (documenti) costituiti da parole, definire un indice diaffinità compreso fra 0 ed 1, che indichi la vicinanza fra i due docu-menti, valutando (opportunamente) la distanza di edit fra le parole deidue documenti. Tale indice deve valere 1 nel caso i due documentisiano uguali; nella valutazione si considerino solo le parole di almeno 4caratteri. Scrivere un algoritmo che risolve il problema.

21. Dimostrare che ammettendo l’insieme di trasformazioni T � �inseri-mento� non risulta sempre possibile trasformare una stringa x in unastringa y. Nel caso in cui sia possibile la funzione di distanza non ri-spetta comunque gli assiomi di spazio metrico (non è simmetrica). Ingenerale si ha d�x, y� � SyS � SxS oppure d�x, y� � �ª nel caso in cuila stringa x non sia trasformabile nella stringa y. Questa funzione d,pur non rispettando gli assiomi di spazio metrico, viene comunque dettaepisode distance.

22. Nonostante sia relativamente recente, il concetto di spazio metrico hacontribuito a molte e feconde applicazioni. Ne è testimonianza il seguen-te estratto di un discorso pronunciato dal matematico Mikhael Gromovin occasione della consegna del premio Balzan nel 1999:

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 444: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

434 CAPITOLO 27. METRIZZARE

Permettetemi di illustrarvi due esempi che hanno a che vedere conil mio campo d’attività. Cominciamo con la nozione corrente didistanza, riferita a due oggetti, due stati di un sistema fisico o bio-logico, o due idee astratte più o meno lontane fra loro. In questocaso, un matematico parlerebbe di uno spazio astratto degli oggettiin questione, detti punti, e considererebbe la distanza come l’attri-buzione di un determinato numero positivo a ogni coppia di puntinello spazio. Nello spazio tridimensionale che tutti conosciamo, ladistanza fra due punti è data dalla misura del segmento più cortoche li collega. Ma questa nozione avrebbe un valore puramenteaccademico se abitate in una zona montuosa, dove una definizionedi distanza senz’altro più appropriata sarebbe la lunghezza del per-corso più breve esistente fra due luoghi assegnati. Un esempio piùastratto è offerto dalla linguistica matematica: in questo caso, i no-stri punti sono delle frasi, vale a dire sequenze di lettere, ad esempioquelle dell’alfabeto inglese. Ora, supponiamo che vogliate definirela distanza fra due frasi. Naturalmente, la definizione deve essereadatta allo scopo che avete in mente. In questo caso, una definizioneestremamente semplice ma altrettanto utile è fornita dalla metricadi Hamming, secondo cui si prendono in considerazione frasi di unadeterminata lunghezza - diciamo, ad esempio, esattamente di centolettere. La distanza fra due frasi di questo tipo si misura contandole posizioni in cui esse presentano lettere diverse. Supponiamo oradi avere davanti a noi uno spazio metrico di questo tipo, vale a direuna collezione di numeri che rappresentano le distanze. Come pos-siamo ottenere un’immagine geometrica partendo da questi numeri?Supponiamo, ad esempio, di isolare 103 punti su una zona montuo-sa e scrivere una tabella di 106 numeri corrispondenti alle distanze(più precisamente �106

� 103�~2, in quanto la distanza è simmetricae si annulla su punti identici). Possiamo determinare, ad esempio,le dimensioni del monte più alto semplicemente concentrandoci suquesti 106 numeri? Oppure, disponendo di due tabelle cosiffatte,siamo in grado di dire se i due paesaggi sono simili o se invece sonodiversi? Quest’ultima domanda ci introduce al livello d’astrazio-ne successivo: abbiamo bisogno di definire una distanza fra spazimetrici assegnati. Dunque, gli spazi stessi sono considerati comepunti, che tutti insieme formano un grande oggetto astratto, lo spa-zio degli spazi metrici. Ma per quanto astratto possa sembrare, nonpossiamo fare a meno di occuparci di questi spazi nella matematicapura nonché nelle sue applicazioni. Ad esempio, se volessimo creareun programma informatico in grado di distinguere i volti umani o leespressioni del volto, dovremmo codificare ogni volto mediante unatabella di numeri, ad esempio, immaginandolo come una specie dipaesaggio con la distanza definita dal percorso più breve. Dopodi-ché, dovremmo definire in qualche modo intelligente una nozione di

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 445: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

27.12. ESERCIZI 435

distanza fra i volti. Il programma deve dirci se due volti, convertitiin spazi metrici, si assomigliano o meno. Naturalmente, non po-tremmo lavorare direttamente con i numeri. Nemmeno nello spaziolinguistico saremmo in grado di scrivere tutti i numeri necessari: so-no circa 26200 - molti di più di tutte le particelle elementari che sitrovano nell’universo! Perciò dovremmo sviluppare un linguaggio ingrado di esprimere caratteristiche essenziali degli spazi, i cosiddettiinvarianti metrici. Dopodiché, potremmo confrontare gli spazi sul-la base di questi invarianti. Non esiste una ricetta universale percreare tale linguaggio. Noi tentiamo ogni strada, attingendo libera-mente dall’intuizione geometrica basata sulla nostra esperienza dellospazio tridimensionale. Ciò ci permette una buona partenza, maabbiamo ancora molta strada da percorrere.

Analizzare le considerazioni sopra riportate evidenziando le idee im-portanti al fine di progettare un algoritmo per determinare il grado divicinanza fra due impronte digitali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 446: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

436 CAPITOLO 27. METRIZZARE

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 447: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

Capitolo 28

Formalizzare

È possibile concepire un sistema formaleche imiti tutta la realtà ? In senso la-to, la risposta potrebbe sembrare afferma-tiva. Si potrebbe pensare, ad esempio, chela realtà stessa non sia altro che un sistemaformale molto complicato.D. R. Hofstadter, Godel, Escher, Bach

Agli inizi del secolo scorso il matematico tedesco David Hilbert (1862-1943)introdusse il concetto di sistema formale con l’obiettivo di fornire dei criteririgorosi in base ai quali si potesse stabilire se una data dimostrazione mate-matica potesse essere considerata corretta. Sulla base dei brillanti risultaticonseguiti dalla logica simbolica, Hilbert pensò che tutte le asserzioni mate-matiche fossero decidibili e, con questa convinzione, intraprese il lavoro dicodificazione delle regole del ragionamento matematico. Il sogno di Hilbertvenne però infranto da alcuni sconcertanti risultati di Church, Gödel e Turingnegli anni trenta.

Nello studio dei sistemi formali ci si limita alla specificazione delle configu-razioni di simboli formalmente corrette, indipendentemente dal significato chepuò essere attribuito loro. Naturalmente, si cerca di definire come formal-mente corrette le configurazioni che risultano utili in base al significato che siintende attribuire loro.

I sistemi formali trovano interessanti applicazioni in diversi campi fra iquali: teoria dei linguaggi, programmazione logica, intelligenza artificiale,grafica.

437

Page 448: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

438 CAPITOLO 28. FORMALIZZARE

28.1 I sistemi formaliIn modo approssimativo un sistema formale può essere definito come un in-sieme di configurazioni costituite mediante simboli di un prefissato insieme,rispettando delle regole di costruzione. Un metodo per precisare le configura-zioni formalmente corrette consiste in una loro elencazione completa. Questometodo è praticabile solo se le configurazioni sono in un numero finito. Un’al-ternativa consiste nel precisare un insieme finito di simboli componenti, uninsieme finito di configurazioni di partenza corrette ed un insieme finito diregole mediante le quali generare tutte e sole le configurazioni ammissibili. Èproprio questo l’oggetto della seguente articolata definizione.DEFINIZIONE 15. Un sistema formale (in seguito s.f.) è una terna F ��A,S,R� dove A, detto alfabeto, è un insieme finito e non vuoto di elementidetti simboli o atomi; S è un sottoinsieme privilegiato di configurazionidi partenza, dette assiomi; R è un insieme finito di regole di inferenzao regole di riscrittura o produzioni che specificano come generare dellenuove configurazioni a partire dagli assiomi. Un’aggregazione di simboli èdetta configurazione. Si dicono teoremi le configurazioni che si ottengonoapplicando le regole di inferenza in un numero finito di passi, a partire daassiomi o teoremi precedentemente ricavati. Le configurazioni che non sonoottenibili vengono dette non-teoremi. Con Th�F� si denota l’insieme deiteoremi del s.f. F . Molto spesso le configurazioni in un sistema formale sonodelle sequenze di caratteri e vengono denominate stringhe o parole o frasio formule.

La figura 28.1 illustra schematicamente gli insiemi di configurazioni checostituiscono gli assiomi, i teoremi ed i non-teoremi.

'

&

$

%assiomi����teoremi non-teoremi-

Figura 28.1: Visione insiemistica degli assiomi, teoremi e non-teoremi.

Con la scritturax� y

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 449: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.1. I SISTEMI FORMALI 439

si denota la regola che stabilisce che dalla configurazione x si può ricavare laconfigurazione y, ossia la regola afferma che ”Se x è un assioma o un teorema,allora y è un teorema”. Questa notazione può essere generalizzata ad unascrittura della forma

x1, . . . , xn � y

Con riferimento a questa scrittura, gli assiomi o i teoremi x1, . . . , xn si diconopremesse e y la conclusione.

Se esiste una catena di regole della forma

x� y1 � y2 � � � �� y

si scrivex

� y

Se x, y, α, β sono stringhe (y, α, β eventualmente vuote), se x � y è unaregola e se αxβ è una stringa contenente come sottostringa la stringa x, allorasi può ricavare la stringa αyβ e si scrive

αxβ � αyβ

Una tale trasformazione viene detta derivazione.Qualora, per un dato sistema formale, la descrizione degli assiomi e/o

delle regole risulti troppo laboriosa o, quando gli assiomi e/o le regole sianoinfiniti, impraticabile, si ricorre a delle forme generalizzate mediante le qualisi descrivono delle intere classi di assiomi e regole (schemi di assiomi e schemidi regole). A questo scopo vengono utilizzate delle scritture che coinvolgonodelle variabili (dette anche simboli non terminali), ossia dei metasimbolinon appartenenti all’alfabeto di base del sistema formale. Questo meccanismorisulterà chiaro analizzando i sistemi formali descritti negli esempi che seguono.Esempio 241. Consideriamo il seguente sistema formale:

Alfabeto � �+,-�Assiomi � �-+�Regole � �x+� x+-,+x� +xx,x-+-y � x+y, x-+y � x+-y�

dove con x e y si denotano due qualsiasi stringhe di + e -. In questo caso isimboli x e y non sono simboli dell’alfabeto, ma variabili ausiliarie che deno-tano generiche stringhe di + e - e servono per definire le regole. Ad esempio,la regola x+� x+- precisa che se una stringa termina con + allora si può gene-rare una nuova stringa aggiungendo - alla fine. Consideriamo il problema di

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 450: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

440 CAPITOLO 28. FORMALIZZARE

dimostrare la stringa –, ossia generare tale stringa partendo dall’assioma -+ed applicando una sequenza di regole. La dimostrazione può procedere ap-plicando le regole del sistema formale fino ad arrivare a dimostrare la stringaobiettivo; se non si riesce, può significare che i tentativi sono stati male orien-tati, oppure può essere che la stringa obiettivo non sia raggiungibile. Questaseconda alternativa è dimostrabile solo se si riesce a ragionare fuori del siste-ma formale, ossia applicando dei ragionamenti che non si basano sulle regoledel sistema. Soluzione del problema: ci si può facilmente convincere che nonesiste alcuna regola che elimina il segno + dall’assioma di partenza; pertantola stringa – non è un teorema.Esempio 242. Una tipica applicazione dei sistemi formali è costituita dalla de-finizione di stringhe da accettarsi come formalmente corrette. Queste proble-matiche si incontrano nello studio delle grammatiche generative e dei linguaggiformali. Il seguente sistema formale definisce le stringhe di parentesi tonde (e ) bilanciate secondo le usuali convenzioni dell’Algebra:

Alfabeto � �(,)�Assiomi � �x�Regole � �x� (), x� (x), x� xx�

Si noti qui che l’unico assioma è costituito da una variabile; in casi comequesto, i teoremi del sistema formale sono costituiti dalle stringhe di simboliterminali dell’alfabeto ottenibili applicando le regole a partire dall’assioma editerando il procedimento fino a che si arriva ad una stringa composta di solisimboli terminali. Ad esempio, nel sistema formale appena descritto si puòderivare (dimostrare) la stringa (())(()()) mediante la seguente catena diderivazioni:

x� xx� (x)x� (())x� (())(x)

� (())(xx)� (())(()x)� (())(()())

Generalizzando la definizione di sistema formale data precedentemente,oltre ai sistemi formali basati su stringhe di caratteri, si possono consideraredei sistemi formali basati su altri elementi componenti, ad esempio figure.Esempio 243. Consideriamo il seguente sistema formale composto da figure;l’assioma è costituito da un quadrato; la regola generatrice è la seguente: Sud-dividi ciascun quadrato in quattro parti uguali mediante due segmenti paralleliai lati. Sono teoremi di questo sistema formale le seguenti figure:

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 451: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.2. SISTEMI FORMALI E SIGNIFICATO 441

Esempio 244. Nel contesto dei sistemi formali si presentano problematichedella seguente forma:

Dato il sistema formale S ed la stringa t, decidere se t è unteorema di S.

Problematiche di questo tipo possono essere affrontate mediante una MdT.In questo caso la descrizione del sistema formale S e la stringa t costituisconoi dati del problema (e pertanto vanno scritti inizialmente sul nastro). Larealizzazione di una siffatta MdT è stato uno dei sogni di molti matematici,filosofi e teorici informatici nei primissimi decenni del secolo scorso; tale sognovenne infranto nel 1931 ad opera di Gödel, come espresso nel suo famosoteorema di incompletezza.

28.2 Sistemi formali e significato

Un sistema formale si comporta come un generatore di stringhe. Per ren-dere utile ed interessante un sistema formale si cerca di attribuire ai teoremiformali un qualche significato; spesso si cerca di attribuire dei significati adalcune configurazioni di base e definire le regole di produzione dei teoremi for-mali in modo che riflettano un qualche significato. Si afferma che un teoremaè significativo se riflette, per una qualche interpretazione dei simboli che vicompaiono, una corrispondenza con una qualche porzione della realtà. L’at-tribuzione di significato avviene stabilendo una corrispondenza biunivoca frastringhe ed una porzione della realtà di interesse. Usando le parole di Hof-stadter: “una interpretazione è dotata di significato nella misura in cui riflettefedelmente un isomorfismo con il mondo reale”.

Poiché un sistema formale deve riflettere un qualche isomorfismo con larealtà, le regole d’inferenza devono generare, nell’interpretazione assunta, soloteoremi significativi. Il rischio di definire dei sistemi formali per i quali nonesistano delle interpretazioni significative è scongiurato poiché, come dice Hof-stadter, “di solito chi costruisce un sistema formale ha già una interpretazionein mente”. E se la costruzione del sistema formale avviene su suggerimentodel mondo reale, allora si tende a definirlo in modo che, nell’interpretazione

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 452: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

442 CAPITOLO 28. FORMALIZZARE

assunta, tutti i teoremi siano veri e tutti i non-teoremi falsi. Bisogna comun-que porre attenzione sul fatto che la manipolazione dei segni è indipendentedalla loro interpretazione.

Le funzioni di corrispondenza fra realtà (e gli oggetti reali) e sistema for-male (ed i teoremi), schematicamente descritte nella figura 28.2, vengono detterappresentazione ed interpretazione.

'

&

$

%

'

&

$

%realtà formale

sistema-

rappresentazione

interpretazione

Figura 28.2: Le funzioni di corrispondenza fra realtà e sistema formale.

Molto spesso la realtà di interesse è costituita da oggetti del modo dellamatematica quali numeri, espressioni, figure, frasi, teoremi (della matemati-ca) ed altri oggetti importanti per l’informatica quali programmi, macchine,algoritmi, sistemi formali. Sfruttando questa corrispondenza biunivoca, unsistema formale può essere visto come un generatore di oggetti matematici.

L’ambiente degli oggetti matematici (numeri, espressioni, equazioni, teo-remi, . . . ) rappresenta il terreno privilegiato di indagine mediante i sistemiformali. A tale scopo è necessario stabilire una corrispondenza fra gli oggettidella matematica e le configurazioni di simboli generate e manipolate nei si-stemi formali. Incominciamo, nei prossimi esempi, dagli oggetti matematicipiù elementari e primordiali, i numeri naturali 0,1,2, . . . .Esempio 245. Un numero naturale n può essere codificato in stringa usandogli usuali dieci caratteri cifra secondo la codifica decimale oppure mediante ledue cifre binarie 0 e 1, secondo la notazione binaria o, addirittura, usando unsingolo carattere, ad esempio |, mediante una sequenza di n � 1 caratteri |,riservando la stringa | per la codifica del numero zero. Similmente, si puòrappresentare una coppia �m,n� di numeri naturali mediante una sequenza dim�1 caratteri | separata con uno spazio (o altro carattere) da un sequenza din�1 caratteri | a seguire. Questa è una delle possibili notazioni per i numerinaturali (notazione unaria) e sarà utilizzata più avanti quando si utilizzerannole macchine di Turing. Naturalmente, al posto del simbolo | si potrebbe

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 453: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.2. SISTEMI FORMALI E SIGNIFICATO 443

prendere qualsiasi altro simbolo. In modo simile si possono definire dei sistemiformali per codificare i numeri naturali in altre basi di numerazione. Quelloche segue è un sistema formale che descrive l’insieme dei numeri naturali:

Alfabeto � �|�Assiomi � �|�Regole � �x� x|�

È immediato riconoscere che le configurazioni che si possono ottenere in que-sto sistema formale sono tutte le sequenze di un arbitrario numero di trat-tini. Quest’insieme di configurazioni può rappresentare i numeri naturali(inteso come insieme privo di ogni struttura algebrica) in base alla seguentecorrispondenza:

| � 0|| � 1||| � 2

...Se si vuole limitarsi alla rappresentazione dei numeri naturali positivi si puòadottare la seguente corrispondenza:

| � 1|| � 2||| � 3

...

I sistemi formali si prestano non solo a descrivere degli oggetti ma anchedelle operazioni.Esempio 246. I seguenti teoremi, costruiti sull’alfabeto �s,|�, possono essereinterpretati come operazione di successivo sui numeri naturali:

T1 � �s| � ||,s|| � |||,s||| � ||||, . . .�da interpretarsi come “il successivo di 0 è 1”, “il successivo di 1 è 2” e cosìvia.Un altro insieme di teoremi che possono essere interpretati come operazionedi successivo sui numeri naturali è il seguente:

T2 � �|-||,||-|||,|||-||||, . . .�In modo analogo a quanto visto nell’esempio precedente, si possono definiredei sistemi formali che rappresentano le quattro operazioni aritmetiche.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 454: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

444 CAPITOLO 28. FORMALIZZARE

Esempio 247. (sistema PQ di Hofstadter) Consideriamo un esempio di sistemaformale proposto da Hofstadter 1. L’alfabeto consiste di soli tre simboli: P, Q,-. Gli assiomi sono costituiti dalle stringhe definite mediante lo schema

xP-Qx-

dove x denota una generica stringa di caratteri -. Le regole di inferenza sonodescritte dal seguente schema

xPyQz � xPy-Qz-

dove x, y, z denotano generiche stringhe di trattini. In questo sistema formalesi possono generare, ad esempio, i teoremi che compaiono nella seguente catenadi produzioni:

-P-Q–� -P–Q–-

Per questo sistema formale una utile interpretazione consiste nel far corrispon-dere al segno P il significato di addizione, al segno Q il significato di ugualee ad una sequenza di trattini il corrispondente numero naturale positivo innotazione unaria.Esempio 248. In modo alternativo, ma equivalente, a quanto descritto nell’e-sempio precedente, l’operazione di addizione sui numeri naturali, rappresentatiin notazione unaria, può essere descritta mediante il seguente sistema formalei cui teoremi risultano di evidente interpretazione.

Alfabeto � �|,+,=�Assiomi � �|+|=|�Regole � �x+y=z � x+y|=z|, x+y=z � x|+y=z|�

dove x,y,z sono sequenze di |. Le regole sopra possono essere espressemediante l’unica regola x+y=z � y+x=z.

L’idea di sistema formale può essere adattata per generare oggetti reali giàinterpretati (e non semplicemente una loro codifica), come illustra il seguenteesempio.Esempio 249. Assumiamo il numero 1 come assioma e consideriamo il seguenteinsieme di regole di generazione sui numeri naturali:

x� x~2 se x parix� 3x � 1 se x dispari

1Douglas Hofstadter, Godel, Escher, Bach: An Eternal Golden Braid (1980)

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 455: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.3. DIMOSTRAZIONI NEI SISTEMI FORMALI 445

È immediato constatare che i teoremi di questo sistema formale sono i numeridell’insieme �1,2,4�. Questo sistema formale può essere generalizzato pren-dendo come assioma un generico numero naturale positivo. In questi casisi ottiene una sequenza di valori che termina la sua corsa sempre in 1 (e poiprosegue ciclicamente con 1 � 4 � 2 � 1 � 4 � 2 � . . . ). Tale situazione ènota con il nome di “problema del 3n � 1”.

28.3 Dimostrazioni nei sistemi formaliDimostrare un teorema in un sistema formale significa esibire i passi attraversoi quali si genera una data stringa, a partire dagli assiomi. Nel caso si trattidi un non-teorema bisogna dimostrare che non esiste alcun percorso; spessoquesta situazione viene realizzata ragionando esternamente al sistema formaleEsempio 250. Il sistema formale MU venne originariamente proposto da Hof-stadter nel libro già citato. I teoremi di questo sistema sono delle stringhesull’alfabeto �M,I,U�. L’unico assioma è costituito dalla stringa MI. Le regoledi generazione delle stringhe sono le seguenti quattro:

(a) Se una stringa termina con I, si può accodare U alla fine.

(b) Se una stringa inizia con M, si può accodare la sottostringa che segue taleM.

(c) Se in una stringa è presente la sottostringa III, si può sostituirla conuna U.

(d) Se in una stringa è presente la sottostringa UU, si può eliminarla.

Formalmente tale sistema può essere definito come segue:

Alfabeto = { M, I, U }

Assiomi = { MI }

Regole = { xI�xIU, Mx�Mxx, xIIIy�xUy, xUUy�xy }

dove x e y sono delle variabili che rappresentano delle generiche stringhecomposte da simboli dell’alfabeto.

Il problema consiste nel decidere se MU è un teorema del sistema MU, ossiase la stringa MU è generabile a partire dalla stringa MI applicando le regoleammesse. È evidente anche in questo caso che un ragionamento interno al

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 456: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

446 CAPITOLO 28. FORMALIZZARE

MI�

��

��+

QQQQQs

MIU���

MII�

��

@@@R

MIUIU�

QQ

QQQk

MIIII�

JJJ

MIIUJJJ

MIUIUIUIU MUI MIIIIIIII MIIUIIU

Figura 28.3: Generazione di alcune stringhe nel sistema MU.

sistema, ossia l’applicazione diretta delle regole può condurre alla soluzione(ossia alla generazione della stringa MU); nel caso in cui l’applicazione direttanon ci guidi al (supposto) teorema, rimane vivo il dubbio che MU possa nonessere un teorema del sistema; in questo caso qualsiasi applicazione meccanicadelle regole (ossia rimanendo all’interno del sistema) non può darci alcunainformazione e non ci rimane altro che uscire dal sistema. Si invita a ragionarea risolvere il problema proposto. Come suggerimento per la soluzione delproblema notiamo che ci sono regole che allungano e regole che accorciano. Aseguire è riportata la soluzione.

TEOREMA 9. MU ¶ Th�FMU�.Dimostrazione. Sia α una generica stringa sull’alfabeto {M,I,U}. Indichiamocon P �α� la proprietà che α contiene un numero di I non divisibile per 3.Vale l’implicazione �P �α�, α � β�� P �β�in quanto le regole del sistema non modificano la proprietà P . Inoltre P �MI�.Dunque P �t� per ogni t > Th�FMU�. Di conseguenza MU ¶ Th�FMU�.

Notiamo che questo teorema non appartiene a Th�FMU� ma al mondodella logica. I passaggi di questo teorema non sono formalizzati, ma non c’eraalcun bisogno in quanto, dovendo ragionare fuori dal sistema, abbiamo potutoscegliere un livello di formalizzazione (o non formalizzazione) che più ci facevacomodo.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 457: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.4. GIOCHI COME SISTEMI FORMALI 447

28.4 Giochi come sistemi formali

La definizione di sistema formale, essendo che le regole generative dei teoremipossono essere fissate con estrema libertà, può sembrare una sorta di giocovuoto, senza alcun legame con la realtà. Questo potenziale scollegamentodalla realtà permette di dare la seguente definizione. Si chiamano giochi isistemi formali che non hanno alcun legame con la realtà. In tali casi le regoledel sistema formale costituiscono le regole del gioco. I sistemi formali possonoessere usati per modellizare dei giochi fra due persone. Ad esempio gli scacchio giochi simili. Si parte da una configurazione e le trasformazioni (mosse)vengono proposte alternativamente dai due giocatori. Un gioco di solitario èanalogo: si vince se si raggiunge una configurazione vincente.Esempio 251. Il gioco degli scacchi può essere pensato come un sistema for-male nel quale i simboli dell’alfabeto sono i pezzi degli scacchi, l’assioma è laconfigurazione iniziale dei pezzi e le regole sono le regole di movimento dei pez-zi, nel contesto della configurazione della scacchiera. In questo caso i teoremisono le configurazioni potenzialmente raggiungibili nel corso di una partita ascacchi, muovendo i pezzi nel rispetto delle regole del gioco.

28.5 Gli L-sistemi

Nel 1968 il biologo e matematico danese Aristid Lindenmeyer ha ideato e stu-diato una particolare classe di sistemi formali adatti a descrivere l’evoluzionedi organismi multicellulari formati da filamenti lineari o ramificati (piante,fiori, alghe, . . . ). Tali formalismi vengono detti sistemi di Lindenmeyero, semplicemente, L-sistemi.

Gli L-sistemi sono dei sistemi di riscrittura che permettono di descrivere lamorfogenesi delle piante mediante un processo di riscrittura tipico dei sistemiformali. Gli L-sistemi sono dei particolari sistemi formali per i quali le regoledevono non ammettere alternative ed inoltre, ad ogni passo, le regole devonoessere applicate in modo forzato. Precisamente, un L-sistema è caratterizzatoda un assioma di partenza e da una o più regole di riscrittura. Ad ognipasso le regole di riscrittura vanno applicate localmente (ossia ad ogni simbolodella stringa) e parallelamente (ossia contemporaneamente ad ogni simbolodella stringa). Solitamente, per evidenziare l’assioma di un L-sistema si usascrivere in grassetto la testa della regola costituita dall’assioma.Esempio 252. L’L-sistema caratterizzato dall’assioma X e dalle regole di ri-scrittura X � Y, Y � XYZ, al primo passo di riscrittura si genera la stringa Y,al secondo passo la stringa XYZ, al terzo passo la stringa YXYZZ e così via.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 458: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

448 CAPITOLO 28. FORMALIZZARE

Esempio 253. L’L-sistema definito dalla regola di riscrittura F � F-F++F-Fgenera, ai primi passi del processo di riscrittura, le seguenti stringhe:

F

F-F++F-F

F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F

Stringhe come queste, all’apparenza insignificanti, risultano interessanti sevengono interpretate geometricamente, nell’ambito della cosiddetta graficadella tartaruga. Interpretando come segue i simboli di queste stringhe, siottengono delle figure note come graftali:

F : avanza di un tratto unitario

+ : ruota in senso orario di un angolo α fissato

- : ruota in senso antiorario di un angolo α fissato

Eventuali caratteri diversi da quelli sopra riportati, ausiliari alla descrizionedelle regole di riscrittura, vengono, in fase di interpretazione, trascurati e nonconsiderati. Con queste interpretazioni, assumendo come angolo di rotazioneun angolo di 60o, le stringhe sopra elencate possono essere geometricamentedescritte dalle seguenti curve (istanze della curva di von Kock) riportata nellafigura 28.4.

Figura 28.4: Le prime tre istanze della curva di von Koch.

Esempio 254. Nella figura 28.5 sono riportate due classiche figure ottenute condegli L-sistemi le cui regole di riscrittura sono riportate in corrispondenza diciascuna. α denota la misura dell’angolo di rotazione nell’interpretazione deisegni + e -.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 459: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.6. L-SISTEMI CON RAMIFICAZIONI 449

L � +RF-LFL-FR+ X � X+YF++YF-FX–FXFX-YF+R � -LF+RFR+FL- Y � -FX+YFYF++YF+FX–FX-α � 90o α � 60o

Figura 28.5: Sistemi formali che generano la curva di Hilbert (a sinistra) e lacurva di Peano-Gosper (a destra).

28.6 L-sistemi con ramificazioni

Negli L-sistemi, per descrivere delle strutture geometricamente composte daramificazioni vengono utilizzati i due simboli speciali [ e ] che vengono in-terpretati, rispettivamente, come inizio e fine della ramificazione. Con que-ste convenzioni, la stringa x1�y1�x2�y2� . . . xn�1�yn�1�xn rappresenta un alberoavente per fusto la sequenza di elementi x1, x2, . . . , xn e ramificazioni y1, y2,. . . , yn�1; tali ramificazioni possono essere a loro volta composte.

Esempio 255. La stringa a[b]c[d[e][f]]g può essere descritta graficamentemediante la figura 28.6.

6

6

6

����

����

-

6

a

c

g

b

d

fe

Figura 28.6: Rappresentazione grafica della stringa a[b]c[d[e][f]]g.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 460: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

450 CAPITOLO 28. FORMALIZZARE

Esempio 256. Nella figura 28.7 sono riportati alcuni esempi di piante graftaliottenute con degli L-sistemi descritti in corrispondenza di ciascuna; n indicail numero di iterazioni effettuate nell’applicazione delle regole ed α denotala misura dell’angolo di rotazione nell’interpretazione dei segni + e -. Talifigure, per risultare più realistiche, potrebbero essere eventualmente arricchitegraficamente con delle foglie alle estremità dei rami o con dei frutti o fioriopportunamente localizzati, con diversi spessori dei rami a seconda del lorolivello di perifericità. Ancora, per rendere più realistiche le piante che siottengono, si possono imporre delle ramificazioni verso sinistra e verso destraalternativamente di un dato angolo, eventualmente combinando l’uso di numericasuali per definire la lunghezza dei rami e l’angolo fra di loro.

F � F[+F][-F] X � F[+X]F[-X]+X F � FF+[+F-F-F]-[-F+F+F]F � FF

α � 10o α � 20o α � 20o

n � 4 n � 7 n � 9

Figura 28.7: Esempi di piante graftali.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 461: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.7. UNA MACCHINA PER GLI L-SISTEMI 451

28.7 Una macchina per gli L-sistemi

Progettiamo ora una macchina per gestire gli L-sistemi. Chiamiamo una talemacchina con il termine L-macchina. Il nucleo principale di una L-macchinaè costituito da un L-trasformatore di stringhe che agisce secondo lo schemaillustrato nella figura 28.8.

L-trasformatore-

--

{regole}

ss�

Figura 28.8: Schema di un L-trasformatore: ricevuto in ingresso un insiemedi regole di trasformazione ed una stringa s da trasformare, viene generata inuscita una stringa s� trasformata secondo le regole specificate.

Esempio 257. Data la stringa s � XYX e le regole di trasformazione �X �

XY,Y � aXX� si ottiene in uscita la stringa s� �XY aXXXY .La macchina-trasformatore descritta sopra costituisce il motore della L-

macchina descritta nella figura 28.9.

L-trasformatore-

--

-{regole}

sn s�

L-macchina

r6

Figura 28.9: Schema di una L-macchina: ricevuta in ingresso una stringa sda trasformare ed un insieme di regole di trasformazione, il numero n deipassi di trasformazione da applicare, viene prodotta in uscita una stringa s�trasformata secondo le regole specificate.

Un L-trasformatore ed una L-macchina come descritte sopra possono essererealizzate mediante una funzione o blocco senza stato, a cui vengono forniti idati in ingresso, producendo in uscita la stringa elaborata. In alternativa sipossono realizzare delle macchine con stato, costituito dall’insieme delle regole

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 462: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

452 CAPITOLO 28. FORMALIZZARE

di trasformazione che governano la trasformazione della stringa in ingresso. Inquesto caso le macchine vengono inquadrate come oggetti e le regole possonoessere specificate come parametri al costruttore delle macchine oppure possonoessere settate successivamente alla costruzione, mediante un apposito metodod’istanza. In entrambi i casi, la riproduzione grafica della stringa elaborataavviene mediante un apposito blocco collegato sequenzialmente alla macchinache genera la stringa.

28.8 Esercizi

1. Un sistema è costituito da fiori (F ) e rami (R). Modellare mediante unL-sistema la seguente situazione:

• si parte da un fiore

• ad ogni passo:– un fiore diventa un ramo– ogni ramo produce un fiore

Descrivere l’evoluzione del sistema in modo grafico. Calcolare quantifiori e quanti rami sono presenti al passo n.

2. Con riferimento ad un generico sistema formale, precisare cosa significa-no le seguenti affermazioni:

(a) T è un non-teorema.(b) T non è un teorema.(c) Il teorema T non è dimostrabile.

Fra queste affermazioni, stabilire quali sono fra loro equivalenti.

3. Stabilire in cosa si differenziano le seguenti due attività:

(a) Dimostrare che T è un teorema del sistema formale F.(b) Generare il teorema T a partire dagli assiomi del sistema formale

F.

Dire se il ragionamento interno e/o esterno al sistema formale può esseredi aiuto nello svolgimento di queste due attività.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 463: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.8. ESERCIZI 453

4. Si consideri il sistema formale dove l’insieme delle configurazioni è costi-tuito dall’insieme dei punti di un segmento AB, l’insieme degli assiomiè costituito dagli estremi A,B del segmento; è fissata inoltre un’unicaregola, a due premesse,

P,Q�M

dove M è il punto medio del segmento PQ. Con riferimento al sistemaformale sopra definito, dire come devono essere interpretate le seguentiaffermazioni:

(a) T è un teorema.(b) T è un non-teorema.(c) Dimostrare il teorema T .(d) Il teorema T non è dimostrabile.

Mediante degli alberi di dimostrazione, dimostrare i teoremi C, D, E,F , essendo AC �

12 AB, AD �

34 AB, AE �

38 AB, AF �

516 AB. Quali

sono i non-teoremi di questo sistema formale?

5. Si hanno tre monete disposte allineate su un piano. Si parte dalla dispo-sizione iniziale Testa-Croce-Testa e si vuole raggiungere la disposizionefinale Croce-Testa-Croce. Sono ammesse le seguenti mosse:

(a) si può rivoltare la moneta centrale quando e quante volte si vuole(b) si può rivoltare una delle due monete laterali se e solo se le altre

due hanno la stessa faccia.

Descrivere un adeguato sistema formale che modellizzi il gioco proposto.Trovare una soluzione. Dimostrare che ogni configurazione è raggiun-gibile. Suggerimento: descrivere mediante i nodi di un grafo le diversepossibili disposizioni e mediante degli archi le possibili transizioni diconfigurazione.

6. Analizzare il sistema formale descritto nell’esempio 243, modificandocome segue la regola: Suddividi un quadrato in quattro parti ugualimediante due segmenti ortogonali fra loro e paralleli ai lati.

7. Si si definiscano due sistemi formali che producano gli insiemi di teoremiT1 e T2 descritti nell’esempio 246.

L.Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 464: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

454 CAPITOLO 28. FORMALIZZARE

8. Con riferimento al sistema formale costituito del gioco degli scacchi de-scritto descritti nell’esempio 251, stabilire quali sono i simboli dell’al-fabeto, cosa sono gli assiomi, i teoremi, i non-teoremi e cosa significadimostrare un dato teorema. Esprimere le affermazioni riportate nel-l’esercizio 3 che precede, particolarizzandole a questo caso di sistemaformale. Stabilire quali delle seguenti decisioni possono essere risolte inbase all’analisi di una data configurazione del sistema:

(a) il Bianco ha lo stesso numero di pedoni del Nero(b) il Bianco ha effettuato l’arrocco(c) la posizione del bianco è preferibile

9. Con riferimento alla terza figura riportata nell’esempio 256, spiegareperchè, nonostante l’apparente bilanciamento di rotazioni a destra (+)e rotazioni a sinistra (-) nelle regole di definizione della figura, l’alberorisulta piegato a destra.

10. Spiegare perché non è possibile dimostrare, in un dato sistema formale,che una data configurazione non è un teorema, ragionando solo con leregole del sistema formale considerato.

11. Definire un sistema formale i cui teoremi siano costituiti dalle stringhedi cifre rappresentanti i numeri naturali espressi in notazione binaria.

12. Definire un sistema formale i cui teoremi siano interpretabili come mol-tiplicazione sui numeri naturali.

13. Definire un sistema formale le cui configurazioni siano costituite dallestringhe palindrome di + e -, ossia dall’insieme {+, -, ++, –, +++, +-+,–-, -+-, ++++, +–+, ...}. Dimostrare, nel sistema formale descritto, ilteorema +-++-+.

14. Definire un sistema formale F le cui configurazioni sono costituite dallestringhe composte da un numero pari di simboli +. Dimostrare, nelsistema formale F, il teorema ++++++.

15. Definire un sistema formale i cui teoremi sono le stringhe di + e -palindrome.

16. Definire un sistema formale i cui teoremi sono costituiti da stringhe diparentesi tonde bilanciate, disposte a buccia di cipolla; ad esempio sonoteoremi i seguenti: (), (()),((())).

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 465: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.8. ESERCIZI 455

17. Definire un sistema formale i cui teoremi siano costituiti dalle sequenzedi parentesi bilanciate, in modo da rispettare le usuali regole delle espres-sioni algebriche; ad esempio sono teoremi le seguenti configurazioni: (),()(), (())() mentre non lo sono le seguenti: ())(, ((()). Descrivereun algoritmo per decidere, scandendo una sola volta da sinistra a destra,se una data configurazione di parentesi è un teorema del sistema formalesopra definito.

18. Definire un L-sistema che generi delle figure ad onda quadra, come laseguente:

19. Definire un L-sistema che generi un albero binario aventi rami lunghi lametà del ramo padre; le prime tre istanze sono descritte nella figura chesegue.

���

���

@@@

@@@

20. Codificare mediante stringhe dell’alfabeto �F,+,-,[,]� le figure sottodescritte, adottando la tecnica degli L-sistemi.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 466: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

456 CAPITOLO 28. FORMALIZZARE

21. Una quadrifolia è una stella di mare avente 4 steli di lunghezza unitaria,disposti ad angolo retto, come descritto nella seguente figura:

Ad ogni ciclo di vita ogni estremità di una quadrifolia genera 3 stelidisposti ad angolo retto, ciascuno lungo metà del ramo padre. Descrivereun sistema formale che, con l’interpretazione sopra descritta, generi dellequadrifolie, ai vari stadi dei cicli di vita.

22. Definire un L-sistema che generi il fiocco di von Kock ottenuto generandola curva di von Kock su ciascuno dei tre lati di un triangolo equilatero.

23. Definire un L-sistema che generi il triangolo di Sierpinski, una figuracostituita da triangoli equilateri: l’assioma è rappresentato da un trian-golo equilatero; ad ogni passo, all’interno di ogni triangolo generato alprecedente passo, viene generato un nuovo triangolo che genera altri 3triangoli, come illustra la figura che segue che riporta alcuni passi dellagenerazione di un triangolo di Sierpinski.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018

Page 467: Pensiero Computazionalelnx.istitutosuperiorefeltre.it/wp/wp-content/uploads/... · 2019-03-03 · Quaderni di Informatica Pensiero Computazionale Luigino Calvi Istituto Superiore

28.8. ESERCIZI 457

24. Una variazione del triangolo di Sierpinski permette di ottenere una figuraricorsiva costituita da un’unica spezzata, costruita come segue: la figurabase è costituita da una spezzata composta da 3 lati di uguale lunghezzaformanti fra loro un angolo di 120 gradi, come indicato nella figura chesegue. Ad ogni passo ciascun segmento viene sostituito dalla figura basesottesa dal lato stesso. Descrivere la generazione della figura medianteun L-sistema. Determinare la lunghezza l�n� della figura al passo n-esimo. Dimostrare che tale lunghezza tende ad infinito al crescere din.

L. Calvi - Quaderni - Pensiero Computazionale - Feltre - 2018