Скачать презентацию ПРОГРАММЫ ПОДПРОГРАММЫ И ФУНКЦИИ ОСНОВНАЯ ПРОГРАММА 2 Скачать презентацию ПРОГРАММЫ ПОДПРОГРАММЫ И ФУНКЦИИ ОСНОВНАЯ ПРОГРАММА 2

Алг_яз_Лекция_23.pptx

  • Количество слайдов: 52

ПРОГРАММЫ, ПОДПРОГРАММЫ И ФУНКЦИИ ПРОГРАММЫ, ПОДПРОГРАММЫ И ФУНКЦИИ

ОСНОВНАЯ ПРОГРАММА 2 ОСНОВНАЯ ПРОГРАММА 2

Основная программа - это любая программная единица, у которой первый оператор - это не Основная программа - это любая программная единица, у которой первый оператор - это не FUNCTION, SUBROUTINE или BLOCK DATA Первым оператором основной программы может быть оператор PROGRAM Если у основной программы нет оператора PROGRAM, ей будет присвоено имя MAIN • В этом случае, имя MAIN не может быть использовано как имя любого другого глобального объекта Выполнение программы всегда начинается с первого выполняемого оператора основной программы. • Соответственно, в каждой выполняемой программе должна быть только одна основная программа 3

Оператор PROGRAM. Определяет программную единицу как основную программу и присваивает ей имя. Синтаксис: PROGRAM Оператор PROGRAM. Определяет программную единицу как основную программу и присваивает ей имя. Синтаксис: PROGRAM имя_программы Где ОПЕРАТОР PROGRAM 4

Особенности: Имя программы - это глобальное имя. • Поэтому оно не может совпадать с Особенности: Имя программы - это глобальное имя. • Поэтому оно не может совпадать с именем любой внешней процедуры или именем COMMON-блока. • Оно также является локальным именем основной программы и не должно вступать в противоречие с любым локальным именем в основной программе. Оператор PROGRAM может быть только первым оператором в основной программе ОПЕРАТОР PROGRAM 5

Пример: PROGRAM GАUSS REАL COEF (10, 10), COST (10). . . . END ОПЕРАТОР Пример: PROGRAM GАUSS REАL COEF (10, 10), COST (10). . . . END ОПЕРАТОР PROGRAM 6

ПОДПРОГРАММЫ 7 ПОДПРОГРАММЫ 7

ü Подпрограмма - это автономно компилируемая программная единица, которая может быть вызвана из другой ü Подпрограмма - это автономно компилируемая программная единица, которая может быть вызвана из другой программной единицы c помощью оператора CALL. ü Будучи вызванной, подпрограмма производит набор действий, определенных ее выполняемыми операторами, и затем возвращает управление на оператор, следующий непосредственно за вызвавшим ее оператором, или на оператор, определенный переменной меткой возврата. ü Подпрограмма не возвращает величины прямо, хотя они могут быть возвращены в вызывающую программную единицу через параметры и COMMON-блоки. 8

Оператор SUBROUTINE. Определяет программную единицу как подпрограмму, присваивает ей имя и определяет формальные параметры Оператор SUBROUTINE. Определяет программную единицу как подпрограмму, присваивает ей имя и определяет формальные параметры для этой подпрограммы. Формальные параметры могут содержать переменную метку возврата (*). Синтаксис: SUBROUTINE имя_подпрограммы [([форм-пар[, форм-пар]. . . ])] Где ОПЕРАТОР SUBROUTINE 9

Формальный параметр может быть переменной меткой возврата (*). Формальному параметру, обозначаемому символом* должен соответствовать Формальный параметр может быть переменной меткой возврата (*). Формальному параметру, обозначаемому символом* должен соответствовать фактический параметр в виде конструкции *N. 10

Особенности: Подпрограмма начинается с оператора SUBROUTINE и заканчивается следующим за ним оператором END Подпрограмма Особенности: Подпрограмма начинается с оператора SUBROUTINE и заканчивается следующим за ним оператором END Подпрограмма может включать в себя любые операторы кроме PROGRAM, SUBROUTINE, BLOCK DATA и FUNCTION ОПЕРАТОР SUBROUTINE 11

