Инструкция GO TO
Тя служи за безусловен преход на управлението и се записва по следния начин:
GO TO n
където n е номерът на реда, към който трябва да премине програмата.
Подпрограма функция
Общия вид изглежда по следния начин:
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
Инструкцията 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.
Зад.1 Изпълнете следния код, който намира най-голям общ делител ва две числа.
* Tazi programa namira nai-golemia obsht delitel
* na 2 chisla s algorityma na Evklid
program euclid
integer a,b,j
common j
j=0
write(*,*) 'zadaite zialo chislo'
read (*,*) a
write( *,*) 'zadaite vtoro zialo chislo'
read (*,*) b
write(*,*)'nai-goliam obsht delitel na ',a,' i',b, ' e',nod(a,b)
write(*,*) j, ' cycles'
pause
stop
end
integer function nod(x,y)
integer a1,b1,temp,x,y,j
common j
a1 = x
b1 = y
3 if (b1.NE.0) then
temp = a1
a1 = b1
b1 = MOD(temp, b1)
j=j+1
go to 3
end if
nod = a1
return
end
Зад.2 Модифицирайте горния код като се използва изваждане (a-b), вместо остатък от делене mod(a,b). Добавете подпрограма, която да извършва проверка колко пъти се нанася nod във всяко от числата. Сравнете броя цикли за двата алгоритъма.
Упъгване: Алгоритъмът с изваждане е следния:
Докато b≠0 прави{
if(a>b)
a=a-b
else
b=b-a}
return a
Сподели с приятели: |