25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

300 Unità di Programma<br />

C:\MYPROG>prova_triangolo<br />

Coordinate del primo vertice:<br />

ascissa: 5<br />

ordinata: 1<br />

Coordinate del secondo vertice:<br />

ascissa: 3<br />

ordinata: 3<br />

Coordinate del terzo vertice:<br />

ascissa: 0<br />

ordinata: -2<br />

L’area del triangolo e’: 8.000<br />

Naturalmente, sfruttando la definizione dei tipi di dati punto e triangolo e dell’operatore<br />

binario .DIST. è possibile definire in maniera assolutamente immediata anche un nuovo operatore<br />

unario .PERIMETRO. che applicato ad un oggetto triangolo restituisca la somma delle<br />

distanze fra i vertici.<br />

E’ da precisare che anche per gli operatori definiti dall’utente esistono regole di precedenza.<br />

A tal proposito, è bene tenere a mente che gli operatori unari definiti dall’utente hanno la<br />

precedenza più alta fra tutti gli operatori, mentre gli operatori binari definiti dall’utente hanno<br />

la precedenza più bassa. Un operatore definito dall’utente che abbia lo stesso nome di un<br />

operatore intrinseco conserverà la precedenza di quest’ultimo. A titolo di esempio, se .OPUN. e<br />

.OPBIN. sono due operatori non intrinseci, di cui il primo unario ed il secondo binario, allora<br />

la seguente espressione:<br />

.OPUN.e**j/a.OPBIN.b+c.AND.d<br />

risulta perfettamente equivalente a:<br />

(((.OPUN.e)**j)/a).OPBIN.((b+c).AND.d)<br />

5.17.3 Overloading dell’operatore di assegnazione<br />

Quando si usano tipi di dati derivati può essere necessario estendere il significato dell’operatore<br />

di assegnazione (”=”). Anche in questo caso è necessario un interface block, questa volta, però,<br />

relativo ad una subroutine.<br />

Ad esempio, si supponga di lavorare con due variabili, ax e px, dichiarate al modo seguente:<br />

REAL :: ax<br />

TYPE (punto) :: px<br />

e che nel programma sia necessaria la seguente assegnazione:<br />

ax = px<br />

cioè sia necessario assegnare un valore di tipo reale ad una variabile di tipo punto. Tale<br />

operazione è, normalmente, non valida a meno di non essere, in qualche modo, esplicitamente

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!