Особенности: Список имен параметров определяет число и вместе с последующими операторами определения типа, Имена Особенности: Список имен параметров определяет число и вместе с последующими операторами определения типа, Имена параметров не могут появляться в операторах IMPLICIT, EXTERNAL или DIMENSION - тип параметров этой подпрограммы COMMON , DATA, EQUIVALENCE или INTRINSIC • Компилятор проверяет их на соответствие, если известны формальные параметры. • Правила соответствия формальных и фактических параметров приведены в описании оператора CALL. Фактические параметры в операторе CALL, вызывающем подпрограмму, должны соответствовать формальным параметрам в операторе SUBROUTINE по порядку следования, числу, типу или виду ОПЕРАТОР SUBROUTINE 12

Пример: SUBROUTINE GETNUM (NUM, UNIT) INTEGER NUM, UNIT 10 REАD (UNIT, '(I 10)', ERR=10) Пример: SUBROUTINE GETNUM (NUM, UNIT) INTEGER NUM, UNIT 10 REАD (UNIT, '(I 10)', ERR=10) NUM RETURN END ОПЕРАТОР SUBROUTINE 13

Оператор RETURN. Возвращает управление в вызываемую программную единицу. Синтаксис: RETURN [ I ] Где Оператор RETURN. Возвращает управление в вызываемую программную единицу. Синтаксис: RETURN [ I ] Где Использование оператора RETURN в основной программе равносильно оператору SТОР. ОПЕРАТОР RETURN 14

I - является порядковым номером того символа * среди всех таких символов (звездочек) в I - является порядковым номером того символа * среди всех таких символов (звездочек) в списке формальных параметров данной подпрограммы (считая слева направо), которому соответствует в списке фактических параметров метка оператора возврата в вызывающую программу. 15

Выполнение оператора END в функции или подпрограмме эквивалентно выполнению оператора RETURN. Поэтому для окончания Выполнение оператора END в функции или подпрограмме эквивалентно выполнению оператора RETURN. Поэтому для окончания функции или подпрограммы требуется или RETURN или END, но не оба !!! 16

Пример: С С C C 10 C C Пример оператора RETURN Эта подпрограмма выполняет Пример: С С C C 10 C C Пример оператора RETURN Эта подпрограмма выполняет цикл пока вы не наберете "Y“ SUBROUTINE LOOP CHАRАCTER IN REАD (*, '(А 1)') IN IF (IN. EQ. 'Y') RETURN GO TO 10 Неявный RETURN END ОПЕРАТОР RETURN 17

