program calcolointegrale implicit none real,allocatable,dimension(:)::x,y integer::i,n real :: xint interface subroutine readdatiterm (x,y,n) integer,intent(out):: n real,allocatable ,dimension(:)::x,y end subroutine readdatiterm real function integrale(x,y,n) implicit none integer,intent(in)::n real,intent(in)::x(:),y(:) end function integrale real function integrale90_1(x,y,n) implicit none integer,intent(in)::n real,intent(in)::x(:),y(:) end function integrale90_1 end interface call readdatiterm (x,y,n) xint=integrale(x,y,n) write(6,*) 'Stile F77 Integrale=',xint xint=integrale90_1(x,y,n) write(6,*) 'Stile F790_1 Integrale=',xint end program calcolointegrale real function integrale(x,y,n) implicit none integer,intent(in)::n real,intent(in)::x(:),y(:) integer::i integrale=0 do i=2,n integrale=integrale+((y(i)+y(i-1))*(x(i)-x(i-1))) enddo integrale=integrale/2.0 end function integrale real function integrale90_1(x,y,n) implicit none integer,intent(in)::n real,intent(in)::x(:),y(:) real, allocatable::trapezi(:) integer::i allocate (trapezi(n-1)) trapezi=(y(2:n)+y(1:n-1))*(x(2:n)-x(1:n-1)) integrale90_1=0 do i=1,n integrale90_1=integrale90_1+trapezi(i) enddo integrale90_1=integrale90_1/2 end function integrale90_1 subroutine readdatiterm (x,y,n) implicit none integer,intent(out):: n real,allocatable ,dimension(:)::x,y real:: xx,yy character (len=30)::nomefile integer::i,ierr 23 write(6,*)'Nome file' read(5,'(a)')nomefile open(unit=50,file=nomefile,status='old',err=23) i=1 read(50,*,iostat=ierr) xx,yy do while(ierr == 0) i=i+1 read(50,*,iostat=ierr) xx,yy enddo if (ierr > 0) then write(6,*)'Errore numero:', ierr stop endif n=i-1 rewind(50) write(6,*) 'primo giro :n =',n allocate (x(n),y(n)) do i=1,n read(50,*) x(i),y(i) enddo close(50) end subroutine readdatiterm