Автоматические массивы

Рефераты, курсовые, дипломные, контрольные (предпросмотр)

Тип: Реферат. Файл: Word (.doc) в архиве zip. Категория: Информатика, IT
Адрес этого реферата http://referat-kursovaya.repetitor.info/?essayId=24744 или
Загрузить
В режиме предпросмотра не отображаются таблицы, графики и иллюстрации. Для получения полной версии нажмите кнопку «Загрузить». Рефераты, контрольные, дипломные, курсовые работы предоставляются в ознакомительных целях, не для плагиата.
Страница 1 из 3 [Всего 3 записей]1 2 3 »

В процедуре может быть задан локальный массив, размеры которого могут меняться при разных вызовах процедуры.

Такие массивы, так же как и локальные строки переменной длины (разд. 10.4), относятся к автоматическим объектам.

Рекурсивные процедуры

Фортран поддерживает рекурсивные вызовы внешних, модульных и внутренних процедур.

Процедура называется рекурсивной, если она обращается сама к себе или вызывает другую процедуру, которая, в свою очередь,

вызывает первую процедуру. В первом случае рекурсия называется прямой, во втором - косвенной.

Оператор объявления рекурсивной процедуры должен предваряться префиксом RECURSIVE. Внутри рекурсивной

процедуры интерфейс к этой процедуре является явным (см. разд. 16.4.3).

Пример. Разработать подпрограмму subst, которая в данной строке заменяет все вхождения подстроки sub1

на подстроку sub2. Так, если дана строка 'abc1abc2abc3' и sub1 = 'abc', a sub2 = ' d', то результатом должна быть строка ' dl d2 d3'.

program stgo

character(len = 20) :: st = 'abc1abc2abc3'

