<< pagina principale < ······················ << articoli < ······················


COME SCRIVERE PROCEDIMENTI:

analisi delle risoluzioni di un banale problema (che puo' diventare un rompicapo).

Il problema

Dodici monete sono tutte uguali tra loro tranne una, diversa dalle altre solo per il peso. Come si puo' individuarla con

il solo uso di una bilancia a bracci ?

Il problema e' una riedizione di un celebre rompicapo "...saltato fuori, apparentemente dal nulla, nel 1945" (M.
Gardner: 'Il sistema ternario', in 'Enigmi e gochi matematici' vol.5, ed. Sansoni), dove si richiede di individuare la moneta diversa con sole tre pesate.

Anche in 'La strutture degli algoritmi', ed. Boringhieri, F.Luccio esamina lo stesso rompicapo per introdurre l'analisi del concetto di algoritmo.

 

Procedimenti risolutivi

Il problema e' stato posto a gruppi di insegnanti di matematica e fisica in fase di "alfabetizzazione" informatica nell'ambito del Piano Nazionale d'Informatica.

Con cio` si sono volute mettere in evidenza le difficolta` di esporre in modo chiaro un procedimento risolutivo, anche nel caso di un problema semplice come questo, e motivare una riflessione sullo stile e le strutture espositive, primo approccio all'informatica di base.

Dopo qualche imbarazzo iniziale, quindi, sono state prodotte descrizioni come le seguenti.

-                  A_____________B
                          ^
              =                        #
       A_____________C          A_____________C
              ^                        ^
              =                  =           #
       A_____________D       B moneta    A moneta
              ^              diversa      diversa
              =
              "
              "
              "
        A_____________X
               ^
               #
          X moneta diversa

  -  Chiamiamo x1, x2, ....., x12 le monete.
                             x1 , x2
               x1 = x2                       x1 # x2
              x1 , x3                       x1 , x3
        x1 = x3     x1 # x3           x1 = x3     x1 # x3
           "           x3                x2          x1
           "
           "
        x1 # x12
          x12

- Si fanno due gruppi di 6 monete e li si dispone sui due piatti. Essi non saranno in equilibrio. Si estrae una moneta per ogni piatto. Si controlla se la bilancia e' o no in equilibrio. Se lo e' si pone in un piatto una delle due monete estratte, nell'altro piatto una delle altre 10 per individuare quella cercata. Se la bilancia e' in equilibrio la moneta cercata e' l'altra della coppia, altrimenti e' quella della coppia sulla bilancia. Se dopo l'estrazione della prima coppia i piatti non sono in equilibrio si itera il procedimento.

- Si suddividono le monete in tre gruppi

                A              B              C
             o o o o        o o o o        o o o o
  Se A = B   ---->  C
  Se A # B   ---->  A = C  ----> B
                    A # C  ----> A
  In  tutti i casi si individua il gruppo (*) con la  moneta
 anomala
                   1 2 3 4
              (*)  o o o o
 Se 1 = 2
    1 = 3  ----> 4
 Se 1 = 2
    1 # 3  ----> 3
 Se 1 # 2
    1 = 3  ----> 2
 Se 1 # 2
    1 # 3  ----> 1
     1 # 3  ----> 1


 -                1 2 3             4 5 6     7 8 9
          o o o = o o o             o o o  #  o o o
                       1 2 3    4 5 6
                       o o o    o o o
                            =  #
                          /      \
                   o o   o o       o o   o o
                      = #             = #
                    /    \           /   \
                  6      1  4       9    1  8
                         o  o            o  o
                          =#              =#
                         /  \            /  \
                        5    4          7    8
  - Dividiamo le monete in 4 gruppi da 3 che chiamiamo A, B,
    C, D.
  1^pesata: se A = B allora C # D
  2^pesata: confronto B con C
                       =               #
                      /                 \
                     /                   \
        D contiene la moneta            C contiene la moneta
            diversa                        diversa
 *Chiamo P1, P2, P3, le monete del gruppo di peso diverso.
 3^pesata: se P1 = P2 allora la moneta diversa e' P3
           se P1 # P2 allora 4^pesata
 4^pesata: se P2 = P3 allora la moneta diversa e' P1
           se P1 # P3 allora la moneta diversa e' P2
  Se nella 1^pesata A#B allora nella 2^ confrontero` C con B
  2^pesata:  se C = B allora A contiene la moneta diversa
             se C # B allora B contiene la moneta diversa

