Основи на езика fortran



Дата25.07.2016
Размер175.37 Kb.
#5979
Основи на езика FORTRAN.

За създател на езика FORTRAN се смята групата под ръководството на Джон Бекъс, която през 1957 г. създава език за транслиране на формули (FORmula TRANslator). В резултат на това е създаден програмен език от високо ниво за решаване на научните задачи на фирмата IBM.

В началото той е ориентиран за работа с перфокарти и отражение на това все още се забелязва в структурите на програмите. Оттогава той е станал един от най-популярните научни езици за програмиране и почти всички производители на PC вграждат компилатор за него. Тъй като версиите на FORTRAN за различни компилатори можело да са различни, то през 1966 г. Американския Национален Институт по Стандартизация (ANSI) създава универсален стандарт (ANSI 66) и на всички производители е предложено да предоставят компилатори, удовлетворяващи този стандарт. През 1977 г. ANSI усъвършенства този стандарт - появява се FORTRAN ANSI 77. През 90-те години се появяват Fortran 90 и Fortran 95, в които са внесени изменения при операциите над масиви, паралелни цикли и др. Последният стандарт е ISO/IEC 1539:1997.

Във FORTRAN се използва стандартната технология на компилаторите. За написване на програма се използва обикновен тестов редактор, а компилаторът FORTRAN транслира програмата в изпълним код. За свързване на главната програма и подпрограмите в единна изпълнима програма се използва редактор на връзките (linker).

Всяка подпрограма се компилира в статично разположен сегмент на кода и поради това при изпълнението на програмата няма изменения в разпределението на паметта (FORTRAN 90 допуска динамично разпределяне на паметта).

Структура на програмите

Инструкциите на езика FORTRAN се въвеждат в редове, с дължина 80 символа. Позицията на всеки символ се нарича колонка, които се номерират от ляво надясно, като първата колонка е с номер 1.

Инструкциите се въвеждат от 7 до 72 колонка. Всеки ред може да бъде отбелязан с номер, съдържащ до 5 десетични цифри, които се разполагат в колонките от 1 до 5. Колонките с номера от 73 до 80 се игнорират от компилатора и могат да бъдат използвани за произволни цели.

Езикът FORTRAN позволява дълги инструкции (до 19 реда). Ако те не се събиран на един ред, се използват редове за продължаване на инструкциите, като в 6 колонка се въвежда произволен символ, с изключение на 0 или празен символ, като колонките от 1 до 5 на редовете за продължение трябва да бъдат празни.

Редовете за коментар се въвеждат като в 1-ва колонка на съответния ред се поставя символа C (или *).

Инструкциите във FORTRAN най-общо са два типа - изпълними (READ, WRITE, DO) и неизпълними (FORMAT). Всяка програма задължителното завършва с инструкцията END.



Типове данни

Във FORTRAN се използват шест основни типа данни - цели, реални, с двойна точност, комплексни, логически, символни.

В процеса на изпълнение на програмата съдържанието на областта от паметта в която се съхраняват данните може да се изменя - т.н. променливи, или да има фиксирано значение - константи на програмата.

Константи

На целите и реалните типове данни се присвоява област от паметта (обикновено дума), като битове в нея се използват по различен начин.

Цялата константа представлява последователност от десетични цифри без десетична точка, като могат да я предшествуват незадължителните знаци + или -. Десетичното число се преобразува при компилиране в двоично, като всеки бит в думата е степен 2 (най-десния бит е 20). (Например 5 в десетичен код е 101 в двоичен (1×22 + 0×21 + 1×20 = 5)). Най-левият бит се резервира за знака, като той е 0 за плюс и 1 за минус. Максималната стойност на числото зависи от дължината на думата. За PC с дължина на думата 16 бита, максималното число което може да се пази в паметта е 32767 (най-левият бит е 0, а останалите 1), а минималното -32768.

Важно е да се запомни, че целите числа се съхраняват точно.

Примери за разрешени цели константи са:

132 -45 +23 0 034

а неразрешени:

12.8 -34,7

