La automazione
Dalle macchine semplici alle macchine programmabili

Scheda 3
Il calcolatore

1. Dalla calcolatrice al calcolatore
2. Come usare un ambiente di programmazione
3. Il linguaggio macchina e i programmi traduttori
4. Descrizione dei linguaggi di programmazione - Esempi di linguaggi
5. Automatizziamo qualche procedimento di calcolo
6. Hardware e software
7. I fogli elettronici
8. I programmi per il calcolo simbolico
9. Esercizi

 

1. Dalla calcolatrice al calcolatore

    Alle calcolatrici non programmabili possiamo far eseguire solo singole operazioni di:

    •  addizione, moltiplicazione, … ,

    •  calcolo di altre funzioni il cui programma è stato incorporato dal costruttore,

    •  immagazzinamento o estrazione di dati dalla memoria-utente.

    A un calcolatore (o computer o macchina calcolatrice programmabile) possiamo far gestire l'esecuzione di tutto un algoritmo.

    Consideriamo ad esempio il calcolo della ripartizione percentuale di una serie di dati. Usando una CT possiamo procedere in questo modo:

   (1)   batto   100

   (2)   batto                    (1.1)

   (3)   batto    totale

   (4)   batto   

faccio calcolare il fattore di proporzionalità per cui moltiplicare i dati

   (5)   batto     ( o o …)  

lo faccio mettere nella memoria

   (6)   batto    dato

   (7)   batto   

   (8)   batto    ( o …)

   (9)   batto   

faccio calcolare il fattore la percentuale di dato rispetto a totale

  (10)   ritorno a  (6)

    Come si vede, è l'utente che deve gestire l'esecuzione dell'algoritmo (1.1), cioè comandare alla CT man mano quale operazione compiere.

    I calcolatori sono invece in grado di "leggere" e tradurre automaticamente in una sequenza di operazioni-macchina (calcoli, memorizzazioni, …) un programma che illustri l'intero procedimento, cioè una descrizione dell'algoritmo (1.1) fatta in un opportuno linguaggio "comprensibile" dal calcolatore.

    Molti computer tascabili (o pocket computer) e tutti i calcolatori di maggiori dimensioni sono in grado di eseguire il seguente programma (1.2) scritto in linguaggio Basic:


(1.2)        

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K    

50 GOTO 30

l'utente deve battere totale

 

l'utente deve battere dato

 

 

    È facile comprendere il significato di questo programma, che ha la forma di una sequenza di istruzioni numerate. PRINT in inglese significa "stampa"; GOTO deriva dall'inglese "go to", che significa "vai a". La parola "input", che abbiamo già usato, indica qualcosa che entra in una macchina (energia, informazioni, …); in questo caso INPUT viene usato per dire al calcolatore di attendere che l'utente batta un numero.

    Vediamo come si comporta un pocket computer se l'utente gli comanda di eseguire (1.2). Nello schema seguente la prima colonna evidenzia l'istruzione del programma che il computer sta eseguendo, la seconda riporta lo stato dello schermo (informazioni battute dall'utente o visualizzate direttamente dal calcolatore).

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?

Il computer fa comparire il prompt "?" per segnalare che attende l'introduzione di un dato.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

L'utente batte il numero 2750 seguito da "a capo" (abbiamo indicato con "" l´"a capo" premuto dall'utente; normalmente sullo schermo non appare alcun segno).

Il computer memorizza il dato nella memoria T.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

Il computer calcola la divisione di 100 per il numero che ha messo nella memoria T

Poi mette il risultato nella memoria K.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?

Il computer fa comparire il prompt "?" per segnalare che attende l'introduzione di un dato.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

L'utente batte il numero 1800 seguito da "a capo".

Il computer memorizza il dato nella memoria D.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

Il computer calcola la moltiplicazione del numero che ha messo nella memoria D per quello che ha messo nella memoria K.

Poi visualizza il risultato.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

Il computer trasferisce l'esecuzione alla riga che inizia con "30"

Da questo punto il computer ripete ciclicamente l'esecuzione delle stesse istruzioni:

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

?

Il computer fa comparire il prompt "?" per segnalare che attende l'introduzione di un dato.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

?    950

L'utente batte il numero 1800 seguito da "a capo".

Il computer memorizza il dato nella memoria D.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

?    950

34.54545

Il computer calcola la moltiplicazione del numero che ha messo nella memoria D per quello che ha messo nella memoria K.

Poi visualizza il risultato.

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

?    950

34.54545

Il computer trasferisce l'esecuzione alla riga che inizia con "30"

————————

10 INPUT T

20 K=100/T

30 INPUT D

40 PRINT D*K

50 GOTO 30

?  2750

?  1800

65.45454

?    950

34.54545

?

Il computer fa comparire il prompt "?" per segnalare che attende l'introduzione di un dato.

E così via.

 1 
    Completa lo schema seguente con le parti mancanti: riquadri che evidenziano istruzioni (1ª colonna), caratteri visualizzati sullo schermo (2ª colonna, al posto dei puntini) e commenti (3ª a colonna).

istruzione in esecuzione stato dello schermo                   commento

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

Il computer memorizza la costante 2 nella memoria B

————————

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

?

  ...

————————

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

?    3

L'utente batte il numero 3 seguito da "a capo".

Il computer memorizza il dato nella memoria E.

————————

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

?    3
...

Il computer calcola il numero che è nella memoria B elevato al numero che è nella memoria E