Lo stile prevalentemente scelto nelle descrizioni e' grafico bidimensionale. In molti casi, per rendere sufficientemente
chiara la comunicazione, e' risultato essenziale il supporto di un commento orale. Si sono avute naturalmente anche descrizione che usano in modo piu' o meno preciso le forme dei diagrammi di flusso o delle istruzioni numerate. A questi stili e' stata data in seguito poca rilevanza.

 

Procedimenti risolutivi pensati e scritti con consapevolezza delle strutture linguistiche

Una prima riflessione puo` essere fatta evidenziando le strutture linguistiche piu` comunemente usate nelle descrizioni.

- Mettere una moneta sul piatto a destra, mettere un'altra moneta sul piatto a sinistra. Finche' pesano uguali sostituire la moneta sul piatto di destra con una delle monete rimanenti. Sostituire infine la moneta sul piatto a destra con un'altra qualsiasi; se queste due ora pesano uguale allora la moneta sostituita sul piatto a destra era quella diversa, altrimenti la moneta attualmente sul piatto a sinistra e' quella diversa.

I segni d'interpunzione separano la descrizione di un'azione dalla seguente. Le strutture

     finche' <condizione> <procedimento> ,
     se <condizione> allora <procedimento> altrimenti <procedimento>

bastano e avanzano per scrivere qualsiasi procedimento. Questa notazione lineare, che, se ci si limita ai segni d'interpunzione e alle due precedenti strutture, si puo' chiamare "strutturata", puo' essere usata come un meccano linguistico per descrivere procedimenti.

Puo` essere utile, se non indispensabile quando si debba fare uso di subordinate, utilizzare lo stile dell'"indentazione" cosi` come nella descrizione seguente.

 - Mettere una moneta sul piatto a destra;
   mettere un'altra moneta sul piatto a sinistra;
   finche' pesano uguali
      sostituire la moneta sul piatto di destra con una delle monete rimanenti;
   sostituire  la  moneta sul piatto a destra  con  un'altra qualsiasi;
   se  queste due ora pesano uguale
     allora
       la  moneta sostituita sul piatto a destra era  quella diversa
     altrimenti
       la moneta attualmente sul piatto a sinistra e' quella diversa.

Un altro stile, non incompatibile con il precedente, e' esemplificato nel seguito. Consiste nella descrizione analitica del procedimento risolutivo a partire da indicazzioni generali fino ai livelli di dettaglio desiderati.

 -1^ analisi:
     dividere le monete in tre gruppi;
     trovare in quale gruppo X c'e' quella diversa;
     trovare fra le quattro monete del gruppo X la diversa.
 2^ analisi:
    dividere le monete in tre gruppi;
    trovare in quale gruppo X c'e' quella diversa:
        chiamare A, B, C i tre gruppi;
        se  A = B
           allora
              il gruppo X e' il gruppo C
          altrimenti
              se  A = C
                allora
                   il gruppo X e' il gruppo B
                altrimenti
                   il gruppo X e' il gruppo A;
     trovare fra le quattro monete del gruppo X la diversa:
         confrontare  una moneta del gruppo X con una di  un gruppo diverso;
         se sono uguali
            allora
               trovare  fra  le  tre  monete  rimanenti  del gruppo X quella diversa
            altrimenti
               quella moneta del gruppo X e' la diversa.