Реалните константи съдържат цяла част, десетична точка и дробна част. Цялата и дробната част представляват последователност от десетични цифри. След реалната константа може да следва символът за експонента Е, последван от цяла константа, който представлява степен на 10, по който трябва да се умножи мантисата на константата. (Например 1.23Е-5, представлява запис на числото 1.23×10-5).

При съхраняване в паметта на реалните константите част от думата се отделя за мантисата, а друга част - за експонентата. (за 32-битови PC са съответно 24 и 8 бита). Цяла константа с голямо значение може да се въведе като реална константа. Ако програмистът зададе в дробната част повече цифри, отколкото могат да бъдат съхранени в паметта, то числото се закръглява.

Поради тези особености на съхраняване на реалните константи е възможно при пресмятания да се получат грешки от закръгления, например числото 2.3 може да пази в паметта като 2.299999 и при математически операции с него може да се получават различни резултати.

Променливи

Променливите могат да вземат различни значения в хода на изпълнение на програмата. FORTRAN позволява на програмиста да дава имена на различните типове променливи.

Имената могат да се състоят от 1 до 6 букви или цифри, като задължително започват с буква.

По подразбиране, ако изрично не са дефинирани, променливите започващи с буквите I, J, K, L, M, N се считат за цели.

Примери за разрешени променливи:

WATT VOLT12 I AAAA

Неразрешени променливи:

12VOLT WATT,5 UMNOJENIE



Аритметични изрази

С променливите и константите могат да се създават аритметически изрази с помощта на следните оператори:

+ сумиране;

- изваждане;

* умножение;

/ деление;

** вдигане на степен;

Всеки от тези оператори действа на два операнда и се поставя между тях.

Операторът унарен минус действа на един операнд и се поставя пред него (напр. -3.14).

Във FORTRAN 77 операндите в един израз могат да бъдат от различни типове.

Йерархията на операторите е следната (ако не се използват скоби):

1) вдигане на степен;

2) умножение и деление;

3) събиране и изваждане.

Операцията унарен минус се извършва след вдигането на степен, но преди умножение, деление, събиране и изваждане.

Умножението и делението имат еднакъв приоритет, както и събирането и изваждането. Операциите с еднакъв приоритет се изпълняват от ляво надясно, като изключение прави вдигането на степен.

Скобите в аритметичните изрази означават групиране.

Инструкции за присвояване.

Общият вид на инструкцията за присвояване е следния:

ПРОМЕНЛИВА=ИЗРАЗ

Тя означава: да се вземе резултата от действието вдясно и да се присвои на променливата, стояща вляво.

Аритметичната инструкция за присвояване се различава от алгебрическия израз по това, че са възможни конструкции от вида X=X+Y, които означават: “да се вземат от паметта значенията на променливите X и Y, да се съберат и полученият резултат да се присвои на променливата X”. Например:
X=2.0

Y=5.0


X=X+Y
На изхода новата стойност на X ще бъде 7.0.
Внимание: При операции с цели променливи, резултатът е също цяло число. Например, ако I=2 и J=3 то I/J=0 !!!

Стандартни функции

Вградените във FORTRAN стандартни функции се извикват като се въведе тяхното име и израз (наречен аргумент) в кръгли скоби след него.

Основните функции са следните:

SQRT - квадратен корен от реален аргумент;

SIN - синус от ъгъл в радиани;

COS - косинус от ъгъл в радиани;

TAN - тангенс от ъгъл в радиани;

ASIN - arcsin (в радиани);

ACOS - arccos (в радиани);

ATAN - arctg (в радиани);

ALOG10 - лоритъм при основа 10;

EXP - експонента;

IFIX - преобразуване на реален аргумент в цял;

FLOAT - преобразуване на цял аргумент в реален;

NINT - преобразуване на реален аргумент в най близкото цяло;

Инструкции за описание на типовете данни

Типовете се обявяват с инструкции за описване на типа, които имат следния общ вид:



Тип списък

Където тип е едно от имената, определящи типа:

INTEGER, REAL, DOUBLE PRECISION, LOGICAL, COMPLEX, CHARACTER.

В списък се въвеждат имената на променливите и масивите отделени със запетая.

Описанието на типовете е неизпълнима инструкция и трябва да предхожда всички изпълними инструкции.

Примери:
REAL K,VOLT

