25.06.2013 Views

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

Il Linguaggio Fortran 90/95

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

5.17 Overloading 299<br />

! Parametri formali e tipo della funzione<br />

TYPE(triangolo),INTENT(IN) :: mytr<br />

REAL :: area ! area del triangolo<br />

! Variabili locali<br />

REAL,DIMENSION(3) :: vet1, vet2 ! vettori che ospiteranno le<br />

! coordinate dei vertici<br />

REAL :: det ! determinante della matrice delle coordinate<br />

! *** Sezione esecutiva ***<br />

! Assemblaggio dei vettori delle coordinate<br />

vet1=(/mytr%P1%x, mytr%P2%x, mytr%P3%x/)<br />

vet2=(/mytr%P1%y, mytr%P2%y, mytr%P3%y/)<br />

! Valutazione dell’area del triangolo<br />

det= DOT_PRODUCT(vet1,CSHIFT(vet2,SHIFT=-1)) - &<br />

DOT_PRODUCT(vet2,CSHIFT(vet1,SHIFT=-1))<br />

area = 0.5*ABS(det)<br />

END FUNCTION area<br />

END MODULE defin_area<br />

Un esempio di applicazione del nuovo operatore è descritto nel seguente programma di test:<br />

PROGRAM prova_triangolo<br />

USE defin_area<br />

IMPLICIT NONE<br />

TYPE(triangolo) mytr<br />

REAL :: x1, x2, y1, y2, x3, y3<br />

! Sezione esecutiva<br />

! Fase di input<br />

WRITE(*,*) "Coordinate del primo vertice: "<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ascissa: "; READ(*,*) x1<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ordinata: "; READ(*,*) y1<br />

WRITE(*,*) "Coordinate del secondo vertice: "<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ascissa: "; READ(*,*) x2<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ordinata: "; READ(*,*) y2<br />

WRITE(*,*) "Coordinate del terzo vertice: "<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ascissa: "; READ(*,*) x3<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) " ordinata: "; READ(*,*) y3<br />

mytr = triangolo(punto(x1,y1),punto(x2,y2),punto(x3,y3))<br />

! Applicazione dell’operatore .AREA. e output del risultato<br />

WRITE(*,’(1X,A)’,ADVANCE=’NO’) "L’area del triangolo e’: ",<br />

WRITE(*,’(1X,F7.3)’) .AREA.mytr<br />

STOP<br />

END PROGRAM prova_triangolo<br />

Può giovare considerare un semplice esempio di utilizzo di questo programma:

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

Saved successfully!

Ooh no, something went wrong!