PROGRAM somme_int IMPLICIT NONE INTEGER, PARAMETER :: LunVett=1000 REAL(8), DIMENSION(LunVett) :: a, b REAL(8) :: st, sd, sp ! ! Inizializzazione CALL inizia ! ! Calcolo matrice C CALL SommaTuttiEll(st) CALL SommaDispariEll(sd) CALL SommaPariEll(sp) ! ! Stampa dei risultati CALL stampa ! STOP CONTAINS SUBROUTINE inizia IMPLICIT NONE INTEGER :: i REAL(8) :: v ! DO i = 1, LunVett a(i) = 1.0D0 + 1.0D0/i b(i) = 2.0D0 + 2.0D0/i END DO ! RETURN END SUBROUTINE inizia SUBROUTINE SommaTuttiEll(s) IMPLICIT NONE REAL(8) :: s INTEGER :: i ! ! Esiste una soluzione piu' elegante? s = 0.0D0 DO i = 1, LunVett s = s + a(i) + b(i) END DO ! RETURN END SUBROUTINE SommaTuttiEll SUBROUTINE SommaDispariEll(s) IMPLICIT NONE REAL(8) :: s INTEGER :: i ! ! Esiste una soluzione piu' elegante? s = 0.0D0 DO i = 1, LunVett, 2 s = s + a(i) + b(i) END DO ! RETURN END SUBROUTINE SommaDispariEll SUBROUTINE SommaPariEll(s) IMPLICIT NONE REAL(8) :: s INTEGER :: i ! ! Esiste una soluzione piu' elegante? s = 0.0D0 DO i = 2, LunVett, 2 s = s + a(i) + b(i) END DO ! RETURN END SUBROUTINE SommaPariEll SUBROUTINE stampa IMPLICIT NONE INTEGER :: i ! PRINT*,"La somma degli elementi dispari dei vettori A, B e' ", sd PRINT*,"La somma degli elementi pari dei vettori A, B e' ", sp PRINT*,"La somma di tutti gli elementi dei vettori A, B e' ", st, " = ",sd + sp ! RETURN END SUBROUTINE stampa END PROGRAM somme_int