OPS > Pseudolinguaggio

LA METAFORA

In una cassettiera ci sono dei cassetti individuati dalle lettere A, B, C, D, E, F. In ciascun cassetto ci può essere un foglietto su cui è scritto un numero intero.

La scrittura

significa: “sommare i numeri scritti sui foglietti dei cassetti A e B, scrivere il risultato su un nuovo foglietto e inserire questo foglietto nel cassetto C, dopo aver eliminato il foglietto (eventualmente) presente in C”.

Se all’inizio nei foglietti di A e B sono scritti rispettivamente i numeri 12 e 7, a operazione eseguita in C si trova un foglietto su cui è scritto 19.

Così, la scrittura:

significa: “sommare i numeri scritti sui foglietti dei cassetti C e A, sottrarre alla somma il numero scritto sul foglietto del cassetto B, scrivere il risultato su un nuovo foglietto e inserire questo foglietto nel cassetto D dopo aver eliminato il foglietto (eventualmente) presente in D”.

N.B. Per brevità diciamo, ad esempio, “il numero contenuto in C” invece di “il numero scritto sul foglietto contenuto in C”.

L’ASPETTO FORMALE

Invece di parlare di cassetti e di numeri scritti su foglietti (come nell’esercizio precedente), si può ricorrere a un’altra descrizione, più astratta.

Le lettere maiuscole A, B, C, … sono chiamate “variabili” (invece di cassetti) e i numeri sui foglietti sono detti “valori” di quelle variabili.

La sequenza di calcoli dell’ESERCIZIO precedente può es-sere presentata come la procedura seguente.

Con la scrittura

si dice che esistono sei cassetti (detti appunto variabili) e che sui foglietti in ognuno dei cassetti può essere scritto (solo) un numero intero.

Con la scrittura “input” si assegnano dei valori a certe variabili (si scrivono dei numeri sui foglietti contenuti in certi cassetti).

Con la scrittura “output” si fa vedere il valore di certe variabili (si leggono i numeri sui foglietti contenuti in certi cassetti).

Se si esegue la procedura PROVA1 e in input alle variabili A, B, C vengono assegnati rispettivamente i valori 5, 8 e 3, in output, per le variabili D, E, F vengono resi visibili rispettivamente i valori 13, 6 e 10 che sono soluzione del problema precedente, di cui PROVA1 è la trascrizione formale.

N.B. Ogni riga della procedura si dice statement (o istruzione).

UN NUOVO ESEMPIO

Si ricordi che quando si assegna un nuovo valore a una variabile (cioè si inserisce un nuovo foglietto in un cassetto) l’eventuale valore in essa preesistente viene distrutto (cioè il vecchio foglietto viene buttato e non è più recuperabile).

Ricapitolando, con le lettere A, B, C, … (o in generale con nomi scritti con lettere maiuscole e numeri) si indicano, in una procedura, delle variabili che possono acquisire valori mediante

  • una istruzione (o statement) “input”,
  • una istruzione (o statement) di assegnazione.

Si consideri la procedura ESEMPIO seguente, brevemente commentata.

Se in input alle variabili A e B vengono assegnati rispettivamente i valori 5 e 9, in output vengono restituiti i valori 32, 14 e 18 rispettivamente per A, C1, D.

L’ALTERNATIVA “if”

Durante la svolgimento di calcoli in una procedura si può porre una “alternativa” decisa dal valore di un predicato: se il predicato è vero si fanno alcune cose, se è falso se ne fanno altre.

In una procedura, l’alternativa può essere descritta, per esempio, con la seguente struttura

Se per esempio il valore di A è 2 e quello di B è 5, dopo l’alternativa il valore in output di M è 5.

Naturalmente al posto di “A > B” si possono usare altri predicati, costruiti confrontando i valori di certe variabili: per esempio “A = B” oppure “A < B”.

Quando manca il ramo “else” (cioè quando occorre fare alcune cose se il predicato è vero, ma non si deve fare nulla se è falso), si può usare la forma abbreviata del costrutto “if” come nel seguente esempio (che ha lo stesso significato del precedente):

LA RIPETIZIONE “for”

In una procedura si può prevedere di eseguire un insieme di operazioni (detto ciclo) un certo numero di volte; nell’esempio che segue il ciclo è fatto di due operazioni che vengono ripetute 4 volte:

I valori di output sono: per A 10 (la somma dei 4 valori di K) e per B 30 (la somma dei quadrati dei valori di K).

LA RIPETIZIONE “while”

La ripetizione di un gruppo di azioni può essere comandata non solo con la struttura “for” già vista, ma anche con la struttura “while”, illustrata dal seguente esempio.

Se il predicato A < B è vero, il ciclo viene ripetuto; quando diventa falso si passa alla esecuzione della istruzione successiva a “endwhile”.

In questo caso il valore di B rimane fisso a 10, mentre quello di A cambia dopo ogni iterazione assumendo i seguenti valori: 1, 5, 14.

