Quando si impara a calcolare, si comincia sempre dall’addizione. È infatti l’operazione più elementare. Ci serve per rappresentare i numeri naturali: 4 è 3 + 1, 2 + 1 + 1 oppure 1 + 1 + 1 + 1. Proprio questa rappresentazione permette di comprendere il primo metodo di addizione che si impara a scuola. Così, per sommare due numeri naturali A e B, basta prendere A e aggiungervi B volte il numero 1. È il metodo usato quando si «conta sulle dita».
Quando si iniziano a concepire numeri più grandi, questo metodo diventa difficile da usare e se ne impara quindi un secondo. Per sommare due grandi numeri naturali A e B, si aggiungono dapprima le cifre delle unità, poi quelle delle decine e così via, usando un «riporto» quando il risultato ha più di due cifre. In realtà, qui si usano le proprietà associativa e commutativa dell’addizione, nonché la scomposizione di un numero in potenze di 10. Per esempio, 59 + 125 = (5 × 10 + 9 × 1) + (1 × 100 + 2 × 10 + 5 × 1) = (9 × 1 + 5 × 1) + (5 × 10 + 2 × 10) + 1 × 100. Ma non enunceremmo queste proprietà formali per spiegare a un bambino come impostare un’addizione.
Due metodi alla prova
-----------------------------
Se chiedete a un amico di eseguire il calcolo 23 + 126, potete star certi che imposterà l’addizione e non userà il primo metodo. È chiaro che se a e b sono «abbastanza grandi», il secondo metodo sarà molto più rapido del primo. Ma per una macchina, un computer o una calcolatrice vale lo stesso? Vi proponiamo di verificare che sia così, programmando questi due metodi in linguaggio Python con la calcolatrice Graph 90+E. Nel seguito considereremo dunque due numeri naturali A e B tali che A ≤ B.
**La calcolatrice Graph 90+E. Dal 31 agosto 2018, un aggiornamento disponibile gratuitamente sul sito
www.casio-education.fr permette di integrarvi il nuovo menu di programmazione in linguaggio Python**
Primo metodo: l’addizione per iterazione dell’unità.
Per sommare i nostri due numeri, prendiamo il maggiore, qui B, e vi aggiungiamo il numero intero 1, ripetendo l’operazione A volte (per effettuare il minor numero possibile di iterazioni).
Per calcolare 3 + 12, si calcolano successivamente 12 + 1 = 13, 13 + 1 = 14, 14 + 1 = 15. Quindi 3 + 12 = 15. In Python si ottiene:
Secondo metodo: l’addizione in colonna con riporto.
In quanto lettori di Tangente, sapete naturalmente eseguire senza difficoltà un’addizione in colonna con riporto. Ma se vi chiedessero di spiegare a un bambino come fare, come procedereste?
Cominciamo con un esempio. Per calcolare 127 + 59, nel dettaglio si procede così:

Qui non consideriamo più le cifre come numeri, bensì come simboli, e applichiamo il metodo seguente:
Per sommare A e B, si aggiungono anzitutto ad A tanti 0 quanti sono necessari affinché i due numeri abbiano «la stessa dimensione», cioè lo stesso numero di cifre);
Si sommano poi, a due a due, le cifre dei due numeri cominciando da destra (usando il metodo 1), e si aggiunge il riporto, se presente;
Si scrive la cifra più a destra del risultato;
Se il risultato ha più di due cifre, si scrive un nuovo riporto;
Si passa infine alle cifre adiacenti;
Quando non restano più cifre, si controlla se vi sia ancora un riporto. In tal caso, si scrive 1 davanti al risultato; altrimenti non si fa nulla;
Si ottiene così il risultato finale.
Cerchiamo di formalizzare questo secondo metodo. Consideriamo A = an…a1a0 e
B = bm…b1b0 scritti in forma decimale, ossia tali che a0, a1… an, e b0, b1… bm siano rispettivamente le cifre, comprese tra 0 e 9, di A e B.
Per ipotesi, A ha meno cifre (in senso lato) di B. Si comincia aggiungendo 0 a sinistra di A, in modo che i due numeri abbiano lo stesso numero di cifre; A diventa 00…0an…a1a0.
Per i che va da 0 a m, poniamo di uguale alla cifra delle unità del risultato dell’addizione *ai + b*i (ossia al resto della divisione euclidea di ai + bi per 10). Si ha allora C = cm+1cm…c0, uguale alla somma di A e B, dove:
•c0 = d0;
• ci = di + r per i che va da 0 a m, con r il riporto dell’operazione precedente (il quoziente della divisione euclidea di ai–1 + bi–1 per 10);
• cm+1 = r è l’ultimo riporto.
Per questo secondo metodo, proveremo a programmare l’addizione come la si insegnerebbe a un bambino, senza usare la divisione euclidea. Per scrivere il programma corrispondente, iniziamo trasformando i nostri numeri in stringhe di caratteri (string) con l’istruzione str.
Inizializziamo il riporto a 0 e creiamo una stringa vuota C.
Con un primo ciclo for, aggiungiamo il numero di 0 necessario all’inizio del numero con meno cifre, qui A, affinché i due interi abbiano la stessa dimensione m.
Il ciclo su A[–j–1], B[–j–1] ci permette di percorrere i due numeri da destra a sinistra (nome_stringa[–1] restituisce l’ultimo carattere della stringa).
Sommiamo a due a due le cifre di ciascun intero usando il metodo precedente. Prima, però, dobbiamo considerarle di nuovo come numeri e non come caratteri! A tale scopo usiamo la funzione int. A questo risultato aggiungiamo il riporto precedente.
Controlliamo se il risultato è scritto con più di due cifre. In tal caso, inseriamo un riporto. Poi anteponiamo questo nuovo risultato a C.
Infine, concateniamo l’ultimo riporto alla stringa C e trasformiamo questa stringa in numero grazie all’istruzione int.
In linguaggio Python si ottiene:

La lepre e la tartaruga?
-------------------------
Non resta che verificare la velocità di calcolo con i due metodi presentati! A questo scopo, definiamo una funzione test che, data una funzione fct di due argomenti A e B, calcola n volte la quantità fct(A, B), dove n è un numero intero abbastanza grande (qui, n = 1 000) da far emergere un fenomeno.
In Python si ottiene:
Sta a voi effettuare qualche test scaricando il programma «Velocità di calcolo» dal sito
www.casio-education.fr/, nelle risorse CASIO! Potete per esempio svolgere i seguenti esperimenti con la Graph 90+E o con il vostro ambiente di sviluppo Python preferito:
test(add1, 919, 223, 1000) ;
test(add2, 919, 223, 1000);
test(add1, 23, 126, 1000) ;
test(add2, 23, 126, 1000).
Rischiate di avere qualche sorpresa!