call subst(st, 'abc', d') ! subst содержит прямую

write(*, *) st ! рекурсию d1 d2 d3

end

recursive subroutine subst(st, subl, sub2)

character(len = *) st, sub1, sub2 ! Длина каждой строки определяется

integer ip ! длиной соответствующего

ip = index(st, sub1) ! фактического параметра

if(ip 0) then

st = st(:ip - 1) // sub2 // st(ip + len(subl):)

call subst(st, subl, sub2) ! Рекурсивный вызов подпрограммы

endif ! выполняется до тех пор, пока

end ! не выполнены все замены subl на sub2

Если функция содержит прямую рекурсии, то есть непосредственно вызывает сама себя, результату необходимо дать имя,

отличное от имени Функции. Это выполняется путем добавления в заголовок функции предложения RESULT.

В случае косвенной рекурсии имя результирующей пе-Ременнрд и имя функции могут совпадать.

Символьные типы данных

Символьный тип данных позволяет задать объект, состоящий из последовательности символов.

Такую последовательность мы будем строкой. Символьный тип данных могут иметь объекты: переменные,

константы и функции. Символьный тип является встроенным типом данных для него существует одна

встроенная операция - операция конкатенации (обозначается двумя слешами //), позволяющая выполнять

объединение отдельных строк или подстрок символов. Объявление символьных.данных выполняется

оператором CHARACTER, например:

character :: ch = 'а' ! Символьная переменная длиной в 1 символ

character(len = 20) st ! Символьная переменная из 20 символов

st = 'Example' ! Присвоим значение символьной переменной

st == st // '_' // ch ! Возвращает: Example_a

Оператор CHARACTER содержит в скобках данные о длине символьного объекта. Если длина не задана,

то по умолчанию она принимается равной единице.

DO-Циклы. Операторы EXIT и CYCLE

Простейшая конструкция DO

[имя:] DO

БОК

END DO (имя]

задает бесконечный цикл. Поэтому такой цикл должен содержать по крайней мере

один оператор, например EXIT [имя], обеспечивающий выход из этого цикла.

Имя конструкции, если оно присутствует, должно появляться в операторах DO и END DO.

Рекомендуемая форма DO-цикла с параметром:

[имя:] DO dovar = start, stop [, inc]

БОК END DO [имя]

dovar - целая переменная, называемая переменной цикла или параметром цикла;

start, stop - целые скалярные выражения, задающие диапазон изменения dovar;

inc - целое скалярное выражение, задающее лаг изменения dovar. Значение inc не может

быть равным нулю. Если параметр inc отсутствует, то он принимается равным единице.

Рекомендуемая форма DO WHILE-цикла:

[имя] DO WHILE(ЛB)?

БОК

END DO [имя]

Если DO WHILE-цикл не содержит операторов прерывания цикла,

БОК выполняется до тех пор, пока истинно скалярное ЛВ.

DO-цикл, DO-цикл с параметром и DO WHILE-цикл могут быть

рваны операторами GOTO, EXIT и CYCLE, а также в результате

выполнения оператора RETURN, обеспечивающего возврат из подпрограммы.

Оператор EXIT [имя}

передает управление из DO-конструкции на первый следующий за KOHI рукцией

выполняемый оператор. Если имя опущено, то EXIT обеспечив; выход из текущего цикла,

в противном случае EXIT обеспечивает выход цикла, имя которого присутствует в операторе EXIT.

Оператор CYCLE [имя]

передает управление на начало DO-конструкции. При этом оператор расположенные

между CYCLE и оператором END DO конца цикла, не выполняются. Если имя опущено, то CYCLE

обеспечивает переход на начало текущего цикла, в противном случае CYCLE обеспечивает

переход на начало цикла, имя которого присутствует в операторе CYCLE.

Условный логический оператор IF

IF(ЛВ) оператор

Если истинно ЛВ, то выполняется оператор, в противном случае управление передается на

последующий оператор программы.

Конструкция IF THEN ENDIF

[имя-.]IF(ЛВ) THEN

БОК

END IF [имя]

БОК выполняется, если истинно ЛВ. Если присутствует имя конструкции, то оно должно

быть и в первом и в последнем операторе конструкции, например:

swap: if(x у) then

hold = х; х = у; у = hold

end if swap

Замечание. Если БОК содержит один оператор, то лучше использовать

оператор

IF(ЛВ) оператор

Конструкция IF THEN ELSE ENDIF

[имя:] IF(ЛВ) THEN

БОК1

ELSE [имя]

БОК1

END IF [имя]

В случае истинности ЛВ выполняется БОК1 и выполняется БОК2, если ЛВ ложно.

Имя конструкции, если оно задано, должно обязательно присутствовать и перед IF,

и после END IF.

Конструкция IF THEN ELSE IF

[имя:] IF(ЛВ) THEN

БОК1

ELSE IF(ЛВ2) THEN [имя]

БОК2

...

[ELSE [имя]

БОКn

END IF [имя]

В случае истинности ЛВ1 выполняется БОК1 и управление передается на

следующий за END IF оператор. Если ЛВ1 ложно, то управление

передается на следующий ELSE IF, то есть вычисляется значение

ЛВ2 и, если оно истинно, то выполняется БОК2. Если оно ложно, то

управление передается на следующий ELSE IF, и так далее. Если ложны все

ЛВ, то выполняется следующий за завершающим ELSE БОКп.

Если завершающий ELSE отсутствует, то управление передается на расположенный

за END IF оператор. Число операторов ELSE IF в конструкции может быть

произвольным. Имя в ELSE и в ELSE IF можно задавать, если это имя имеют

операторы IF и END IF. Имя, если оно задано, во всех частях

конструкции должно быть одинаковым.

Конструкция SELECT CASE

[имя:] SELECT CASE (тест-выражение)

CASE(CП1) [имя]

[БОК1]

[CASE(CП2) [имя]

[БОК2]]

...

[CASE DEFAULT [имя]

[БОКп]]

END SELECT [имя]

Тест-выражение - целочисленное, символьное типа CHARACTER(l)

Или логическое скалярное выражение.

СП - список констант, тип которых должен соответствовать типу тест-выражения.

Конструкция SELECT CASE-работает так: вычисляется значение тест-выражения. Если

полученное значение находится в списке СП1, то выполняется БОК1; далее управление

передается на следующий за END SELECT оператор. Если значение в СП1 не находится,

то проверяется, есть ли оно в СП2, и так далее. Если значение тест-выражения не найдено

ни в одном списке и присутствует оператор CASE DEFAULT, то выполняется БОКп, а далее

выполняется расположенный за END SELECT оператор. Если же значение тест-выражения

не найдено ни в одном списке и CASE DEFAULT отсутствует, то ни один из БОКл не выполняется

и управление передается на следующий за END SELECT оператор.

Список констант СП может содержать одно значение, или состоять из разделенных

запятыми констант, или быть задан как диапазон разделенных двоеточием значений,

например 5:10 или T:'N'. Левая граница должна был меньше правой. Если задается

диапазон символов, то код первого СИМВОЛЕ должен быть меньше кода второго. Если

RSSСтраница 1 из 3 [Всего 3 записей]1 2 3 »


Найти репетитора

При любом использовании материалов сайта обязательна гиперссылка на сайт «Репетитор».
Разработка и Дизайн компании Awelan
www.megastock.ru
Проверить аттестат