Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Fortran для персонального компьютера

..pdf
Скачиваний:
22
Добавлен:
15.11.2022
Размер:
12.5 Mб
Скачать

(апострофы). Каждая одинарная кавычка внутри символьной константы должна быть представлена двумя одинарными ка­ вычками; между ними не должно быть пробелов. Символьные константы могут быть продолжены, начиная с конца одной записи в начало следующей записи; конец записи не обус­ лавливает того, что пробел или какой-либо другой символ ста­ новится частью символьной константы. Константа может быть продолжена на столько записей, на сколько это необходимо, и может включать символы пробела, запятую или слэш.

Если длина элемента списка, п, меньше или равна длине символьной константы, т , то п '’самых левых" символов "сооб­ щения* будут передаваться в элемент списка. Если п больше т> то константа передается в ш "самых левых" символов эле­ мента списка. Оставшиеся n-m символов элемента списка за­ полняются пробелами (эта операция совпадает с операцией простого присваивания константы элементу списка в операто­ ре присваивания).

5. Пустые значения (null) могут быть указаны одним из следующих трех способов:

—Между двумя последовательными разделителями значе­ ний никакие символы не указываются;

—Перед первым разделителем значений не указывается никаких символов (в первой записи, считываемой при каждом исполнении оператора ввода, управляемого списком);

—Используя формат п* (например, 10* эквивалентно де­ сяти пустым значениям). Пустое значение не оказывает ника­ кого воздействия на описание соответствующего элемента в списке ввода. Если элемент списка входных данных определен, он сохраняет свое предыдущее значение; если он неопределен, то элемент удаляется.

—Слэш (7), который встречается во время исполнения опе­ ратора ввода, управляемого списком, как разделитель зна­ чений, останавливает выполнение оператора после присво­ ения элементу предыдущего значения. Все последующие элементы в списке ввода обрабатываются как пустые значе­

ния.

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

—пробелы, встроенные в символьную константу; ^ —ведущие пробелы в первой записи, считываемой при ис­

полнений каждого оператора ввода/вывода, управляемого списком, если, однако, сразу после них нс указан символ слэша

(/) или запятая (,).

3.8.2Вывод, управляемый списком

Формат значений, получаемых при выводе, управляе­ мом списком, совпадает с форматом значений, требуемым для ввода данных, за теми исключениями, что перечислены в дан­

ном подразделе.

Шипина строки при выводе, управляемом списком, сос­ тавляет 79 символов.

При необходимости^создаются новые записи, но ни при­ знак конца записи, ни пробелы не могут присутствовать вну­ три константы (за исключением симвльных констант).

Кроме того, для перечисленных ниже типов данных должны применяться следующие правила:

1 .Логические константы. Вывод выполняется аналогич­ но выводу с использованием дескриптора Т для истинных зна­ чений и аналогично выводу с использованием дескриптора F для ложных значений.

2.Целочисленные константы. Вывод, аналогичный вы­ воду с использованием дескриптора преобразования 111.

3.Вещественные константы. Вывод, аналогичный вы­ воду с использованием либо дескриптора F, либо дескриптора Е, в зависимости от значения константы.

4.Символьные константы. Не ’’ограничиваются" апост­ рофами. Символьным константам не предшествуют и за ними

не следуют разделители записей. Каждый внутренний апост­ роф представляется одним внешним. Символ пробела вставля­ ется в начало любой записи, которая начинается с продол­ жения символьной константы из предыдущей записи.

5.Слэши как разделители значений не выводятся

6.Пустые значения не выводятся.

3.9Ввод/вывод, управляемый именованным

списком

Ввод/вывод, управляемый именованным списком, яв­ ляется мощным способом чтения или записи данных в файл (или на терминал). Путем спецификации одной или более переменных в группе именованного списка пользователь мо­ жет читать или писать значения всех переменных, используя один оператор ввода/вывода.

Оператор ввода/вывода, управляемой именованным списком, выполняет поиск во вводном файле имени группы. При нахождении имени оператор выполняет поиск операторов присвоения, задающих значения для одной или нескольких переменных в группе. Прерывание операции ввода данного типа выполняется при задании прямого слэша.

Оператор вывода записывает имя именованного списка, за которым следует имя каждой переменной в списке, знак

равенства и текущее значение переменной. Прерывание выво­ да выполняется по символу слэша.

Группа именованного списка создается оператором NAMELIST, имеющим следующий формат:

NAMELIST /<namelist>/ <vanableliJ>l>

где <namelist> - есть идентифицирующее имя группы, <variablelist> - есть список переменных и имен массивов. Значения переменных в списке записываются в файл или

