Costanti e Variabili in Fortran

Nella programmazione in Fortran, le variabili e le costanti rivestono un ruolo fondamentale per gestire e manipolare i dati.

Le costanti non cambiano valore durante l'esecuzione, mentre le variabili possono essere modificate nel corso del programma. Inoltre, Fortran offre diversi tipi di dati intrinseci (integer, real, complex, logical, character), che consentono di rappresentare numeri, valori logici e stringhe di testo in modo preciso e affidabile.

In questa lezione vedremo come si definiscono costanti, variabili e relativi tipi, incluse le convenzioni di default typing ed explicit typing.

Costanti e Variabili

Una costante è un oggetto di dati definito prima dell'esecuzione di un programma, il cui valore non cambia durante l'esecuzione. Quando il compilatore Fortran incontra una costante, colloca il suo valore in una posizione nota della memoria; ogni riferimento a quella costante usa tale posizione.

Una variabile è un oggetto di dati che può cambiare valore durante l'esecuzione di un programma. (Il valore di una variabile Fortran può o non può essere inizializzato prima dell'esecuzione.) Quando il compilatore incontra una variabile, riserva uno spazio in memoria per essa, e le assegna un nome con cui la variabile viene poi identificata nel codice.

Ogni variabile Fortran in un'unità di programma deve avere un nome univoco (etichetta per la memoria). I nomi di variabile possono essere lunghi fino a 63 caratteri e possono contenere caratteri alfabetici, cifre e il carattere underscore (_). Il primo carattere deve sempre essere alfabetico.

Esempi di nomi di variabili validi:

time
distance
z123456789
I_want_to_go_home

Esempi di nomi di variabili non validi:

this_is_a_very_very_very_very_very_very_very_very_long_variable_name
(Troppo lungo)
3_days
(Il primo carattere è un numero)
A$
(Carattere $ non consentito)

Quando scriviamo un programma, è importante scegliere nomi significativi per le variabili, per rendere il codice più facile da leggere e mantenere. In Fortran non possiamo usare spazi nei nomi delle variabili, quindi spesso usiamo l'underscore (_) per simulare lo spazio.

Consiglio

Scelta dei Nomi di Variabile

Si consiglia di usare nomi di variabile significativi ogni volta che è possibile.

È anche consigliato includere un data dictionary nell'intestazione di ogni programma, ovvero un elenco delle variabili usate e della loro funzione (incluse le unità di misura se pertinenti). Questo aiuta a mantenere il programma nel tempo e a renderlo comprensibile ad altri.

Consiglio

Un'ottima pratica di programmazione è quella di creare un dizionario dei dati per ogni programma, al fine di facilitare la manutenzione del codice.

Fortran prevede cinque tipi di dati intrinseci (o built-in) per costanti e variabili:

  • INTEGER (numeri interi)
  • REAL (numeri in virgola mobile)
  • COMPLEX (numeri complessi)
  • LOGICAL (valori booleani)
  • CHARACTER (stringhe di caratteri)

Esistono anche tipi di dato derivati, speciali tipi di dati personalizzabili, che approfondiremo nelle lezioni successive.

Costanti e Variabili Intere

Il tipo intero gestisce valori interi (senza parte frazionaria).

  • Una costante intera è qualunque numero intero (senza decimali). Se il valore è positivo, può essere scritto con o senza il segno +. Non si possono inserire virgole all'interno di un intero né un punto decimale (che lo renderebbe un valore real).
  • Una variabile intera è una variabile che contiene un valore di tipo intero.

Esempi di costanti intere valide sono:

0
-999
123456789
+17

Esempi di costanti intere non valide sono:

1,000,000   (Le virgole non sono consentite)
-100.       (Contiene un punto decimale, quindi non è un intero)

