#arrays #fortran #gfortran #fortran90
Вопрос:
Я пытаюсь создать среднее значение, дисперсию и стандартное отклонение массива пользовательского ввода, но я пытаюсь сохранить все в подпрограмме, кроме сбора данных.
Program dyn_array implicit none character (1) response integer :: N,data call stats(N) Print *, "Enter the size of array:" read(*,*) N Print *, "Enter the values of the array:" read*, data contains subroutine stats(N) implicit none integer, dimension(:),allocatable :: v integer, intent(inout)::N real :: arraysize,sumsquare,datas,mean,variance,std,a,tot integer :: i,j,k,x allocate(v(data),stat= x) if (x/=0) stop jloop: do j = 1,N read*,v(data) end do jloop tot=sum(v) sumsquare=0.0 arraysize = size(v) N_loop: do K_loop:do datas=v(data) * v(data) sumsquare=sumsquare datas end do K_loop mean=sum(v)/arraysize variance=(sumsquare-tot*tot/arraysize)/arraysize std=sqrt(variance) Print*, "Mean =",mean Print*, "Variance =",variance Print*, "Standard deviation =",std Print*, "Do you want to repeat for another array?" read*, response If (response =="y" .or. response == "Y") then deallocate(v) end if end do N_loop End subroutine End Program dyn_array
Комментарии:
1. Вы
call stats(N)
, прежде чем прочитать значенияN
иdata
использовать их в этом вызове. Внутри подпрограммы есть и другие проблемы, связанные сv
и так далее, но вы никогда не получите правильный ответ, позвонив в таком порядке.