Poi visualizza il risultato.

————————

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

?    3
...

L'utente batte il numero 3 seguito da "a capo".

Il computer memorizza il dato nella memoria E.

————————

10 B=2

20 INPUT E

30 PRINT B^E

40 GOTO 20

?    3
...
...

Il computer fa comparire il prompt "?" per segnalare che attende l'introduzione di un dato.

Per poter eseguire un programma come (1.2), il pocket computer deve essere in grado di memorizzare il testo del programma, cioè, nel caso di (1.2), la seguente sequenza di caratteri, dove con "◊" abbiamo indicato lo spazio bianco (carattere normalmente invisibile, che corrisponde alla pressione della barra spaziatrice):

10◊INPUT◊T20◊K=100/T30◊INPUT◊D40◊PRINT◊D*K50◊GOTO◊30

    Come le usuali CT memorizzano i numeri sotto forma di sequenze di bit, così un pocket computer memorizza sotto forma di una sequenza di bit anche il testo del programma, utilizzando uno specifico codice.

    Deve, inoltre, essere in grado (quando l'utente gli comanda, con un opportuno tasto, di eseguire il programma) di leggere (la sequenza di bit con cui ha codificato) il programma e decidere, man mano, quale operazione eseguire: una memorizzazione, un richiamo dalla memoria, un calcolo o una visualizzazione (operazioni che nelle CT non programmabili vengono comandate direttamente da tastiera), o un trasferimento dell'esecuzione a un altro punto del programma.

    Per fare tutto ciò, il pocket computer deve avere:

  un "programma incorporato" per codificare il "programma battuto dall'utente",
  un dispositivo di memorizzazione in cui registrare il il programma codificato,
  almeno 26 memorie-utente (memoria A, memoria B, …, memoria Z) da associare alle diverse lettere dell'alfabeto e
  un ulteriore "programma incorporato" per tradurre il programma codificato nell'azionamento dei vari dispositivi di calcolo, memorizzazione, … .

    Esistono versioni più sofisticate del linguaggio Basic in cui, tra l'altro, si possono usare come variabili non solo lettere ma nomi composti da più caratteri e in cui non è necessario scrive in testa a ogni riga di programma un numero che indichi l'ordine in cui va eseguita.

    Poiché l'uso di queste versioni del linguaggio richiede molta più capacità di memorizzazione (si possono usare grandi quantità di variabili e, come vedremo, si possono impiegare istruzioni molto complesse, che richiedono dei programmi di traduzione complicati), esse vengono impiegate solo su personal computer o su calcolatori di dimensioni maggiori.

    Avviamo le nostre considerazioni sulla programmazione al calcolatore facendo riferimento a uno di questi linguaggi: il QuickBasic, che spesso chiameremo più brevemente QB.  Abbiamo scelto questo linguaggio per vari motivi:

–  esso opera, con piccole differenze, su entrambi i tipi di personal computer più diffusi, i cosiddetti "Ibm-compatibili" e i "Macintosh";

–  nel caso degli Ibm-compatibili ne esiste una versione liberamente riproducibile; per usare un altro linguaggio occorre invece acquistarne una copia personale, se non si vuole commettere un'infrazione punibile per legge;

–  si tratta di un linguaggio particolarmente semplice, di agevole lettura e che consente una facile riscrittura dei programmi in altri linguaggi di programmazione.

    Oltre che per questa introduzione alla programmazione, lo useremo anche in seguito, per descrivere gli algoritmi man mano considerati, lasciando alla scelta delle singole classi la possibilità di utilizzare in aula-computer linguaggi diversi.

    Vediamo come può essere riscritto in questo linguaggio il programma (1.2):


(1.3)          

[1]   INPUT tot

[2]   K = 100/tot

[3]   Introduzione:  INPUT dato

[4]   PRINT dato*K

[5]   GOTO Introduzione

Nota. Fra parentesi quadre qui e in seguito indicheremo il numero d'ordine della riga del testo del programma; ciò ci servirà come riferimento per facilitare la descrizione dei programmi.

    In questo linguaggio, come già detto, possiamo fare a meno di numerare tutte le linee del programma. Quando vogliamo identificare una particolare linea del programma, ad esempio per "ritornarvi" con un GOTO, possiamo metterle in testa un numero intero positivo qualunque o, in alternativa, un nome seguito da ":", a mo' di etichetta. In (1.3) viene usata l'etichetta "Introduzione".

    Avremmo potuto anche scrivere:


(1.4)          

[1]   INPUT tot

[2]   K = 100/tot

[3]

[4]   Introduzione:

[5]       INPUT dato

[6]       PRINT dato*K

[7]   GOTO Introduzione

    Infatti, per rendere più "leggibile" un programma, in QB si possono inserire righe "vuote" (vedi [3]) o spazi bianchi in testa a una riga (vedi [5] e [6]) e si può andare a capo subito dopo un'etichetta o un numero di linea (vedi [4]).

Come usare un ambiente di programmazione

Il linguaggio macchina e i programmi traduttori

Descrizione dei linguaggi di programmazione - Esempi di linguaggi

Automatizziamo qualche procedimento di calcolo

Vedi Gli Oggetti Matematici Calcolatore 2

Hardware e software

I fogli elettronici

I programmi per il calcolo simbolico

Vedi Gli Oggetti Matematici Calcolatore 3

Esercizi

Vedi Gli Oggetti Matematici Esercizi (foglio 1 e seguenti)