DOBLE PRECISION AMPER(100)

CHARACTER*15 STR
Забележка: Някои компилатори допускат обозначения като INTEGER*n, REAL*n, където n е дължината на променливата в байтове.

Реалните числа обикновено заемат в паметта числова област равна на машинната дума (при 32-битовите PC максималното число, което се съхранява е от 7 десетични цифри). Затова при изпълнението на пресмятания, даващи малки числа се получават грешки. За да се избегне това, реалните променливи се обявяват като такива с двойна точност (за тях в 32-битовите PC ще се отделят 64 бита, като 16 ще бъдат за експонентата, а 48 за мантисата). По такъв начин могат да се съхрани число с 14 десетични цифри.

Константите с двойна точност с плаваща запетая се записват с буквата D (вместо E). Например 3.14D-3.. Стандартните функции се въвеждат, като пред тях се постави D: DSIN, DSQRT и т.н., но във FORTRAN 77 могат да се използват стандартните функции, като типа на аргумента определя типа на функцията.

Комплексните числа се представят като двойка реални числа, като първото е реалната част, а второто - имагинерната. Например (3.4, 1.2) е комплексното число 3.4+1.2i.

Логическите константи и променливи се обявяват с LOGICAL и имат значения .TRUE. или .FALSE..

Константите от тип низове (стрингове) са последователност от символи оградени с апострофи (‘word’). Всеки символ заема в паметта 1 байт. Низовите променливи и масиви се декларират с инструкцията CHARACTER*n, където n е дължината на променливата. Те могат да се обединяват с помощта на оператора // (например ‘for’//’tran’ е еквивалентно на ‘fortran’).



Инструкцията DIMENSION

Служи за деклариране на индексирани променливи (масиви). Например:

DIMENSION VOLT(10)

декларира едномерен масив с размерност 10 и елементи от VOLT(1) до VOLT(10).

DIMENSION T(2,10)

декларира двумерен масив с размерност от 20 елемента от T(1,1) до T(2,10).

Във FORTRAN 77 е допустим и формат за деклариране на масиви от вида:

REAL V(10), A(10,2,2)

INTEGER K(3), H(3,2)

Което е еквивалентно на:

REAL V,A

INTEGER K,H

DIMENSION V(10), A(10,2,2), K(3), H(3,2)

Допустими са и декларации

DIMENSION S(-2:1)

С което се декларира масив от 4 елемента S(-2), S(-1), S(0), S(1).



Инструкцията IMPLICIT

Тя позволява да се декларират типове данни, определяни неявно по първите букви. Например, при използването на:

IMPLICIT REAL (I,J), INTEGER (A-F)

всички променливи започващи с буквите I и J ще бъдат от тип реални числа, а тези започващи с буквите от A до F - цели.

Инструкцията IMPLICIT трябва да предшества всички декларации и изпълними инструкции.

Инструкцията PARAMETER

Позволява да се присвояват числови значения на променливи, които след това могат да се използват в следващи инструкции. Например:

PARAMETER (PI=3.141592, N=5)

REAL mas(N)



Инструкцията DATA

Установява начално значение на област от паметта, преди началото на изпълнение на програмата. Например:

DATA U/220/, G/9.8/

Прости инструкции за работа с файлове

Инструкцията WRITE(*,*) променлива

Извежда в неформатиран вид значението на променливата на екрана на монитора.



Инструкцията PRINT *, list

Извежда в неформатиран вид значението на променливите на екрана на монитора. Текстови коментари могат да се извеждат като се ограждат с апостроф.

Например:

A=2.3


PRINT *, ‘rezultat=’, A

Ще изведе на екрана: rezultat=2.3



Инструкция READ

За прочитане на данни от файл или от екрана на монитора се използва инструкцията

READ (u,f) list

Където u е номерът на устройството, от което се чете (* е екранът), a f форматът на данните (* е произволен формат).

Например:

READ(*,*) A

Прочита данни въведени от клавиатурата и ги съхранява в променливата А.

Инструкциите OPEN и CLOSE