на экран при помощи оператора WRITE, в котором <namelist> появляется вместо спецификатора формата.

WRITE (*,NML = <namelist>)

Параметр NML= является необязательным и требуется только тогда, когда используются другие ключевые слова (на­ пример END=). " /

Первая выводимая запись есть амперсанд (&), за кото­ рым сразу следует имя группы именованного списка (про­ писными буквами). Впоследующих записях перечислены име­ на в группе и их значения. Каждая выводимая запись начинается с символа пробела для обеспечения управления кареткой, если запись выводится на принтер. Значения имеют формат вывода, который указан для них в случае операций

ввода/вывода, управляемого списком; исключение состоит в том, что символьная строка ограничивается апострофами. Это

позволяет читать создаваемый файл при помощи оператора READ, который требует указания апострофов в качестве раз­ делителей. Последней выводимой записью является слэш.

Выполнение оператора READ противоположно выпол­ нению оператора WRITE. Сначала оператор выполняет прос­ мотр файла с текущей позиции до нахождения символа ампер­ санда, за которым сразу следует имя группы, либо до тех пор, пока не будет найден конец файла.

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

пробел или символ возврата каретки.

Присваивающая значение пара (необязательная !) сос­ тоит из имени переменной, элемента массива или подстроки, за которыми следует знак равенства или одно или более зна­ чений и разделителей значений. Знаку равенства должен предшествовать или за ним должно следовать любое число пробелов.

Разделитель значений является единственной запятой или одним или несколькими пробелами. Запятая, которой не предшествует значение, обрабатывается как пустое (null) зна­ чение, а соответствующая переменная или элемент массива не изменяется.

Значение может быть повторено путем помещения фак­ тора повторения и звездочки в начало “собственно значения. Например, 7 Hello’ присваивает ’Hello’ следующим семи элементам в массиве или списке переменных. Фактор повто­ рения и звездочка без значения указывают на многократные пустые значения. Соответствующие переменные нс изменя­

ются.

Символьные строки должны разделяться апострофами. Прерывание оператора READ выполняется символом слэша или при достижении конца файла. Слэши не должны использоваться как разделители значений, если, однако, они заранее не определены как символы прерывания операции

чтения.

ЗАМЕЧАНИЯ

Оператор PROGRAM может указываться в качестве первого оператора головной программы. Головной программе всегда по умолчанию назначается имя _main, дополнительно к любому имени, указываемому в операторе PROGRAM.

4.1.2 Заголовок подпрограммы. Оператор SUBROUTINE

ДЕЙСТВИЕ

Идентифицирует программный модуль как процедуру, задает ей имя, определяет формальные параметры процедуры.

СИНТАКСИС

SUBROUTINE<subr> [ [<sattrs> ] ] [([<formal> [ [<attrs> ] ] [,<formal> [ [<attrs> ] ]... ]) ]

где<зиЬг> —Определенное пользователем, глобальное, внеш­ нее имя процедуры. Имя <subr> не может появляться в опера­ торах AUTOMATIC, COMMON, DATA, EQUIVALENCE, INTRINSIC, LOADDS, SAVE или в операторах типа.

<sattrs> — Список атрибутов, разделенных запятыми. Для имени процедуры <subr> могут использоваться следующие атрибуты: ALIAS, С, FAR, NEAR, PASCAL, VARYING.

<fo“rmal> — Определенное пользователем, имя формально­ го параметра. Если указано несколько имен, то они разделя­ ются запятыми. Формальный параметр может быть простой переменной, структурной переменной или встроенной функ­ цией. Формальный параметр может включать метку (*) аль­

тернативного возврата.

<attrs> — Список атрибутов, разделенных запятыми. Для имени <formal> могут использоваться следующие атрибуты: FAR, HUGE, NEAR, REFERENCE, VALUE:

ЗАМЕЧАНИЯ Имена параметров не могут указываться в операторах

AUTOMATIC, COMMON, “DATA, EQUIVALENCE, INTRINSIC или SAVE.

ПРИМЕР

SUBROUTINE GetNum[C,ALIAS:_getnum,FAR] * (num LVALUE], unit {HUGE])

INTEGER num, unit 10

READ (unit, ’(110)’, ERR® 10) num END

4.1.3Заголовок подпрограммы-функции.

Разница с ранее действующим стандартом Фортрана-66 в том. что как сама функция, так и ее аргументы могут иметь атрибуты, такие же как и подрограммы. Тоже относится к дополнительным точкам входа в подпрограмму, задаваемым оператором ENTRY

СМ; ТАКЖЕ SUBROUTINE.

REAL*8q[FAR]

END

4.2Операторы описания