Le variabili di tipo intere sono in genere memorizzate in una word (32-64 bit o più, a seconda dell'architettura).

Quasi tutti i compilatori Fortran supportano interi con più di una lunghezza (16, 32, 64 bit). Queste diverse lunghezze prendono il nome di kinds; Fortran ha un meccanismo per specificare quale kind usare. Analizzeremo questo meccanismo più avanti nelle prossime lezioni.

Costanti e Variabili Reali

Il tipo reale rappresenta numeri in formato reale (o meglio in floating-point). A differenza degli interi, i reali possono avere componenti frazionarie.

  • Una costante reale è un numero scritto con un punto decimale (es. 10., -999.9) o con una notazione scientifica (es. +1.0E-3, 123.45E20). Non sono consentite virgole all'interno di numeri reali.
  • Una variabile reale è una variabile che contiene un valore di tipo real.

Esempi validi di costanti reali:

10.
-999.9
+1.0E-3
123.45E20
0.12E+1

Esempi non validi di costanti reali:

1,000,000.
(Virgole non consentite)
111E3
(Manca il punto decimale nella mantissa)
-12.0E1.5
(I punti decimali non sono ammessi negli esponenti)

I numeri reali in Fortran sono memorizzati in due parti: la mantissa e l'esponente.

Il numero di bit allocati alla mantissa influisce sulla precisione (quante cifre significative sono note), mentre i bit allocati all'esponente influiscono sull'intervallo di rappresentazione (massimo e minimo valore rappresentabile).

Quasi tutti i computer moderni usano lo standard IEEE 754 per i numeri in virgola mobile. Fortran supporta reali di varie dimensioni (32 bit, 64 bit, 128 bit, ecc.). Così come per gli interi, esistono diversi kinds di real.

Costanti e Variabili di Tipo Carattere

Il tipo carattere gestisce stringhe di caratteri alfanumerici.

  • Una costante di tipo carattere è una stringa racchiusa tra singoli ('...') o doppi apici ("..."). Può essere lunga da 0 caratteri (vuota) a un numero massimo dipendente dal compilatore.
  • Una variabile di tipo carattere è una variabile che contiene un valore di tipo carattere (una stringa).

Esempi validi di costanti di tipo carattere:

'This is a test!'
' '
'{^}'
"3.141593"

Esempi non validi:

This is a test!   (Mancano gli apici)
'This is a test!" (Apici non corrispondenti)
"Try this one.'   (Apici squilibrati)

Se nella stringa serve un apostrofo, possiamo duplicarlo ('') oppure usare le virgolette doppie. Esempio:

'Man''s best friend'
"Man's best friend"

Tipizzazzione delle Variabili: Esplicita e di Default

Quando vediamo una costante, è facile distinguere il tipo (intero se non c'è punto decimale, reale se c'è, carattere se racchiusa tra apici).

Per le variabili non è così immediato. In Fortran ci sono due modi per definire il tipo di una variabile:

  • Tipizzazione di Default: per convenzione storica, i nomi di variabile che iniziano con i, j, k, l, m, n sono intere, mentre quelli che iniziano con altre lettere sono reali. (Non esiste una tipizzazione di default per il tipo carattere.)
  • Tipizzazione Esplicita: possiamo dichiarare esplicitamente il tipo di una variabile in cima al programma, con istruzioni come INTEGER :: var1, var2 o REAL :: var1, var2. Queste istruzioni sono non eseguibili e vanno poste dopo la dichiarazione PROGRAM.

Esempio:

PROGRAM example
  INTEGER :: day, month, year
  REAL :: second
  ...
  (istruzioni eseguibili)
END PROGRAM example

Per le variabili di tipo carattere non esistono nomi predefiniti, quindi devono essere sempre dichiarate con CHARACTER(len=<n>) :: var1, var2, .... Se <n> non è specificato, la lunghezza di default è 1. Possiamo dichiarare diverse lunghezze in righe separate.

Ad esempio:

CHARACTER(len=10) :: name
CHARACTER(len=20) :: address

Consistenza e Precisione delle Costanti

È importante mantenere le costanti fisiche coerenti all'interno di un programma (es. il valore di \pi).

Dovremmo scriverle con la precisione massima consentita. Se la precisione del nostro tipo di dati reale è di 7 cifre significative, bisognerebbe scrivere ad esempio 3.141593 anziché 3.14.

Il modo migliore per garantire coerenza e precisione è assegnare un nome alla costante e poi usare quel nome in tutto il programma. In Fortran si possono creare delle costanti con nome usando l'attributo PARAMETER in una dichiarazione di tipo. Per esempio:

REAL, PARAMETER :: PI = 3.141593

In tal modo, dovunque useremo PI nel programma, otterremo lo stesso valore di 3.141593. Anche le costanti di tipo carattere possono essere dichiarate con CHARACTER, PARAMETER :: ERROR_MESSAGE = 'Unknown error!'.

Consiglio

Consistenza delle costanti

Una buona pratica di programmazione è quella di Mantenere le costanti fisiche coerenti e precise in tutto il programma. Per migliorare la leggibilità, si consiglia di assegnare nomi significativi alle costanti e di riferirsi ad esse per nome nel codice.

In Sintesi

I concetti chiave affrontati in questa lezione sono:

  • Costanti: valori definiti prima dell'esecuzione, che non cambiano. In Fortran, i tipi principali sono integer, real, complex, logical e character.
  • Variabili: elementi che possono variare durante l'esecuzione. Occupano uno spazio in memoria etichettato da un nome.
  • Nomi di variabile: in Fortran possono avere fino a 63 caratteri, contenere lettere, cifre e underscore, ma il primo carattere deve essere alfabetico.
  • Nomi significativi: aiuta la leggibilità del codice. Sostituire gli spazi con underscore rende i nomi più chiari.
  • Dizionario dei Dati: un elenco descrittivo delle variabili (significato, unità di misura, ecc.) nell'intestazione del programma, utile a semplificare la manutenzione.
  • Tipi intrinseci: integer, real, complex, logical e character. Esistono kinds per gestire diverse precisioni o formati.
  • Default typing: variabili che iniziano con i, j, k, l, m, n sono integer, le altre real (se non specificato diversamente).
  • Explicit typing: si usano istruzioni come INTEGER :: var o CHARACTER(len=10) :: str dopo la riga PROGRAM.
  • Costanti denominate: usando PARAMETER, assegniamo un nome (es. PI) a un valore costante (es. 3.141593), ottenendo precisione e coerenza nel programma.