Dopo la terza iterazione il valore di A non è più minore di quello di B e il ciclo si arresta: in output si ha quindi 14.

VARIABILI REALI

Oltre a valori interi le variabili possono contenere valori razionali, cioè numeri “con la virgola”: in questo contesto, però, si userà sempre il “.” come separatore decimale. Le variabili di questo tipo si dicono “float”. Corrispondentemente alle variabili di tipo float si usano le costanti di tipo float: si scrivono col punto decimale seguito da almeno una cifra, come in

  • 5.45
  • 5.0
  • 45362.9877

Il seguente è un esempio di procedura che usa variabili float.

Si ricorda che le normali operazioni aritmetiche sono indicate con +, −, ×, / (talvolta con ÷).

Spesso è usato anche l’elevamento a potenza, col simbolo ^.
Per esempio 2^3 = 8; A^B: se A ha valore 2 e B ha valore 3, il risultato dell’espressione è 8; se A ha valore 2.0 e B ha valore 3, il risultato dell’espressione è 8.0.

VARIABILI STRINGA

Oltre a valori numerici le variabili possono contenere stringhe, cioè sequenze di caratteri.

Le variabili di questo tipo si dicono “string”.

Corrispondentemente alle variabili di tipo string si usano le costanti di tipo string: si scrivono come sequenze di caratteri racchiuse tra apici; per esempio:

  • ‘alpha’
  • ‘Giuseppe’
  • ‘1200’
  • ‘’
  • ‘ ’

N.B. La (costante) stringa ‘1200’ non è il numero intero 1200: in particolare non si può sommare o sottrarre; la costante ‘’ è la stringa vuota; la costante ‘ ’ è la stringa spazio.

Consideriamo solo tre operazioni tra stringhe: la concatenazione, la estrazione e la determinazione della lunghezza.

I seguenti sono esempi di procedure che usano variabili string e intere.

 

Per il confronto delle stringhe sono disponibili i predicati: = e ≠.

Seguono esempi di problemi che riguardano lo pseudolinguaggio.

PROBLEMA1

Si consideri la seguente procedura PROVA1.

I valori in input sono: 4 per A, 2 per B; determinare i valori di output di A (8), B (60), C (6), D (8).

COMMENTO

Il problema si risolve eseguendo passo passo le operazioni indicate dalla procedura.

Si noti che i valori di certe variabili cambiano più volte: per esempio le variabili A e B acquisiscono un primo valore nello statement input e successivamente cambiano valore con le ultime due operazioni.

PROBLEMA 2

Si consideri la seguente procedura PROVA2.

I valori di input per A è 5 e per B sono rispettivamente: 9, 3, 7, 2, 8, 5, 1, 4, 4, 5.

Determinare i valori di output (M=25, N=15).

COMMENTO

Basta eseguire, passo a passo, le operazioni indicate: in N va la somma di tante volte il valore di A quante volte questo è più piccolo di (quello di) B (5 volte); in M va la somma di tante volte il valore di A quante volte questo è più piccolo di (quello di) B (3 volte).

PROBLEMA 3

Si consideri la seguente procedura (scritta in maniera sintatticamente scorretta: il simbolo X non è definito).

Trovare, tra le variabili dichiarate nella procedura, il nome da sostituire a X (C) per ottenere in output 21 per D se i valori in input sono 2 per A, 5 per B e 7 per C.

COMMENTO

Poiché A, B, C valgono rispettivamente 2, 5 e 7, occorre che il risultato di A+B+C+X cioè 2+5+7+X valga 21; questo richiede che il valore di X sia 7, cioè quello di C.

Un’altra maniera di procedere alla soluzione è di esaminare tutti i possibili casi: poiché sono dichiarate quattro variabili: A, B, C, D, allora si possono esaminare i risultati delle quattro possibili sostituzioni:

  1. l’espressione A+B+C+A vale 2+5+7+2 = 16
  2. l’espressione A+B+C+B vale 2+5+7+5 = 19
  3. l’espressione A+B+C+C vale 2+5+7+7 = 21
  4. l’espressione A+B+C+D vale 2+5+7+0 = 14

La soluzione segue immediatamente.

PROBLEMA 4

Si consideri la seguente procedura PROVA4.

I valori di input per A è: ‘9, a, b, 2, ac, 5, a, 4, 4a, 5b’.

Determinare il valore di output per C (4).

COMMENTO

Basta eseguire, passo a passo, le operazioni indicate: in C va il numero di volte che la lettera ‘a’ compare nella stringa data in input.

Si noti che |?A (il numero di caratteri di A) vale 31: naturalmente si contano anche le virgole e gli spazi.



ESERCIZIO 3

Si consideri la seguente procedura PROVA1.

Determinare il valore di output di K.

ESERCIZIO 4

Si consideri la seguente procedura PROVA2.

Trovare i valori di output.


Calcolare i 3 valori di P e i 3 di Z corrispondenti ai valori 3, 4 e 5 di N