(Ci fosse necessita' di specificare meglio come cercare frale tre altre monete del gruppo X quella diversa si potrebbe passare ad una ulteriore analisi).Questo stile, di scomposizione del complesso in parti sempre piu` semplici, non e' utile soltanto ai fini della comunicazione ma soprattutto in fase di progettazione del procedimento.

Si puo` passare infine ad un esempio di descrizione basato su un'interessante "meta-struttura".

-Come cercare tra n ( >2 ) monete quella di peso diverso:

     se  n = 3
        allora
          se prima moneta = seconda moneta
             allora
                se prima moneta = terza moneta
                    allora
                       non ci sono monete diverse
                    altrimenti
                       la terza moneta e' diversa
             altrimenti
                se prima moneta = terza moneta
                    allora
                       la seconda moneta e' diversa
                    altrimenti
                       la terza moneta e' diversa
        altrimenti
          metti da parte una moneta;
          cerca tra quelle rimanenti la moneta diversa;
          se non c'e'
             allora
               quella appena messa da parte e' diversa;

 

La struttura linguistica, o meglio meta-linguistica, su cui si basa e' detta 'ricorsiva', come il procedimento descritto. Una descrizione e' detta ricorsiva quando in essa si fa riferimento all'intera descrizione. Analogamente un procedimento e' detto ricorsivo quando un suo passo consiste di tutto il procedimento.

 

Procedimenti risolutivi pensati e scritti con consapevolezza della strutturazione dei dati

Le monete possono essere riorganizzate in diverse strutture e in ognuno dei casi il procedimento, o soltanto la sua descrizione, ne sara` strettamente influenzato.

-Le monete sono distintamente rappresentate da p1, p2, ...., p12;
  metti p1 sul piatto a sinistra;
  metti p2 sul piatto a destra;
  finche' p1 e pi  sono in equilibrio
        metti p(i+1) al posto di pi;
  se i > 2
    allora
           pi e' diversa
    altrimenti
           metti p3 al posto di p2
           se p1 e p3 sono in equilibrio
             allora
               p2 e' diversa
             altrimenti
               p1 e' diversa.
 -Le  dodici monete sono messe in fila. Si distinguono il piatto A e il piatto B.
  Metti su A la moneta in testa;
  metti su B la moneta in testa;
  finche` c'e` equilibrio
          metti in coda la moneta su B
          metti su B la moneta in testa;
  metti in coda la moneta su B;
  metti su B la moneta in testa;
  se c'e` equilibrio
    allora
          la moneta diversa e` quella in coda
    altrimenti
          la moneta diversa e` quella su A
-Le monete sono raggruppate in tre gruppi distinti, chiamati A, B, C, entro cui le monete sono indistinte;
  se A e B sono in equilibrio
    allora
      cercare in C la moneta diversa
    altrimenti
    se A e C sono in equilibrio
      allora
        cercare in B la moneta diversa
      altrimenti
        cercare in A la moneta diversa;
  Come cercare in X la moneta diversa:
     prendere una qualsiasi moneta di X;
     prendere una qualsiasi moneta non di X;
     se la moneta di X pesa come la moneta non di X
       allora
         cercare fra le tre monete rimanenti quella diversa
       altrimenti
         la moneta presa da X e' diversa.
 -Alle   monete  sono  distintamente  associati  i  seguenti  simboli:
         010, 011, 012, 001
         120, 121, 122, 112
         200, 201, 202, 220;
  sia i inizialmente uguale a 1;
  finche' i <= 3
    metti sul piatto a sin tutte le monete rappresentate da un simbolo che abbia 0 al posto i-esimo;
    metti  sul piatto a des tutte le monete rappresentate da un simbolo che abbia 2 al posto i-esimo;
    se i piatti sono in equilibrio
      allora
        il simbolo probabilmente  associato alla moneta diversa ha 1 all'i-esimo posto
      altrimenti
        se va giu' il piatto a sin
          allora
            il simbolo probabilmente associato alla  moneta diversa  ha 0 all'i-esimo posto
          altrimenti
            il simbolo probabilmente associato alla  moneta diversa  ha 2 all'i-esimo posto;
    se il simbolo cosi' ottenuto e' effettivamente associato ad una moneta
      allora
         quella moneta e' piu' pesante delle altre
      altrimenti
         scambiando 0 con 2 e viceversa nel probabile simbolo si ottiene il simbolo associato alla moneta piu' leggera.

Quest'ultimo algoritmo, fortemente caratterizzato dalla organizzazione scelta per i dati, e' il piu' efficiente: con esattamente tre pesate consente di individuare la moneta diversa e sapere se e' piu' pesante o piu' leggera. E' un chiaro esempio di come una opportuna organizzazione dei dati sia determinante per costruire procedimenti efficienti.

 

Conclusioni

Un elemento essenziale di una "educazione informatica" e' la capacita` di servirsi consapevolmente delle strutture linguistiche di: sequenza, selezione, ripetizione, indentazione e ,infine, ricorsivita`; cio` non solo per comunicare procedimenti ma anche come strumento per concepirli. Un altro elemento essenziale consiste nella capacita` di differenziare le diverse strutture, numeriche e non, nelle quali si possono organizzare i dati relativi ad un certo problema. Anche questa capacità non serve soltanto a posteriori, per scrivere chiaramente procedimeli ti già pensati e renderne possibile ad esempio la comunicazione ad un esecutore, ma come modo di organizzare l'attività di ricerca dei procedimenti stessi. Si può aggiungere inoltre come la capacità di servirsi di un'elaboratore di lesti, in particolare per avere a disposizione un foglio in cui lo spazio tra le righe non è limitato, contribuisca notevolmente soprattutto in fase di ricerca creativa ad utilizzare ordinatamente le strutture linguistiche esaminate (rendendo obsoleti i diagrammi di flusso) e ad applicare lo stile di scomposizione del complesso in parti via via più semplici.