2 - ALGORITMI E PROGRAMMI

 

Abbiamo detto che le istruzioni di un algoritmo devono essere concretamente eseguibili e comprensibili

da parte dell’esecutore. Ora, ai giorni nostri, l’esecutore per eccellenza di algoritmi, anche molto complessi,

è il computer, che è precisissimo e rapidissimo nell’eseguire, senza stancarsi e senza protestare,

sequenze di istruzioni che gli vengono assegnate nell’ordine corretto da un “programmatore” umano,

il quale tenga conto delle limitate capacità che il computer possiede.

Esso non è in grado di pensare, o di prendere autonomamente qualsivoglia decisione:

dipende in tutto e per tutto dall’uomo che, attraverso un “programma”, gli ordina, istante per istante, COSA fare.

 

Essenzialmente, un computer sa soltanto:

 

Ad esempio:

 

 

q       ASSOCIARE

A UNA LOCAZIONE DI MEMORIA

UN NOME

che la identifichi, come potrebbe essere

n, o num, o massimodivisoretrovato, ecc.

 

 

Nella parte preliminare di un programma scritto nel linguaggio

di programmazione PASCAL, dichiarazioni come 

  oppure   

ordinano al computer di riservare locazioni, nella RAM,

destinate a contenere un numero intero o, rispettivamente,

una “stringa” (sequenza di caratteri) con non più di 25 caratteri,

associando a queste “scatolette” i nomi  num; cognome

 

 

q       LEGGERE un’informazione

che venga battuta sulla tastiera

( = ricevere un input dalla tastiera),

memorizzando questo input

in una locazione nella RAM

(oppure, interpretare opportunamente

 come comandi i movimenti

 e i “clic” o “doppio clic” fatti col mouse)

 

 

Nel linguaggio di programmazione PASCAL,

l’istruzione  

ordina al computer,

quando l’utente avrà

digitato sulla tastiera un numero e premuto il tasto Invio,

di memorizzare quel numero nella locazione

della memoria centrale (RAM),

alla quale è stato associato il nome num

 

 

 

q       SCRIVERE SUL MONITOR,

o MANDARE IN STAMPA,

o SALVARE su di una memoria di massa,

un’informazione

o un’insieme di informazioni

 

 

 

In linguaggio PASCAL, l’istruzione  

ordina al computer di scrivere sul monitor

il valore che in quel momento ha la variabile num,

ossia il contenuto che c’è in quel momento

nella locazione di memoria, nella “scatoletta”,

alla quale è stato associato il nome num

 

 

q       ESEGUIRE CALCOLI

E CONFRONTI FRA NUMERI

 

 

In linguaggio PASCAL,

la moltiplicazione viene indicata con un asterisco *,

la divisione con  /,

la divisione intera con DIV e il suo resto con MOD,

maggiore o uguale”, “minore o uguale” si scrivono <=, >=,

diverso da” si scrive <>

 

 

 

q       MODIFICARE IL CONTENUTO

DI UNA LOCAZIONE DI MEMORIA

 

 

In linguaggio PASCAL, l’istruzione di “ASSEGNAZIONE

 (occhio: il simbolo grafico non è =, è :=)

ordina al computer di eseguire la somma dei contenuti

delle locazioni di memoria associate ai nomi a, b

e di depositare il risultato nella locazione di memoria c

(assegnare il valore ottenuto alla variabile c)

 

 

 

q       controllare

SE è verificata una certa condizione;

IN CASO AFFERMATIVO

eseguire una data istruzione

o blocco di istruzioni,

ALTRIMENTI

eseguire un’altra istruzione o blocco

 

 

 

 

 

In linguaggio PASCAL, l’istruzione

(o meglio, l’ “istruzione complessa” o “struttura”)

 

 

 

ordina al computer di controllare se  a<b

(cioè, se il contenuto della casella a nella RAM

 ha un valore numerico minore del contenuto della casella b);

 

in caso affermativo,

il computer dovrà eseguire l’istruzione  

(cioè, dovrà assegnare alla variabile max il valore b

 ossia dovrà porre nella “scatoletta” max in RAM

 lo stesso valore che c’è nella “scatoletta” b),

in caso negativo dovrà eseguire l’istruzione  

 

 

q       RIPETERE

un’istruzione,

o un gruppo

di istruzioni,

FINCHÉ

sarà verificata

una certa condizione

 

(CICLO A

CONTROLLO FINALE)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

oppure

 

FINTANTOCHE’

è verificata

una certa condizione,

RIPETERE

un’istruzione, o un

gruppo di istruzioni

 

(CICLO A

CONTROLLO INIZIALE)

 

 

In linguaggio PASCAL, un “pezzo” di programma potrebbe essere il seguente:

 

 

Questo programma prevede innanzitutto la lettura del numero intero a

(readln è una variante di read, e ordina al computer di andare a capo,

 sul monitor, dopo che l’utente ha inserito il valore di a)

e l’ “inizializzazione” della variabile k al valore 0.

Dopodiché, l’istruzione (o meglio, l’ “istruzione complessa” o “struttura”)

REPEAT … UNTIL …

ordina al computer di

RIPETERE il blocco delle tre istruzioni

 

I)   poni nella scatoletta k il valore che c’era prima, aumentato di 1     

      (incrementa di 1 il valore della variabile k:

        “ := ” non indica uguaglianza, indica assegnazione!)

 

II)  poni nella scatoletta mult il valore a*k  (l’asterisco sta per moltiplicazione)

 

III) scrivi sul monitor il contenuto che ha, in quel momento, la scatoletta mult

      (writeln è una variante di write, e ordina al computer

       di andare a capo dopo che ha scritto sul monitor)

 

FINCHE’ sarà verificata la condizione k = 5;

quando questa condizione si verificherà, il computer dovrà

uscire dal ciclo ed eseguire le istruzioni successive del programma.

 

L’esito sarà quello di mandare in output, sul monitor, i primi 5 multipli di a.

 

 

Ad esempio, se il valore della variabile a è 9,

il contenuto delle tre “scatolette” a, k e mult, nella RAM,

si evolverà, per effetto del programma, nel modo seguente:

 

 

 

 

Sempre in linguaggio PASCAL,

la ripetizione (“iterazione”) di un’istruzione o di un blocco di istruzioni

può anche essere comandata da una WHILE … DO …,

come nel pezzo di programma che segue (dove n è un intero):

 

 

Dopo la lettura, da tastiera, del valore di n,

l’istruzione (o meglio, l’ “istruzione complessa” o “struttura”)

WHILE … DO …

ordina al computer di:

scrivere sul monitor il valore di n (e andare a capo);

diminuire di 1 il valore della variabile n;

e CONTINUARE A ESEGUIRE (DO) questa coppia di istruzioni

FINTANTOCHE’ (WHILE) n si mantiene  (>= in PASCAL sta per  );

quando questa condizione non sarà più verificata, uscire dal ciclo.

 

L’effetto sarà quello di mandare in output,

sul monitor, un “conto alla rovescia” da n fino a 0.