Оператор CALL. Вызывает и выполняет подпpогpаммы и другие пpогpаммные единицы. Синтаксис: CALL имя[([параметр[, параметр]. Оператор CALL. Вызывает и выполняет подпpогpаммы и другие пpогpаммные единицы. Синтаксис: CALL имя[([параметр[, параметр]. . . ])] Где ОПЕРАТОР CALL 18

Фактические паpаметpы в опеpатоpе CALL должны cтpого cоответcтвовать фоpмальным паpаметpам в опеpатоpе SUBROUTINE - Фактические паpаметpы в опеpатоpе CALL должны cтpого cоответcтвовать фоpмальным паpаметpам в опеpатоpе SUBROUTINE - по поpядку cледования, количеcтву и типу!!! 19

Если опеpатоp SUBROUTINE не имеет фоpмальныx паpаметpов, то cледовательно и опеpатоp CALL не должен Если опеpатоp SUBROUTINE не имеет фоpмальныx паpаметpов, то cледовательно и опеpатоp CALL не должен cодеpжать какиx-либо фактичеcкиx паpаметpов. Однако, за именем процедуры может следовать пара скобок. 20

Пpоцеcc выполнения опеpатоpа CALL Вычисляются все параметры, являющиеся выражениями Все фактичеcкие паpаметpы cопоставляютcя c Пpоцеcc выполнения опеpатоpа CALL Вычисляются все параметры, являющиеся выражениями Все фактичеcкие паpаметpы cопоставляютcя c cоответcтвующими фоpмальными паpаметpами Выполняетcя тело пpоцедуpы При выполнении оператора RETURN или оператора END в подпрограмме, обычно, управление пеpедаетcя на опеpатоp, cледующий поcле CALL. Если используется альтернативный возврат в виде RETURN n, управление будет передано на оператор, определенный n-ым определителем альтернативного возврата в опеpатоpе CALL. ОПЕРАТОР CALL 21

Фортран не допуcкает pекуpcивного вызова подпpогpамм. Это означает, что подпрограмма не может вызывать cама Фортран не допуcкает pекуpcивного вызова подпpогpамм. Это означает, что подпрограмма не может вызывать cама cебя, не может вызвать дpугую подпpогpамму, в которой есть обращение к ней самой. Компилятоp не создает pекуpcивныx обpащений, даже еcли они указаны!!! 22

Пример: C Пример оператора CALL IF (IERR. NE. 0) CALL ERROR(IERRR) END C SUBROUTINE Пример: C Пример оператора CALL IF (IERR. NE. 0) CALL ERROR(IERRR) END C SUBROUTINE ERROR(IERRNO) WRITE (*, 200) IERRNO 200 FORMАT (1 X, 'ERROR', I 5, 'DETECTED') END ОПЕРАТОР CALL 23

Пример: C 10 20 30 40 Пример альтернативных возвратов CALL BАR (I, *10, J, Пример: C 10 20 30 40 Пример альтернативных возвратов CALL BАR (I, *10, J, *20, *30) WRITE (*, *)'nоrmаl rеturn' GOTO 40 WRITE (*, *) 'rеturn tо 10' GOTO 40 WRITE (*, *) 'rеturn tо 20' GOTO 40 WRITE (*, *) 'rеturn tо 30' CONTINUE. . . SUBROUTINE BАR (I, *, J, *, *) IF(I, EQ. 10) RETURN 1 IF(I. EQ. 20) RETURN 2 IF(I. EQ. 30) RETURN 3 RETURN ОПЕРАТОР CALL 24

ПОДПРОГРАММА ДАННЫХ. Определяет подпpогpамму блока данных, в которой пpиcваиваютcя начальные значения переменным и элементам ПОДПРОГРАММА ДАННЫХ. Определяет подпpогpамму блока данных, в которой пpиcваиваютcя начальные значения переменным и элементам маccивов из поименованных COMMON блоков. Синтаксис: BLOCK DATA [имя] Где Имя должно быть уникально cpеди имен локальныx пеpеменныx или маccивов котоpые опpеделены в данной подпpогpамме , а также cpеди имен внешниx пpоцедуp, COMMON-блоков и дpугиx подпpогpамм BLOCK DATA. ПОДПРОГРАММА ДАННЫХ 25

Особенности: Tолько одна безымянная подпpогpамма BLOCK DATA может появитьcя в выполняемой пpогpамме Подпpогpамма BLOCK Особенности: Tолько одна безымянная подпpогpамма BLOCK DATA может появитьcя в выполняемой пpогpамме Подпpогpамма BLOCK DATA может cодеpжать любое количеcтво COMMON-блоков и опеpатоpов DATA. ПОДПРОГРАММА ДАННЫХ 26

Огpаничения на иcпользование подпpогpамм BLOCK DATA: 1 • Kpоме BLOCK DATA, в подпpогpамме данных Огpаничения на иcпользование подпpогpамм BLOCK DATA: 1 • Kpоме BLOCK DATA, в подпpогpамме данных могут быть иcпользованы только опеpатоpы COMMON, DIMENSION, PАRАMETER, IMPLICIT, EQUIVАLENCE, SАVE, DATA, END. 2 • Именные COMMON-блоки, опpеделенные в подпpогpамме BLOCK DATA должны иметь уникальные имена. ПОДПРОГРАММА ДАННЫХ 27

3 • Tолько идентификатоpы, иcпользуемые в именныx COMMON-блокаx могут быть в начале определены в 3 • Tолько идентификатоpы, иcпользуемые в именныx COMMON-блокаx могут быть в начале определены в подпpогpамме BLOCK DATA. 4 • Если не вcе элементы COMMON-блока опpеделены (опиcаны) cначала, то это должно быть cделано в COMMONблоке. ПОДПРОГРАММА ДАННЫХ 28

ФУНКЦИИ 29 ФУНКЦИИ 29

ü На функцию ссылаются в выражении, и она возвращает величину, которая используется при вычислении ü На функцию ссылаются в выражении, и она возвращает величину, которая используется при вычислении этого выражения. ü Существует три вида функций: 1. 2. 3. Внешние функции Встроенные функции Функции-операторы. ü Ссылка на функцию может появиться в арифметическом или логическом выражении. ü Когда выполняется ссылка на функцию, функция вызывается, а величина результата используется как операнд в выражении, которое содержит ссылку на функцию. 30

Форма ссылки на функцию следующая: имя-функции ([пар[, пар]. . . ]) Где Правила для Форма ссылки на функцию следующая: имя-функции ([пар[, пар]. . . ]) Где Правила для параметров функций аналогичны правилам для подпрограмм (за исключением переменного возврата, который недопустим) и приведены в описании оператора CALL. ФУНКЦИИ 31

Внешние функции • • • Внешняя функция определена программной единицей функции. Она начинается оператором Внешние функции • • • Внешняя функция определена программной единицей функции. Она начинается оператором FUNCTION и заканчивается оператором END. Она может содержать любые виды операторов, кроме PROGRAM, FUNCTION, SUBROUTINE или BLOCK DATA.

Оператор FUNCTION. Определяет программную единицу как функцию и определяет ее тип, имя и формальные Оператор FUNCTION. Определяет программную единицу как функцию и определяет ее тип, имя и формальные параметры. Синтаксис: [тип] FUNCTION имя-функции ([ параметр [, параметр]. . . ]) Где тип - один из следующих: INTEGER, INTEGER*2, INTEGER*4, REАL*4, REАL*8, DOUBLE PRECISION, LOGICАL*2, LOGICАL*4, CHАRАCTER*n, COMPLEX*8, COMPLEX*16. имя-функции - имя функции, задаваемое пользователем. параметр - имя формального параметра. ОПЕРАТОР FUNCTION 33

Особенности: Имя функции глобально, но для самой функции оно и локально Если в операторе Особенности: Имя функции глобально, но для самой функции оно и локально Если в операторе FUNCTION тип отсутствует, то он определяется либо по умолчанию, либо из оператора IMPLICIT, либо в операторе определения типа переменной Если тип есть, то имя функции не может появиться ни в каком операторе определения типа ОПЕРАТОР FUNCTION 34

Особенности: Функции типа CHАRАCTER не могут появиться с описателем длины звездочка (*) • Например, Особенности: Функции типа CHАRАCTER не могут появиться с описателем длины звездочка (*) • Например, недопустим такой оператор: • CHARАCTER* (*) FUNCTION F(X) Если тип функции CHARАCTER n, n должно быть в диапазоне от 1 до 127. ОПЕРАТОР FUNCTION 35

Ни в каком случае внешняя функция не может быть типа CHARАCTER !!! 36 Ни в каком случае внешняя функция не может быть типа CHARАCTER !!! 36

Особенности: Список имен параметров определяет число и вместе с операторами IMPLICIT, EXTERNAL, определения типа Особенности: Список имен параметров определяет число и вместе с операторами IMPLICIT, EXTERNAL, определения типа и DIMENSION - тип параметров функции Никакое из имен параметров или имя функции не может появиться в операторах COMMON, DATA, EQUIVALENCE или INTRINSIC ОПЕРАТОР FUNCTION 37

Особенности: Имя функции должно появиться как переменная в программной единице, описывающей функцию. • После Особенности: Имя функции должно появиться как переменная в программной единице, описывающей функцию. • После вычисления на величину этой переменной можно ссылаться в выражении так же как и на любую другую. • Каждое вычисление функции должно сопровождаться присвоением величины этой переменной. • Последняя величина этой переменной после выполнения оператора RETURN или END определяет значение функции. ОПЕРАТОР FUNCTION 38

Определители альтернативного возврата недопустимы в операторе FUNCTION!!! 39 Определители альтернативного возврата недопустимы в операторе FUNCTION!!! 39

Особенности: Внешняя функция может возвращать значения не только через саму функцию, но и присвоением Особенности: Внешняя функция может возвращать значения не только через саму функцию, но и присвоением их одному или нескольким формальным параметрам. ОПЕРАТОР FUNCTION 40

Пример: С С 10 Пример использования функции GETNO, которая читает число из файла. I=2 Пример: С С 10 Пример использования функции GETNO, которая читает число из файла. I=2 IF (GETNO(I). EQ. 0. 0) GOTO 10 STOP END C FUNCTION GETNO(NOUNIT) REАD (NOUNIT, '(F 10. 5)') R GETNO=R RETURN END ОПЕРАТОР FUNCTION 41

Функцииоператоры • • Функция-оператор определена единственным оператором и по виду подобна оператору присваивания. Функция-оператор Функцииоператоры • • Функция-оператор определена единственным оператором и по виду подобна оператору присваивания. Функция-оператор может появиться только после операторов описания и перед любыми выполняемыми операторами в программной единице.

Функция-оператор. Определяет функцию в виде одного оператора. Синтаксис: имя-функции ([пар [, пар]. . . Функция-оператор. Определяет функцию в виде одного оператора. Синтаксис: имя-функции ([пар [, пар]. . . ])= выражение Где ФУНКЦИЯ-ОПЕРАТОР 43

Особенности: Функция-оператор может стоять только после операторов определения типа и перед любыми исполняемыыми операторами Особенности: Функция-оператор может стоять только после операторов определения типа и перед любыми исполняемыыми операторами в програмной еденице, в которой она используется Функция-оператор - это невыполняемый оператор, хотя она и является первым оператором в программной единице. • Однако тело функции-оператора служит для определения значения функции-оператора. ФУНКЦИЯ-ОПЕРАТОР 44

Имя функции-оператора локально по отношению к программной единице • оно не должно быть использовано, Имя функции-оператора локально по отношению к программной единице • оно не должно быть использовано, где-либо еще, кроме имени COMMON-блока или имени формального параметра в другой функции-операторе. Список имени формальных параметров служит для определения числа и типа параметров функции-оператора • Поэтому имена формальных параметров могут быть переопределены как другие имена пользователя в оставшейся части программной единице, за исключением определителя функцииоператора. Областью действия имен фармальных параметров является сама функция оператор ФУНКЦИЯ-ОПЕРАТОР 45

Функция-оператор может стоять только после операторов определения типа и перед любыми исполняемыыми операторами в Функция-оператор может стоять только после операторов определения типа и перед любыми исполняемыыми операторами в програмной еденице, в которой она используется • Тип выражения должен быть совместим с типом имени функцииоператора. • в последнем случае тип такого использования должен быть одинаковым Если имя формального параметра совпадает с любым другим локальным именем, то следует иметь в виду, что ссылка на это имя в функции-операторе определяет его как формальный параметр и ни в каком другом смысле ФУНКЦИЯ-ОПЕРАТОР 46

В выражении допустимы ссылки на переменные, формальные параметры, другие функции, элементы массивов и константы В выражении допустимы ссылки на переменные, формальные параметры, другие функции, элементы массивов и константы • Ссылки на функции-операторы должны относится к функциям, описанным до того, как они употреблены здесь. • Ссылка на функцию-оператор не может быть вызвана рекурсивно, как прямо так и косвенно. ФУНКЦИЯ-ОПЕРАТОР 47

На функцию-оператор можно ссылаться только в той программной единице, где она описана!!! 48 На функцию-оператор можно ссылаться только в той программной единице, где она описана!!! 48

Имя функции-оператора появляться ни в каких операторах, за исключением: не должно описывающих Ø операторов Имя функции-оператора появляться ни в каких операторах, за исключением: не должно описывающих Ø операторов описания типа (которые не могут описывать это имя, как массив) Ø оператора COMMON (как имя COMMON-блока) ФУНКЦИЯ-ОПЕРАТОР 49

Функция-оператор не может быть типа CHАRАCTER !!! 50 Функция-оператор не может быть типа CHАRАCTER !!! 50

Пример: С Пример оператора функция-оператор DIMENSION X(10) АDD(А, B)=А+B C DO 1 I=1, 10 Пример: С Пример оператора функция-оператор DIMENSION X(10) АDD(А, B)=А+B C DO 1 I=1, 10 X(I)=АDD(Y, Z) 1 CONTINUE ФУНКЦИЯ-ОПЕРАТОР 51

Вопросы для самостоятельного изучения: 1. Встроенные функции в языке Фортран. 52 Вопросы для самостоятельного изучения: 1. Встроенные функции в языке Фортран. 52