Преди файл да бъде достъпен за четене, той трябва да бъде създаден и свързан със съответното устройство. Това става с инструкцията OPEN (openlist), където openlist е списък на спецификации, разделени със запетая. След извършване на работа с файла, той се затваря с инструкцията CLOSE(u), където е u е номерът на устройството.

Например, програма, която трябва да отвори файл с име dat.txt, съдържащ само един запис (например 3.14), да прочете този запис и да го съхрани в променливата А, да затвори файла и да изпечата съдържанието на А на екрана, изглежда по следния начин:

OPEN(1,FILE=’DAT.TXT’)

READ (1,*) A

CLOSE(1)

WRITE(*,*) ‘rez=’,A

Пример 1. Пресмятане на аритметични изрази:

REAL A,B,C,PI, X, RAD

WRITE(*,*) ‘X=’

READ X


A=4.0

B=3.0


PI=4.*ATAN(1.)

RAD=X*PI/180.

C=A+B+2./3.+2**4

D=(COS(X))**2

WRITE(*,*) C, D

END


Инструкцията DO

За многократно изпълнение на една и съща част от програмата се използва инструкцията за цикъл DO. Тя има следния формат:

DO n i = m1, m2, m3

Където n е номер на етикет на изпълняема инструкция, i - неиндексирана цяла променлива, m1 - началната стойност на брояча, m2 - крайната му стойност, m3 - стъпката (при липса на стъпка, тя се счита равна на 1). Стойностите на m1, m2, m3 могат да бъдат цели или реални числа.

Циклите обикновено завършват с фиктивната инструкция CONTINUE, пред която стои етикетът n и се изпълняват до i = m2.

Пример 1:

PROGRAM SUMA

REAL SUM

INTEGER I

SUM=0.

DO 20 I=1,10,1



SUM=SUM+I

20 CONTINUE

WRITE(*,*) SUM

END


Програмата ще пресметне сумата на аритметичната прогресия с първи член 1, последен 10 и стъпка 1.

Пример 2: пресмятана на 10!

PROGRAM FACT

INTEGER F

F=1


DO 20 I=1,10

F=F*I


20 CONTINUE

WRITE(*,*) F

END

Пример 3: пресмятана на биномни коефициенти :

PROGRAM BINKOEF

INTEGER N,K,BIN

READ(*,*) N,K

BIN=1

DO 10 I=N-K+1,N



J=I-(N-K)

BIN=BIN*I/J

10 CONTINUE

WRITE(*,*) BIN

END

Пример 4. Пресмятане на exp(x), като разложение в степенен ред:

INTEGER N, FACT

REAL EKSP,X

READ(*,*) x,N

EKSP=1.

FACT=1


DO 10 I=1,N

FACT=FACT*I

EKSP=EKSP+(X**I)/FACT

WRITE(*,*) EKSP

10 CONTINUE

WRITE(*,*) EKSP, EXP(X)

END

Пример 5: пресмятана на сумата на две матрици 3x4

PROGRAM MATSUM

REAL A(5,5), B(4,4), C(5,5)

INTEGER I, J

DO 10 J=1,4

DO 10 I=1,3

C(I,J)=A(I,J)+B(I,J)

WRITE(*,*) C(I,J)

10 CONTINUE

END
Инструкция GO TO

Тя служи за безусловен преход на управлението и се записва по следния начин:

GO TO n


където n е номерът на реда, към който трябва да премине програмата.

Логическа инструкция IF

Тя има следния формат:

IF (s) p

Където s е логически израз, a p е изпълнима инструкция, ако s е вярно.

Един от видовете логически израз е сравняването на две величини. Общият му вид е:

W1 оператор за сравняване W2;

Операторите за сравняване са следните:

.EQ. - равно;

.LT. - по-малко;

.GT. - по-голямо;

.LE. - по-малко или равно;

.GE. - по-голямо или равно;

.NE. - не е равно;

Логическите изрази могат да се обединяват с логическите оператори .AND., .OR., .NOT., .EQV., .NEQV.


Примери:

IF (A.GT.B) GO TO 100

IF (I.LT.50) I=I+1

IF (A.LT.100.AND.A.GT.50) B=B+A


Структурна инструкция IF

Тя има вида:

IF (L) THEN

..............

ELSE IF (L) THEN

...............

ELSE

