Инструкция go to тя служи за безусловен преход на управлението и се записва по следния начин



Дата23.03.2017
Размер20.76 Kb.
#17586
ТипИнструкция
Инструкция 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


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




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

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