В этом практикуме мы рассмотрим код стандарта fortran77 на примере программы вычисления элементарных статистик. Программа взята из Библиотеки численного анализа НИВЦ МГУ
Подпрограмма: BS01R
Назначение: вычисление среднего, среднего отклонения, среднеквадратического отклонения и дисперсии заданной выборки
Подпрограмма: BS01R
Назначение: вычисление среднего, среднего отклонения, среднеквадратического отклонения и дисперсии заданной выборки
SUBROUTINE BS01R(DATA,N,AVE,ADEV,VAR,SDEV)
DIMENSION DATA(N)
INTEGER N,J
REAL DATA,AVE,ADEV,VAR,SDEV,S,P,ABS,SQRT
C IF(N.LE.1)PAUSE 'N must be at least 2'
S=0.
DO 11 J=1,N
S=S+DATA(J)
11 CONTINUE
AVE=S/N
ADEV=0.
VAR=0.
DO 12 J=1,N
S=DATA(J)-AVE
ADEV=ADEV+ABS(S)
P=S*S
VAR=VAR+P
12 CONTINUE
ADEV=ADEV/N
VAR=VAR/(N-1)
SDEV=SQRT(VAR)
RETURN
END
---------------------------------------------------------------
Рассмотрим особенности синтаксиса программы:
2) Пятая строчка начинается с символа "С" - это значит, что данная строка за комментирована, т.е. компилятор будет игнорировать эту строчку.
3) Циклы оформлены в виде меток, т.е. тело цикла для переменной J заканчивается меткой "11". Рядом с меткой 11 (которая может занимать с 2 по 5 включительно позиции от начала строки ) стоит оператор CONTINUE. Он ничего не выполняет, но необходим для объявления самой метки. Саму по себе метку (без других операторов, таких как CONTINUE) ставить нельзя.
4) При присваивании действительным переменным типа real ставится точка после целой части (S=0.) . Это не требование синтаксиса, но страхует от некоторых ошибок.
5) SQRT и ABS - не переменные, а встроенные функции фортрана извлечения квадратного корня и взятия модуля. Хотя по синтаксису они мало отличаются от массивов, обычно эти функции "подкрашиваются" IDE, т.е. той программной оболочкой, где Вы пишете программу.
Комментариев нет:
Отправить комментарий