...............



END IF

където L е логически израз


Пример:

IF (A.GT.5.2) THEN

B=A**2

ELSE IF (A.LT.5.2) THEN



B=A/3.

ELSE


B=A/2.

END IF


Операции върху текстови данни

На символните (стрингове, низове) тип данни могат да бъдат присвоявани значения по следния начин:

CHARACTER*10 NAME

NAME=’My Name’

Те могат да се обединяват с помощта на оператора // (например ‘for’//’tran’ е еквивалентно на ‘fortran’) както и да се сравняват с помощта на операторите за отношение. Изразът a1 се счита за по-малък от a2, ако в сравнителната последователност на символите a1 предхожда a2. Най-често сравнителната последователност е следната - буквата A предшества Z. а 0 предшества 9. Например изразът:

‘My PC’.GT.’My Home’

е вярно, т.к. H предшества P.

От ред със символи може да бъде отделен подред като се използва указател за първата и последната позиция на реда. Например:

ABC=’Quantum Physics’

A=ABC(1:7) !на А се присвоява ’Quantum’

B=ABC(9:15) !на B се присвоява ’ Physics’

Стандартни функции, действащи върху символни променливи са:

LEN - връща цяло число, равно на дължината на аргумента;

INDEX - търсене в стринг; връща цяло число равно на позицията на първата буква на търсения подстринг.

Например:

CHARACTER*20 SPELL

SPELL = 'ABRACADABRA'

K= INDEX(SPELL, 'RA')

Ще върне K=3.

CHAR - преобразува цял аргумент в съответния символ според ASCII таблицата (CHAR(74) = 'J').

ICHAR - преобразува единичен символен аргумент в съответния цял според ASCII таблицата (ICHAR('J') =74).

Индексирани променливи. Работа с масиви

При работа с масиви от данни е удобно да се работи с индексирани променливи. Декларирането на променливите става по следния начин:

REAL GAMMA(100,2) !двумерен масив от реални числа, с размерност 100 реда и 2 стълба

INTEGER NUM(10) !едномерен масив от цели числа (вектор-стълб), с размерност 10

По този начин, се “съобщава” на компилатора, че в програмата ще се осъществява обръщение към различни последователни области от паметта, определени от променливите GAMMA и NUM.

Нека, например, да прочетем данни от двумерен масив (100x2) от файл, да ги съхраним в паметта да ги изведен на екрана на монитора. Програмата изглежда така:


PROGRAM ARRAY

REAL GAMMA(100,2)

INTEGER I

OPEN(1,FILE='A:\\DATA.TXT')

DO 10 I=1,200

READ (1,*,END=999) GAMMA(I,1),GAMMA(I,2)

WRITE(*,*) I,GAMMA(I,1),GAMMA(I,2)

10 CONTINUE

999 CLOSE(1)

END
Данните могат да се въвеждат в елементи на масив и с помощта на неявни цикли. Например:


PROGRAM ARRAY

REAL GAMMA(100,2)

INTEGER I,J

OPEN(1,FILE='A:\\DATA.TXT')

READ (1,*,END=999) ((GAMMA(I,J),I=1,100),J=1,2)

WRITE(*,*)((GAMMA(I,J),I=1,100),J=1,2)

10 CONTINUE

999 CLOSE(1)

END
Пример: четене на данни от файл ‘data.txt’, съдържащ две колонки, пресмятане на средното аритметично на данните от втората колонка и намиране на максималната стойност.
PROGRAM ARRAY

REAL GAMMA(200,2),SUM,M

INTEGER I

OPEN(1,FILE='A:\\DATA.TXT')

SUM=0.

DO 10 I=1,200



READ (1,*,END=999) GAMMA(I,1),GAMMA(I,2)

SUM=SUM+GAMMA(I,2)

10 CONTINUE

999 CLOSE(1)

WRITE(*,*)I,SUM/(I-1)

M=GAMMA(1,2)

DO 20 J=1,I-1

IF (GAMMA(J,2).GT.M)THEN

M=GAMMA(J,2)

END IF


20 CONTINUE

WRITE(*,*) M

END

Спецификация на форматите

Форматните инструкции за вход и изход в общия случай се записват във вида:

