Informatica in C++ e Java
Informatica in C++ e Java
Edizione OPENSCHOOL
1 LIBRODITESTO
2 E-BOOK+
3
4
RISORSEONLINE
PIATTAFORMA HOEPLI
Informatica in C++ e Java
PAOLO CAMAGNI RICCARDO NIKOLASSY
Informatica in C++
e Java
La programmazione imperativa in C, C++ e Java
La programmazione ad oggetti in C++ e Java
Le interfacce grafiche in C# e Java
La programmazione del web in HTML e Javascript
[Link]
Indice
Codificare l’iterazione 47
Unità 1 Iterazione indefinita con Flowgorithm 48
Dal problema al programma Iterazione definita con Flowgorithm 55
Diagrammi di flusso e programmazione strutturata:
il teorema di Böhm e Jacopini 57
Verifica... le competenze 59
Verifica… i saperi essenziali 61
Simulazione guidata di compito in classe 62
Scuola–lavoro 63
CLIL 64
Area digitale
• Origini del problema del contadino, il lupo, la capra e il cavolo
• Da dove viene il termine algoritmo?
• Soluzione del problema dell’annaffiatoio
L 1 Dal problema all’algoritmo 2 • La torre di Hanoi e la fine del mondo
I problemi e la loro soluzione 2 • Esempio di composizione errata delle figure fondamentali
Un problema con la bilancia 5
Il concetto di algoritmo 7 • Esercizi interattivi
Algoritmi ed esecutori 8
Verifica... le conoscenze 10 • Esercizi per l’approfondimento
Verifica... le competenze 11
V
Indice e presentazione
• Esercizi interattivi
Unità 3
La selezione
L 1 L’istruzione di iterazione
precondizionata 154
Il ciclo a condizione iniziale: while … {...} 154
La trace table o tabella di traccia 157
Calcolo del massimo comun divisore (MCD)
con l’algoritmo di Euclide 161
Verifica... le conoscenze 163
Verifica... le competenze 164
L 2 L’istruzione di iterazione
postcondizionata 165
L 1 L’istruzione di selezione semplice Il ciclo a condizione finale: do {...} while 165
e doppia 116 Contatore e accumulatore 167
Percorsi alternativi nel programma 116 Generazione di numeri casuali 169
Verifica... le conoscenze 124 Verifica... le conoscenze 173
Verifica... le competenze 125 Verifica... le competenze 174
VI
Indice e presentazione
Area digitale
Unità 5
• Esercizi interattivi
La scomposizione in
sottoprogrammi
Unità 6
Dati strutturati e algoritmi
classici
VII
Indice e presentazione
L 7 I record e le tabelle 312 • La classe File in Java: i suoi metodi e la sua gerarchia
Introduzione ai dati strutturati 312 • File binari in Java e serializzazione
I record e le tabelle in C++ 314
I record in Java 316
• Esercizi per il recupero e il rinforzo
Verifica... le competenze 320
Verifica... i saperi essenziali 321
Simulazione guidata di compito in classe 322
Unità 8
Scuola-lavoro 323 La programmazione a oggetti
CLIL 324 e le interfacce grafiche
Area digitale
• Un esempio con i vettori di caratteri in C++
• Cosa avviene quando si modifica una stringa
VIII
Indice e presentazione
L 4 Ereditarietà, polimorfismo
e relazioni tra le classi 390
Generalizzazione ed ereditarietà 390
Definizioni 393
Ereditarietà: modalità operative 395
Realizzazione di una gerarchia 399
Ereditarietà multipla 404 L 1 Le variabili dinamiche in C e C++ 446
Verifica... le competenze 407 Introduzione 446
Il tipo puntatore 447
L 5 Ambiente visuale e interfaccia Operazioni con i puntatori 451
grafica 408 Vettori e puntatori 452
L’interfaccia utente 408 Composizione di tipi puntatori 454
Elementi di una interfaccia grafica 410 Allocazione e deallocazione dinamica di memoria
L’interfaccia grafica in C# 411 in C++ 455
L’interfaccia grafica in Java 412 Verifica... le competenze 459
Realizzare il primo progetto visuale in C# 413
Realizzare il primo progetto visuale in Java 414 L 2 La gestione dinamica della memoria
Verifica... le competenze 419 con la classe Vector 461
Le strutture dati 461
L 6 I componenti dell’interfaccia grafica 420 Gli array dinamici 465
I controlli 420 Un’applicazione: la gestione delle collisioni
Il pulsante di conferma 421 in una hash table 469
La casella di controllo 423 Verifica... le competenze 472
I pulsanti di opzione 425
I combo box 428 L 3 Le liste concatenate in C++ 473
I list box 430 Le liste: strutture di record collegate
Le immagini in C# 433 con puntatori 473
Le immagini in Java 435 Implementazione delle liste con puntatori
Verifica... le competenze 437 espliciti 474
Verifica... i saperi essenziali 439 Implementazione delle liste con la classe List 482
IX
Indice e presentazione
X
Indice e presentazione
• Esercizi interattivi
XI
Indice e presentazione
Presentazione
Tutti gli algoritmi sono presentati mediante la progettazione top-down, riportando più affinamenti
successivi fino a giungere alla codifica in pseudolinguaggio e alla sua rappresentazione con flow
chart: la codifica espressa in più di un linguaggio di programmazione, cioè proponendo in
parallelo il linguaggio C++/C# e Java, si pone come obiettivo di far sviluppare nello studente un
pensiero critico di analisi, secondo la teoria del pensiero computazionale.
Le reti di computer e il significato di Internet e del Web sono l’argomento che introduce il lin-
guaggio HTML. Vengono presentati i fogli di stile e HTML 5 per definire il layout dei siti Web.
La programmazione di app per dispositivi mobili viene esposta mediante l’utilizzo di Android
Studio.
Ogni Unità si conclude con una nuova sezione per la preparazione al compito in classe e una
simulazione operativa delle attività previste dai PCTO, Percorsi per le Competenze Trasversali e
per l’Orientamento (ex Alternanza Scuola-Lavoro), oltre a una scheda CLIL.
Le finalità e i contenuti dei diversi argomenti affrontati sono descritti dagli obiettivi generali e
dalle indicazioni In questa lezione impareremo; alla fine di ogni lezione per lo studente sono
presenti esercizi, anche interattivi, di valutazione delle conoscenze e delle competenze raggiunte
suddivisi in domande a risposta multipla, a completamento, esercizi con procedure guidate.
XII
Indice e presentazione
L’opera è funzionale a una didattica inclusiva grazie alla presenza di mappe concettuali e di
esercitazioni e verifiche per alunni DSA.
ESPANSIONI DIGITALI
La nuova edizione Openschool consente di:
– scaricare gratuitamente il libro digitale arricchito (eBook+); l’eBook+ permette in particolare di:
• eseguire tutte le esercitazioni a risposta chiusa in modo interattivo;
• scaricare gli approfondimenti tematici;
• scaricare lezioni e unità integrative;
– disporre di ulteriori esercitazioni online utilizzabili a discrezione del docente per classi virtuali
gestibili attraverso la piattaforma Open.
CD-ROM
Il CD-ROM allegato al volume contiene i file degli esempi nonché il materiale necessario per ese-
guire le procedure guidate passo passo degli esercizi svolti e da svolgere e le simulazioni informa-
tiche di fine lezione.
XIII
Indice e presentazione
APERTURA LEZIONE
La Lezione si apre con una
breve sintesi degli
argomenti trattati e con la
schematizzazione dei
contenuti attraverso una
MAPPA CONCETTUALE.
EVIDENZIAZIONE
Connota dei concetti
da ricordare.
WIKI
Specifica il significato di un
termine.
ATTENZIONE
Individua aspetti su cui
focalizzare l’attenzione.
XIV
Indice e presentazione
SCUOLA-LAVORO
Presente al termine di ogni Unità,
contiene proposte di attività
connesse con le esperienze di PCTO,
Percorsi per le Competenze
Trasversali e per l’Orientamento.
CLIL
Chiude ogni Unità una
scheda CLIL, che propone,
in inglese, i concetti chiave
dell’Unità e alcuni quesiti di
diverse tipologie.
XV
L’OFFERTA DIDATTICA HOEPLI
L’edizione Openschool Hoepli offre a docenti e studenti tutte le potenzialità
di Openschool Network (ON), il nuovo sistema integrato di contenuti e servizi
per l’apprendimento.
Edizione OPENSCHOOL
+ + +
LIBRO eBOOK+ RISORSE PIATTAFORMA
DI TESTO ONLINE DIDATTICA
Il libro di testo è L’eBook+ è la versione Il sito della casa editrice La piattaforma didattica
l’elemento cardine digitale e interattiva offre una ricca dotazione è un ambiente digitale
dell’offerta formativa, del libro di testo, di risorse digitali che può essere utilizzato
uno strumento didattico utilizzabile su tablet, per l’approfondimento in modo duttile, a misura
agile e completo, LIM e computer. e l’aggiornamento. delle esigenze della
utilizzabile Aiuta a comprendere Nella pagina web classe e degli studenti.
autonomamente e ad approfondire dedicata al testo è Permette in particolare
o in combinazione con i contenuti, rendendo disponibile MyBookBox, di condividere contenuti
il ricco corredo digitale l’apprendimento più il contenitore virtuale ed esercizi e di partecipare
offline e online. Secondo attivo e coinvolgente. che raccoglie i materiali a classi virtuali.
le più recenti indicazioni Consente di leggere, integrativi che Ogni attività svolta viene
ministeriali, volume annotare, sottolineare, accompagnano l’opera. salvata sul cloud e
cartaceo e apparati effettuare ricerche Per accedere rimane sempre
digitali sono integrati e accedere direttamente ai materiali è sufficiente disponibile e aggiornata.
in un unico percorso alle numerose registrarsi al sito La piattaforma consente
didattico. Le espansioni risorse digitali [Link] inoltre di consultare
accessibili attraverso integrative. e inserire il codice la versione online
l’eBook+ e i materiali Scaricare l’eBook+ coupon che si trova nella degli eBook+ presenti
integrativi disponibili è molto semplice. terza pagina di copertina. nella propria libreria.
nel sito dell’editore È sufficiente seguire Per il docente nel sito È possibile accedere
sono puntualmente le istruzioni riportate sono previste ulteriori alla piattaforma
richiamati nel testo nell’ultima pagina risorse didattiche attraverso il sito
tramite apposite icone. di questo volume. dedicate. [Link].
.
1
U N I T À
Dal problema
al programma
LEZIONE 1
Dal problema all’algoritmo
LEZIONE 2
La codifica degli algoritmi:
pseudocodice e flow chart
LEZIONE 3
Realizzare i flow chart
con Flowgorithm
LEZIONE 4
L’istruzione di selezione
e le condizioni logiche
LEZIONE 5
L’istruzione di iterazione
(o ciclo)
II file relativi a esempi, esercizi e a eventuali soluzioni di questa unità sono contenuti nel CD-ROM e sono anche scaricabili
dal sito
.
L E Z I O N E 1
1
Dal problema
all’algoritmo
MAPPA CONCETTUALE
Situazione Altre
Fisica Matematica Economia Scienze
reale discipline
pongono un
Linguaggio
Analisi
di progetto
2
Lezione 1 Dal problema all’algoritmo
Siamo in grado di risolvere la maggior parte dei problemi che affrontiamo perché o sono semplici,
oppure perché li abbiamo già “affrontati almeno una volta” in passato, e quindi ci basiamo sulla
nostra esperienza o sulla consulenza di qualche amico.
Per altri problemi, invece, la ricerca della soluzione a volte ci risulta difficile, se non impossibile,
soprattutto se ci mancano delle conoscenze o delle informazioni (dati), oppure se la difficoltà in-
trinseca della situazione lo rende un enigma.
ESEMPIO
Abbiamo sicuramente delle difficoltà per calcolare la distanza tra la Terra e il Sole, oppure per
mettere in ordine alfabetico i nomi degli abitanti di una città come Pechino o New York, oppure
semplicemente per determinare se “è nato prima l’uovo o la gallina!”
I problemi non sono tutti uguali tra loro, né per tipologia, né per complessità.
Per individuare la soluzione poterebbe essere necessario cercare di comprendere meglio il pro-
blema, cioè effettuare un’analisi approfondita della situazione e, nei casi più complessi, individuare
una strategia risolutiva.
Con strategia risolutiva si intende la modalità con cui si risolve il problema, cioè l’idea con la quale
il programmatore, sfruttando l’esperienza, l’intuito, la fantasia e, perché no, l’intelligenza, affronta il
processo creativo relativo e trova la “chiave di soluzione” del problema.
AREA DIGITALE
Origini del problema Per meglio comprendere cosa si intende per soluzione e per strategia riso-
del contadino, il lupo, lutiva riportiamo di seguito un famoso problema, noto come Il contadino, il
la capra e il cavolo lupo, la capra e il cavolo, con la relativa soluzione.
Il problema
Sulla riva di un fiume ci sono un contadino, un lupo, una capra e un cavolo che devono attraversare
un fiume con una piccola barca: su di essa è possibile portare solo due “cose” alla volta.
Come può il contadino attraversare indenne il fiume salvando “capra e cavoli” sapendo che se
vengono lasciati da soli il lupo con la capra, oppure la capra con il cavolo, i primi divorano i se-
condi?
3
UNITÀ 1 - Dal problema al programma
Naturalmente, per trovare la soluzione, dobbiamo riflettere e arrivare alla conclusione applicando
le regole prima analizzate.
Dopo qualche tentativo, individuiamo una possibile sequenza corretta delle operazioni:
1) prendiamo capra e cavolo dalla riva A e passiamo sulla riva B;
2) lasciamo il cavolo sulla riva B e riportiamo la capra sulla riva A;
3) lasciamo la capra sulla riva A, carichiamo il lupo sulla barca e lo portiamo sulla riva B;
4) torniamo a prendere la capra stando “tranquilli“ perché il lupo “non mangia il cavolo!”;
5) carichiamo la capra e la trasportiamo sulla riva B;
6) proseguiamo il nostro viaggio avendo salvato capra e cavolo.
La soluzione descritta per il problema precedente non è l’unica possibile: si potrebbe infatti so-
stituire, nella sequenza precedente, il cavolo con il lupo e il procedimento porterebbe al medesimo
risultato: quindi, generalmente, non c’è una sola soluzione che risolve un problema, ma un pro-
blema ammette sempre molte possibili soluzioni alternative, alcune migliori e più efficienti di
altre, ma comunque in grado di soddisfare alle richieste.
A B
1 2
A B A B
3 4
A B A B
5 6
A B A B
4
Lezione 1 Dal problema all’algoritmo
Gli esecutori devono essere in grado di comprendere ed eseguire le istruzioni che risolvono
il problema.
Il problema
A un orafo viene consegnato un certo quantitativo d’oro per preparare 18 monete uguali; ma
l’orafo “trafuga” parte dell’oro, producendo 17 monete uguali e una più leggera. Utilizzando
una bilancia a due bracci, com’è possibile individuare la moneta falsa in sole tre pesate?
Il nostro compito (obiettivo), cioè il goal, è quello di individuare la moneta più leggera.
5
UNITÀ 1 - Dal problema al programma
In questo caso, per trovare la soluzione non è sufficiente indicare in sequenza le operazioni da
compiere perché… innanzitutto è necessario “scoprire” come arrivare alla soluzione, cioè avere
un’idea di come procedere, quale strategia adottare.
Una prima idea consiste nel collocare una metà delle monete su un piatto e l’altra metà sull’altro:
in questo modo, individuiamo il “gruppo di 9” dove è presente la moneta falsa.
Se ripetiamo la stessa operazione per altre due volte riusciamo a ridurre il gruppo di 9 monete
dapprima a 4 e infine a 2, ma… ci manca una pesata per l’ultimo confronto!
Questo “tentativo” ci fornisce comunque un indizio: l’unica possibilità che abbiamo per risolvere
l’enigma è quello di avere come ultima pesata solo due monete da confrontare tra loro.
Anche se alla terza pesata ci arriviamo con tre monete possiamo comunque risolvere il problema:
pesando due monete a caso prese dal gruppo di tre, infatti, abbiamo due possibili situazioni:
– bilancia in equilibrio: la terza moneta, quella “non pesata”, è la più leggera;
– bilancia non in equilibrio: nel piatto ”più in alto” c’è la moneta più leggera.
In entrambe le situazioni siamo quindi in grado di ridurre il numero delle monete da confrontare
a sole 3 monete!
4 effettuiamo la terza pesata prendendo due monete a caso tra quelle presenti nel gruppo di tre:
– se la bilancia è sbilanciata, in un piatto è presente la moneta falsa;
– se la bilancia è in equilibrio, la moneta falsa è la terza, quella esclusa dalla pesata.
Possiamo osservare che la nostra strategia può essere utilizzata anche con un problema con dati
iniziali diversi (istanza), per esempio con 24 monete:
– prima pesata: suddividendo le monete in tre gruppi da 8 individuiamo il gruppo che contiene
la moneta tarocca;
6
Lezione 1 Dal problema all’algoritmo
La strategia che risolve un problema permette di risolvere problemi simili, cioè quelli della stessa
“famiglia”, che si differenziano solo per il valore dei dati iniziali (istanze di un problema).
Possiamo facilmente constatare che con questo metodo e tre pesate al massimo è possibile individuare
una moneta tarocca nascosta tra 27 monete.
Se aggiungiamo una pesata, con un totale di 4 pesate le monete “confrontabili” divengono 81: possiamo
dedurre la regola generale formulandola nel modo seguente: monete = 3nr pesate
Il concetto di algoritmo
Abbiamo visto che, partendo dal problema per arrivare alla soluzione, è necessario analizzare
dettagliatamente la situazione e individuare la strategia risolutiva, cioè “trovare” l’idea che
risolve la situazione.
L’IDEA LA SOLUZIONE
IL PROBLEMA L’ANALISI
(LA STRATEGIA) (L’ALGORITMO)
Quando la strategia risolutiva è stata definita, quindi quando si è “scoperto” il criterio risolutivo
del problema, bisogna “scrivere” le singole istruzioni che l’esecutore deve compiere, in sequenza,
una dopo l’altra.
7
UNITÀ 1 - Dal problema al programma
Affinché un esecutore possa eseguire un algoritmo, questo deve avere le seguenti caratteristiche:
– generalità, cioè risolvere tutti i problemi di una certa classe: per esempio, l’algoritmo che
effettua la somma di due numeri deve portare al risultato corretto indipendentemente dal
valore dei due numeri;
– finitezza: l’algoritmo deve essere composto da un numero finito di istruzioni ordinate e deve
terminare la sua elaborazione in un numero finito di passi in un tempo finito;
– realizzabilità: l’algoritmo deve essere comprensibile e realizzabile da chi lo deve eseguire, cioè
deve essere molto dettagliato e composto di istruzioni molto elementari non ulteriormente
scomponibili;
– non ambiguità: l’esecutore deve interpretare in modo univoco le istruzioni;
– completezza: significa che devono essere previste tutte le possibilità che possono verificarsi du-
rante l’esecuzione e per ognuna devono essere definite le azioni da svolgere;
– riproducibilità: ogni volta che viene eseguito l’algoritmo con gli stessi dati di partenza si
devono ottenere gli stessi risultati (determinismo).
ESEMPIO
È possibile scrivere un algoritmo che descrive le operazioni per “trasferire il Co-
losseo sulla luna”, in quanto esiste un esecutore in grado di compiere tutte le
operazioni necessarie alla sua realizzazione, e cioè:
– smontare il Colosseo;
– impacchettarlo;
– portarlo sulla luna, anche effettuando più viaggi;
– rimontarlo sulla luna.
Non sappiamo però in quanto tempo porteremo a termine le operazioni, ma possiamo essere certi
che finiranno in un tempo finito, anche se magari “occorrerà qualche anno!”
Non possiamo invece scrivere un algoritmo per colorare le nuvole, oppure per compilare la schedina
vincente al totocalcio.
Algoritmi ed esecutori
Oltre agli uomini, i principali esecutori di algoritmi sono le macchine: una macchina “non è in-
telligente”, ed è capace solo di eseguire istruzioni molto elementari e senza alcuna capacità
critica o di ragionamento autonomo, limitandosi a svolgere automaticamente dei compiti ripe-
titivi, sulla base delle istruzioni ricevute.
L’“istruzione delle macchine” avviene mediante il procedimento che prende il nome di pro-
grammazione: questa operazione consiste nel “trascrivere” l’algoritmo mediante un linguaggio
particolare che la macchina “è in grado di capire” e di inserirlo al suo interno in modo che lo
possa eseguire sotto forma di programma.
Indichiamo con il termine programma l’insieme delle operazioni che vengono inserite nella mac-
china, che sono la traduzione dell’algoritmo (la sua codifica) in istruzioni semplici che la macchina
è in grado di eseguire.
Non tutte le macchine sono in grado di eseguire programmi, e inoltre ogni macchina è in grado
di eseguire solo un limitato gruppo di istruzioni.
8
Lezione 1 Dal problema all’algoritmo
ESEMPIO
Il distributore di caffè è una macchina automatica (automa ) in grado di ripetere
un programma con molteplici varianti.
Non è però certo in grado di eseguire il semplice calcolo del prodotto di due nu-
Automa meri.
Un automa è una macchina capace di
svolgere in maniera automatica delle Anche la calcolatrice è una macchina programmata, che ha al suo interno un insieme
operazioni particolari più o meno com-
di programmi che ricevono dall’utente un insieme di informazioni in merito a:
plesse che portano a un preciso risultato
– tipo di operazione da eseguire;
per il quale è stata programmata.
– numeri (dati) da elaborare.
I dati forniti dall’utente alla macchina per essere elaborati si chiamano dati in ingresso (o in input).
Il programma esegue i calcoli e visualizza i risultati all’utente sul display, “ritornando” un risultato
in uscita, cioè in output.
Praticamente, tutti i programmi si basano su questo schema, composto da una fase di input, una
di elaborazione e una di output, che viene ripetuto più volte: pensiamo per esempio ai videogiochi
dove il giocatore sfida il computer a un solitario con le carte, o a uno “sparatutto”, oppure a un
gioco di ruolo o di strategia.
A ogni mossa del giocatore il calcolatore elabora una contromossa e la esegue visualizzando il ri-
sultato sullo schermo.
M E T T IT I A LL A P ROVA
Esame di un problema Strategia risolutiva Scomposizione in istruzioni/passi
Un agricoltore deve diluire un sacco di fertilizzante in 20 litri d’acqua, ma ha a di-
AREA DIGITALE sposizione un annaffiatoio con capacità di 25 litri contenente 16 litri d’acqua e due
Soluzione del problema contenitori rispettivamente da 5 e 3 litri. Come può operare l’agricoltore?
dell’annaffiatoio Descrivi a parole le sequenza delle operazioni necessarie a ottenere esattamente
20 litri d’acqua nell’annaffiatoio.
9
UNITÀ 1 - Dal problema al programma
VERIFICA... le conoscenze
SCELTA MULTIPLA
1 Quale delle seguenti affermazioni è vera? 4 La comprensione del problema viene agevolata:
a Gli algoritmi sono problemi (2 risposte)
b I programmi sono problemi a dalla astrazione
c I problemi sono algoritmi b dalla lingua utilizzata
d Gli algoritmi sono programmi c dal linguaggio di programmazione
d dalla modellazione
2 Quale di queste affermazioni relative ai problemi
è vera? 5 Quale tra i seguenti non è uno strumento utile alla
a Il calcolatore risolve problemi definizione della strategia?
b L’analista studia il problema a L’utilizzo dell’esperienza passata
c Il programma risolve un problema b La scomposizione dei problemi in sottoproblemi
d La soluzione di un problema dipende dai dati c L’utilizzo di un personal computer
d Il procedimento per tentativi
3 Nella fase di analisi si devono eliminare:
(2 risposte) 6 Quale tra i seguenti non è una caratteristica del-
a i reali obiettivi del problema l’algoritmo?
b le regole da applicare a Deve essere generale, cioè risolvere un insieme di
c i dettagli inutili problemi
d i dati espliciti b Opera su dati in ingresso producendo un risultato
e i dati impliciti in uscita
f i dettagli ambigui c Deve avere un numero preciso di istruzioni
d Il risultato viene prodotto in un tempo finito
e Deve essere deterministico
VERO/FALSO
10
Lezione 1 Dal problema all’algoritmo
1 I secchi d’acqua
Con l’arrivo della primavera il tuo compito è quello di togliere le erbe infestanti dal sentiero ciottolato:
invece che estirparle a mano, quest’anno hai comperato un diserbante che deve essere sciolto in 2 litri
d’acqua. Hai però a disposizione solo un primo secchio di 4 litri e un secondo di tre litri. Come puoi fare?
4 Fuga da Alcatraz
Tre innocenti ingiustamente condannati a vent’anni di prigione decidono di evadere calandosi dalla
finestra della loro cella, posta a molti metri di altezza. Il primo pesa 195 kg, il suo degno compare pesa
105 kg mentre il più magro pesa 90 kg. Essi dispongono inoltre di un blocco di cemento del peso di 75 kg.
Per fuggire devono utilizzare una corda che scorre su una puleggia. Ai due capi della corda sono fissate
due robuste ceste, in ciascuna delle quali può stare un uomo o il blocco di cemento.
Praticamente devono calarsi in varie fasi, facendosi da contrappeso l’uno con l’altro ed eventualmente
con il blocco di cemento. La differenza dei pesi nelle due ceste non deve superare i 15 kg, altrimenti la di-
scesa è troppo rapida. Verifica di fine Lezione
(Lemon, 1890, Lewis Carroll, 1899)
LA SFIDA
IL GIOCO DEI FIAMMIFERI
N fiammiferi sono disposti su M file ed è possibile togliere quanti fiammiferi si vuole, ma solo da una
fila alla volta (non è quindi ammesso togliere contemporaneamente fiammiferi da due file). Perde chi
toglie l’ultimo fiammifero. Individua una strategia per vincere sempre.
11