4.2.1 Описание массивов. Оператор DIMENSION.

ДЕЙСТВИЕ

Специфицирует имя, которое является именем массива, и определяет количество измерений и границы массива.

СИНТАКСИС

DIMENSION <аггау> [ [<attrs> ]({[<lower>: |<upper>:} [,{[<lower>: ]<imper>:}... J)

где <array> — Имя массива. В одном операторе DIMENSION может быть объявлено несколько массивов. Цри этом их имена разделяются запятыми.

<attrs> —Список атрибутов, разделенных запятыми. Атри­ буты <attrs> описывают массив <аггау>. Для массива <аггау> могут быть заданы следующие атрибуты: ALIAS, С, EXTERN,

FAR, HUGE, NEAR, RASCAL, REFERENCE, VALUE, ALL6CATABLE.

<lower> — Нижняя граница размерности массива; может быть положительной, отрицательной или 0. По умолчанию принимается значение 1.

<иррег> Верхняя граница размерности массива, которая может быть положительной, отрицательной, 0 или звездочка. Верхняя граница может быть больше или равна нижней гра­ нице.

ЗАМЕЧАНИЯ Когда массив специфицируется как размещаемый, то

спецификатор размерности состоит только из двоеточия для каждой размерности. Единственный спецификатор в виде дво­ еточия может использоваться только тогда, когда массив спе­ цифицирован как размещаемый.

Пользователь может использовать любые из следующих

границ размерности:

Арифметическая константа. Если все измерения мас­ сива специфицированы при помощи арифметических кон­ стант, то массив будет иметь постоянный размер.

Целочисленный формальный параметр, нс являющий­ ся массивом, или целочисленная переменная, не являющаяся массивом, в том же программном модуле, что и оператор DIMENSION. В этом случае размерность определяется как начальное значение переменной при входе в программу во время исполнения (на этапе исполнения).

Звездочка. Звездочкой может быть идентифицирована только верхняя граница размерности; звездочка может ис­ пользоваться для идентификации верхней границы размер­ ности только для последней размерности массива <аггау>. Если <иррег> есть звездочка, тогда массив <аггау> является "массивом предполагаемого размера". Для "массива предпола­

массива, внешней функции, операторной функции, встроен­ ной функции, подпрограммы FUNCTION или описатель мас­

сива. Параметр <vname> не может быть именем процедуры или головной программы.

<attrs> — Список атрибутов, разделенных запятыми. Атри­ буты <attrs> описывают имя <vname>. Могут использоваться

ALLOCATABLE, С, EXTERN, FAR, HUGE, NEAR, PASCAL, REFERENCE, VALUE.

— Спецификатор размерности. При задании пара­ метра <dim> имя <vname> специфицируется как имя массива.

<values> — Список констант и повторяющихся констант, разделенных запятыми. Повторяющаяся константа записыва­ ется в формате n*<constant>, где п есть положительная целая

константа, эквивалентная константе <constant>, повторенной п раз.

Опция / <values>/, если она задана, инициализирует пара­ метр <vname>.

4.2.4Описание символьных переменных.

Оператор CHARACTER.

ДЕЙСТВИЕ Специфицирует, что имена, определенные пользовате­

лями, имеют символьный тип данных, т.е. тип CHARACTER.

СИНТАКСИС

[(<dim>) ][/<vafues>/ ] [.<vname> [ [<attrs> ] [(*<dim>) ]] [/<values>/ ]...

Последовательность параметров <dim> и <length> может

быть обратной.

<chars> — Целая константа без знака вдиапазоне значений от 1 до 32.767; целочисленное константное выражение (вы­ числяемое со значением от 1 до 32.767) в круглых скобках; либо звездочка (*) в круглых скобках. Параметр chars задает длину, в символах, элемента, задаваемого оператором CHAR­ ACTER. Это значение может быть заменено параметром <length>.

<vname> — Символическое имя константы, переменной, массива, внешней функции, операторной функции или встро­ енной функции; либо функциональная подпрограмма или описатель массива. Параметр <упате>*не может быть именем

процедуры или головной программы.

<attrs> —Список атрибутов, разделенных запятыми. Пара­ метр <attrs> описывает имя <vname>. Для имени <vname> мо­ гут использоваться следующие атрибуты: ALIAS,

ALLOCATABLE, с , E X T E R N , FA R , H U G E , N E A R , PA SCA L ,

REFERENCE, VALUE.

<dim> — Необязательный описатель размерности. Специ­ фицируя параметр <dim>, пользователь тем самым объявляет

<vname> как имя массива.

<length> — Целочисленная константа без знака в диапазо­ не от 1 до 32.767, выражение целочисленной константы (ре­