READ (u,f) list

WRITE (u,f) list

където list е списък на променливите, u - номер на логическото устройство, f - цяла константа, която е етикетът на съответната инструкция FORMAT.

Инструкцията FORMAT има следния вид:

f FORMAT (s)

където s е списък със спецификациите на форматиране.

Целите числа могат да се въвеждат и извеждат с помощта на спецификацията на формата I, която има следния вид Iw, където w е беззнакова цяла константа, по-голяма от 0, указваща дължината на полето (броят на извежданите/въвежданите значещи цифри). Ако дължината на полето е по-голяма от размерността на цялата променлива, то цялото число се “притиска” към десния край. Ако w е по-малко от размерността на променливата, най-често при извеждане се изобразяват символите *** (това зависи от компилатора).

Например, след изпълнение на следната програма:

INTEGER I,J,K

I=123


J=246

K=1357


WRITE(*,10) I,J,K

10 FORMAT (I3,I8,I3)

END

на екрана на монитора ще се изпише:



123 246***

За реални числа най-често използвания формата е Fw.d, където w е общата дължина на полето, включваща знака и десетичната точка, d - броя позиции след десетичната точка. Ако дробната част на променливата е с повече цифри от указаната в d стойност, то променливата се закръглява.

За реални числа със степенен показател се използва форматът Еw.d, където w е общата дължина на полето, включваща знака, десетичната точка и показателят на степента, d - броя позиции след десетичната точка. При извод на данни, ако значещите цифри след десетичната точка са по-вече от d, то числото се закръглява. w трябва да бъде по-голямо от 7, т.к. за формата Е са необходими минимум 7 позиции: +0.E±dd.

Например, след изпълнение на следната програма:


REAL M,N,P

M=123.34

N=246.2346

P=32.5674

WRITE(*,20) M,N,P

20 FORMAT (F7.2,F8.3,E10.3)

END
на екрана на монитора ще се изпише:

123.34 246.235 0.326Е+02

За данни с двойна точност се използва формата Dw.d, който е аналогичен на Fw.d формата.

Данните от символен тип (низове), могат да се извеждат и въвеждат с помощта на форматите wH, Aw.

При wH, w е броят символи, следващи след H:
WRITE(*,10)

10 FORMAT (14H THIS IS TEST)


Символите могат да бъдат въведени в област на паметта с помощта на формата Aw:
READ (1,10) ITXT

10 FORMAT (A80)



Повторители

Пред всяка спецификация на формат, може да стои цяла константа без знак, която указва броя на повторенията на съответното поле.

Например, вместо
READ (1,10) I, A, J, B

10 FORMAT (I4, F8.3, I4, F8.3)

може да се запише:

READ (1,10) I, A, J, B

10 FORMAT (2(I4, F8.3))

Мащабни множители

Мащабният множител nP, се използва за изменението на положението на десетичната точка на реалното число при предаването му или извличането му от област на паметта. n е цяла константа със знак, която е равна на степента 10, на която числото трябва да се премащабира. При положителна стойност на n, десетичната точка се премества наляво, а при отрицателна - надясно.

Ако мащабният множител се използва с формата F (nPFw.d) се изменя значението на числото! Например при прилагане на 2PF8.3 върху числото 123.45, то ще се промени на 1.2345, а при прилагане на -2PF8.3 върху числото 123.45, то ще се промени на 12345.0.

При прилагане на мащабен множител върху формата Ew.d, значението на числото не се променя! Например при прилагане на 2PЕ10.5 върху числото 123.45, то ще се изпише като 12.345Е+2 (n=2, в случая указва броя цифри пред десетичната точка).



Функции и подпрограми

При писане на голяма програма е удобно в нея да се отделят често използваните в нея повтарящи се структури. За целта езикът FORTRAN позволява програмата да се състои от главна програма, от която се извикват съответните подпрограми. Съществуват няколко типа подпрограми: стандартни функции (SQRT,COS и т.н.), функции-формули, външни функции (FUNCTION), подпрограми от типа SUBROUTINE.

Главната програма започва с инструкцията PROGRAM name, където name е името на програмата и завършва с END. Между тези две инструкции се разполага тялото на главната програма и извикванията на подпрограмите.

