program statvett1 implicit none integer::i,n,indxmax,indymax real,allocatable,dimension(:)::x,y real:: xmedia,ymedia,xmax,ymax interface subroutine readdati (x,y,n) integer:: n real,allocatable ,dimension(:)::x,y end subroutine readdati subroutine readdatiterm (x,y,n) integer,intent(out):: n real,allocatable ,dimension(:)::x,y end subroutine readdatiterm real function vmed(v,n) integer:: n real ,dimension(1)::v end function vmed real function vmin(v,n) integer:: n real ,dimension(1)::v end function vmin real function varianza(v,vmedia,n) integer,intent(in):: n real,intent(in) ,dimension(1)::v real,intent(in) :: vmedia end function varianza subroutine vmax(v,n,vmx,indvmax) integer,intent(in):: n real,intent(in) ,dimension(1)::v integer,intent(out):: indvmax real,intent(out):: vmx end subroutine vmax end interface call readdatiterm (x,y,n) xmedia=vmed(x,n) ymedia=vmed(y,n) call vmax(x,n,xmax,indxmax) call vmax(y,n,ymax,indymax) write(6,*)'Numero dati =',n write(6,*)'xmedia=',xmedia write(6,*)'ymedia=',ymedia write(6,*)'xvar=',varianza(x,xmedia,n) write(6,*)'yvar=',varianza(y,ymedia,n) write(6,*)'xmax=',xmax," all'indice: ",indxmax write(6,*)'ymax=',ymax,' all''indice: ',indymax write(6,*)'xmin=',vmin(x,n) write(6,*)'ymin=',vmin(y,n) end program statvett1 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 subroutine readdati (x,y,n) implicit none integer:: n real,allocatable ,dimension(:)::x,y integer::i read(5,*)n allocate (x(n),y(n)) do i=1,n read(5,*) x(i),y(i) enddo end real function vmed(v,n) implicit none integer:: n real ,dimension(1)::v integer::i vmed=0 do i=1,n vmed=vmed+v(i) enddo vmed=vmed/n end function vmed subroutine vmax(v,n,vmx,indvmax) implicit none integer,intent(in):: n real,intent(in) ,dimension(1)::v integer,intent(out):: indvmax real,intent(out):: vmx integer::i vmx=v(1) indvmax=1 do i=2,n if(vmx < v(i))then vmx=v(i) indvmax=i endif enddo end subroutine vmax real function vmin(v,n) implicit none integer:: n real ,dimension(1)::v integer::i vmin=v(1) do i=1,n if(vmin > v(i))vmin=v(i) enddo end function vmin real function varianza(v,vmedia,n) implicit none integer,intent(in):: n real,intent(in) ,dimension(1)::v real,intent(in) :: vmedia integer::i varianza=0 do i=1,n varianza=varianza+(v(i)-vmedia)**2 enddo varianza=varianza/n end function varianza