Home / Indice sezione
 www.icosaedro.it 

M2 Report

<= Espressioni stringaRegole di scope =>
Frontespizio
Introduzione
Caratteristiche
Un semplice esempio
Moduli
Sezione IMPORT
Sezione CONST
Sezione TYPE
Tipo FORWARD
Sezione VAR
Sezione FUNCTION
Sezione BEGIN
Stringhe letterali
Sottostringhe
Commenti
Costanti predefinite
Variabili predefinite
Funzioni predefinite
Istruzione di assegnamento
Istruzione per la chiamata di funzione
Ordine di valutazione degli argomenti attuali
Istruzione IF
Istruzione SWITCH
Istruzione FOR
Istruzione WHILE
Istruzione REPEAT
Istruzione LOOP
Istruzione TRY
Istruzione RAISE ERROR
Istruzione RETURN
Espressioni logiche
Espressioni intere
Espressioni reali
Espressioni stringa
Espressioni tra tipi strutturati
Regole di scope
M2 per programmatori C
M2 per programmatori Java
Rappresentazione dei dati in memoria
Keywords
Messaggi di errore a runtime
Sintassi
 

Espressioni tra tipi strutturati

Le espressioni di tipo ARRAY (RECORD) sono costituite dal valore NIL, oppure da una variabile di tipo ARRAY (RECORD) o da una funzione che ritorna ARRAY (RECORD) o da un costruttore di ARRAY (RECORD). Non sono previsti operatori di calcolo tra questi tipi di dati.

Prossimo elemento in array. La forma array[count(array)] è così comune che M2 permette di omettere l'indice. In questo modo array[] è il prossimo elemento disponibile dell'array. Ovviamente si tratta di un "valore sinistro" adatto solo per gli assegnamenti e come argomento formalei VAR di funzione.

Costruttore di ARRAY. Il modo diretto per assegnare i valori agli elementi di un ARRAY è una sequenza di assegnamenti come questa:

VAR a: ARRAY OF INTEGER
...
a[0] = 4
a[1] = 7
a[2] = 9

Il costruttore di ARRAY permette di scrivere tra parentesi graffe l'elenco degli elementi dell'array. Ogni elemento dell'array deve essere una espressione di tipo corrispondente al tipo degli elementi dell'array. Il costruttore produce un nuovo array che può essere assegnato o passato come argomento attuale di funzione:

a = { 4, 7, 9 }

Questa istruzione di assegnamento produce lo stesso array dell'esempio precedente. Notare che il costruttore di array produce un nuovo array, e quindi l'assegnamento comporta la cancellazione di tutti i valori precedenti. Il costruttore di array può essere conveniente per passare un elenco di parametri a una funzione. La funzione PrintList stampa un elenco di stringhe separate dal separatore indicato:

FUNCTION PrintList(a: ARRAY OF STRING, sep: STRING)
VAR i: INTEGER
BEGIN
    FOR i=0 TO count(a)-1 DO
        IF i > 0 THEN  print(sep)  END
        print(a[i])
    END
END

...
PrintList( {"left", "right", "top", "bottom"}, "/")

Il costruttore di array vuoto {} è ammesso e alloca un array con zero elementi. Notare che un array con zero elementi differisce da un array NIL. Questa istruzione IF discrimina i tre casi:

IF a = NIL THEN
    print("array NIL")
ELSIF count(a) = 0 THEN
    print("array allocato ma vuoto (zero elementi)")
ELSE
    print("array con " + count(a) + " elementi")
END

Costruttore di RECORD. Permette di creare un valore di tipo RECORD specificando i valori dei suoi campi. Un elenco di assegnamenti come questo:

VAR punto: RECORD x, y: REAL END
...
punto[x] = R*cos(angolo)
punto[y] = R*sin(angolo)
può essere riscritto convenientemente sfruttando il costruttore di record:
punto = { R*cos(angolo), R*sin(angolo) }

E' necessario specificare sempre l'elenco completo dei campi. L'ordine e il tipo dei campi deve corrispondere al tipo del record da creare.

Il costruttore di array e il costruttore di record si possono combinare:

TYPE
    Punto = RECORD x, y: REAL END
    Poligono = ARRAY OF Punto
CONST
    lato = 7.0
VAR
    facciata, tetto: Poligono
    casa: ARRAY OF Poligono
BEGIN
    facciata = { {0.0, 0.0}, {lato, 0.0}, {lato, lato}, {0.0, lato} }
    tetto = { {0.0, lato}, {lato, lato}, {lato/2.0, 2.0*lato} }
    casa = { facciata, tetto }
    DisegnaPoligoni(casa)
END
 
<= Espressioni stringaRegole di scope =>

Umberto Salsi

Contatto
Mappa
Home / Indice sezione