Функция-формула

Използва се когато някоя функция (различна от стандартните) се изпълнява няколко пъти в програмата. Обявя се като:


name(argument list) израз ,
където name е името на функцията-формула, argument list е спсък на формалните параметри. При извикване на функцията се посочват фактическите параметри.

Например:


REAL KV,PR

KV(X,Y)=(X+Y)**2

PR=KV(2.5,3)

WRITE(*,*)PR

END
След изпълнението на програмата, ще се отпечата значението на променливата PR, което ж случая е 30.25 (2.5+3)2.

Подпрограма функция

Общия вид изглежда по следния начин:


type FUNCTION name (argument list)

......


......

RETURN


END
Ако типът на функцията не е деклариран, то той се определя по името и, според съглашенията за имената във FORTRAN. Например:
INTEGER FUNCTION F (X,Y,Z) - определя F като цяла функция, а

FUNCTION F (X,Y,Z) - като реална.


Инструкцията RETURN се използва за посочване на мястото в което става връщане на управлението към главната програма. Ако тя липсва, връщането става при инструкцията END.
Пример:

PROGRAM ALL

REAL A

INTEGER N

A=AVR(100)/2

WRITE(*,*)'SREDNO/2=',A

END
FUNCTION AVR(N)

REAL SUM

INTEGER I

DO 10 I=1,N

SUM=SUM+I

10 CONTINUE

AVR=SUM/N

RETURN


END

Подпрограма SUBROUTINE и инструкция CALL

Връща повече от едно значение в извикващата я програма. Структурата и е следната:

SUBROUTINE name (argument list)

....


RETURN

....


END
Пример:

PROGRAM ALL

REAL A,X1,X2,B,C

INTEGER N

CALL ROOTS(10.,19.,5.,X1,X2)

WRITE(*,*) 'X1=', X1, 'X2=', X2

END
SUBROUTINE ROOTS(A,B,C,X1,X2)

REAL D


D=B**2-4.0*A*C

IF (D.LT.0.0) CALL ERROR

D=SQRT(D)

X1=(-B+D)/(2.*A)

X2=(-B-D)/(2.*A)

RETURN


END
SUBROUTINE ERROR

WRITE (*,*) 'The roots are complex'

STOP

END
В посочения пример формалните параметри A, B, C се използват за предаване на информация в подпрограмата ROOTS, а X1, X2 - за връщане на резултати в извикващата програма ALL. Подпрограмата ERROR се извиква от подпрограмата ROOTS без набор от формални параметри.



Инструкцията COMMON

Променливите използвани в подпрограмите са локални. Затова променливи с едно и също име в главната програма и подпрограми се отнасят към различно място в паметта. Например при изпълнение на следната програма:


SUBROUTINE SUBCOM(Z)

X=100.


Y=200.

Z=X+Y


RETURN

END
PROGRAM COMM

X=10.

Y=20.


CALL SUBCOM(Z)

WRITE(*,*)X,Y,Z

END
на изхода ще се разпечата резултат 10 20 300.

За да се обявят променливите като глобални се използва инструкцията COMMON. Тя се разполага във всяка програмна единица, в която трябва да се осъществи достъп към обща област от паметта:


SUBROUTINE SUBCOM(Z)

COMMON X,Y

X=100.

Y=200.


Z=X+Y

RETURN


END
PROGRAM COMM

COMMON X,Y

X=10.

Y=20.


CALL SUBCOM(Z)

WRITE(*,*)X,Y,Z



END
След изпълнението на програмата, ще се разпечата: 100 200 300.




Каталог: ~tank -> Fortran
~tank -> Лекция 2 Типове данни. Класове и обекти. Числено интегриране
~tank -> Лекция състезателно обучение без надзор. Самоорганизиращи се карти на кохонен
Fortran -> Програма От командната линия, след като сме влезли в директорията където е файла с фортран-код
~tank -> Програма за изчисляване на средна стойност
~tank -> Лекция аплети и уеб-страници
Fortran -> Инструкция go to тя служи за безусловен преход на управлението и се записва по следния начин
Fortran -> Инструкция if тя има следния формат


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница