Решение задач по ТОЭ, ОТЦ, Высшей математике, Физике, Программированию...

Решение задач по ТОЭ, ОТЦ, ТЭЦ, Высшей математике www.toehelp.ru
Главная Цены Оплата Примеры решений Отзывы Ccылки Теория Книги Сотрудничество Форум
   Теория / Фортран / 6. Метакоманды МS-Фортрана

6. МЕТАКОМАНДЫ MS-Фортрана.

ОБ ЭТОЙ ЧАСТИ. Эта часть описывает метакоманды МS-Фортрана, директивы, задающие компилятору МS-Фортрана каким образом и в каком порядке обрабатывать исходный текст на МS-Фортране.

Содержание:

1.МЕТАКОМАНДЫ MS-Фортрана
2.СПРАВОЧНИК МЕТАКОМАНД
   $DEBUG и $NODEBUG
   $DECMATH
   $DO66
   $FLOATCALLS и $NOFLOATCALLS
   $INCLUDE
   $LARGE и $NOLARGE
   $LINESIZE
   $LIST и $NOLIST
   $MESSAGE
   $PAGE
   $PAGESIZE
   $STORAGE
   $SUBTITLE
   $TITLE

1.МЕТАКОМАНДЫ MS-Фортрана.

В следующей таблице приведено краткое описание метакоманд МS-Фортрана, а их подробное описание приводится да.
-------------------T--------------------------------------¬
| Метакоманда      |          Действие                    |
+------------------+--------------------------------------+
| $DEBUG           | Включает проверку при счете целых    |
|                  | арифмет. операций и присваемого GO TO|
|                  | $NODEBUG выключает проверку.         |
+------------------+--------------------------------------+
| $DECMATH         | Указывает компилятору создавать      |
|                  | действительные константы в десятичном|
|                  | виде с плавающей точкой.             |
+------------------+--------------------------------------+
| $DO66            | Приводит исполнение операторов DO    |
|                  | к семантике Фортрана 66.             |
+------------------+--------------------------------------+
| $FLOATCALLS      | Заставляет выполнять операции с плав.|
|                  | точкой через библиотеку подрограмм с |
|                  | помощью инструкции CALL, а не через  |
|                  | прерывания. $NOFLOATCALL отменяет    |
|                  | этот раздел.                         |
+------------------+--------------------------------------+
| $INCLUDE:        | Заставляет компилятор считать, что   |
| файл             | в этой точке вставлен файл.          |
+------------------+--------------------------------------+
| $LARGE [:имя [,  |  Помечает именованные массивы для    |
| имя ]. . .]      | адресации вне DGROUP. $NOTLARGE отме-|
|                  | няет этот раздел для именованных мас-|
|                  | сивов. Если имена массивов не указаны|
|                  | команда действует на все массивы.    |
+------------------+--------------------------------------+
| $LINESIZE: n     | Формирует страницы листинга шириной  |
|                  | в n позиций.                         |
+------------------+--------------------------------------+
| $LIST            | Посылает часть листинга в файл лист. |
|                  | $NOLIST останавливает генерацию лист.|
+------------------+--------------------------------------+
| $MESSAGE:'строка'| Посылает строку в кaвычках на станд. |
|                  | устройство вывода при исполнении Фор-|
|                  | трана с начала до конца.             |
+------------------+--------------------------------------+
| $PAGE            | Начинает новую страницу листинга.    |
+------------------+--------------------------------------+
| $PAGESIZE: n     | Задает длину страницы листинга n.    |
+------------------+--------------------------------------+
| $STORAGE: n      | Определяет количество (n) байтов пам.|
|                  | для всех LOGICAL или INTEGER перемен-|
|                  | нных в тексте.                       |
+------------------+--------------------------------------+
| $STRICT          | Запрещает возможности МS-Фортрана, не|
|                  | входящий в Фортран 77 или в полный   |
|                  | стандарт языка. $NOTSTRICT разрешает |
|                  | их.                                  |
+------------------+--------------------------------------+
| $SUBTITLE:       | Дает подзаголовок для нескольких     |
| 'подзаголовок'   | страниц листинга.                    |
+------------------+--------------------------------------+
| $TITLE:          | Дает заголовок для нескольких страниц|
| 'заголовок'      | листинга.                            |
L------------------+---------------------------------------

Метакоманды могут быть вставлены в любое место исходного текста на МS-Фортране внутри программ; однако они не относятся к стандарному языку Фортран. Любая строка ввода компилятора МS-Фортрана, начинающаяся с символа "$" в первой позиции интерпретируется как метакоманда и должна соответствовать одному из допустимых форматов.

Метакоманда и ее параметры (если они есть) должны занимать одну строку текста; строки продолжения недопустимы. Пробелы не значат, поэтому следующая пара эквивалентна: $S TRICT $STRICT

2.СПРАВОЧНИК МЕТАКОМАНД.

Остаток этой части - это алфавитный (по латинским буквам) справочник допустимых метакоманд MS-Фортрана. Для понимания синтаксиcа описания смотрите в этом руководстве приложение А.

--------------------- - $DEBUG и $NODEBUG ---------------------

Заставляет компилятор:
  1. Проверять целую арифметику на переменные и деление на нуль.
  2. Проверять величины присваемого GO TO на допустимость списка в операторе присваемое GO TO.
  3. Обеспечивать функционирование системы фиксации ошибок при счете с именами файлов и номерами строк, так что при возникновении ошибки на экран выдается имя файла и номер строки.
---------------------------------------------------------------
     $[NO]DEBUG
---------------------------------------------------------------
Особенности.

$DEBUG не переключает и не подавляет поддержку реакций на ошибки для арифметики с плавающей запятой. МS-Фортран поддерживает стандарт IEEE при обеспечении реакций на ошибки в пяти следующих ситуациях : неверное действие, деление на нуль, переполнение разрядной сетки, незаполнение разрядной сетки и потеря точности. Более подробно о поддержке реакций на ошибки смотрите приложение Е руководства пользователя МS-Фортрана.

Метакоманда может стоять в программе где-угодно.

По умолчанию используется $NODEBUG.

------------ - $DECMATH ------------

Заставляет компилятор (и откомпилированную программу при счете) применять математику с плавающей точкой, выполняемую по основанию 10, а не в двоичном виде. Особенно $DECMATH заменяет представление констант на формат по десятичному основанию.
-----------------------------------------------------------
     $DECMATH
-----------------------------------------------------------
Особенности.

$DESMATH должна стоять перед первым оператором программы или подпрограммы; ей могут прешествовать только строки комментария или другие метакоманды, и она может употребляться только однажды.

$DESMATH автоматически устанавливает $FLOATCALLS. Если в одной и той же программе установлены $DESMATH и $NOFLOATCALLS, то компилятор выдаст ошибку.

--------- - $DO66 ---------

Приводит операторы DO к семантике Фортрана 66.
-----------------------------------------------------------
     $DO66
-----------------------------------------------------------
Особенности. $DO66 должна предшествовать первому описанию или выполняемому оператору в файле исходного текта.

Семантика Фортрана 66 следующая:

  1. Все операторы DO выполняются по крайней мере однажды.
  2. Допустим расширенный диапазон; это означает, что управление может быть передано на синтактическое тело оператора DO. Поэтому диапазон оператора DO расширен логически так, чтобы включать любой оператор, который может быть выполнен между оператором DO и его последним оператором. Однако, передача управления на диапазон оператора DO до его выполнения или после выполнения его последнего оператора не верна.

Если в программе нет метакоманды $DO66, по умолчанию реализуется семантика Фортрана 77, а именно:

  1. Операторы DO могут выполнять нуль раз, если начальная величина управляющей переменной превышает конечную величину управляющей переменной (что соответствует оператору DO с отрицательным шагом).
  2. Расширенный диапазон неверен; то есть, управление нельзя передавать на синтаксическоетело оператора DO. (Оба стандарта DO допускают передачу управления из тела оператора DO).

------------------------------- - $FLOATCALLS и $NOFLOATCALLS -------------------------------

Вызывает выполнение операций с плавающей точкой через вызовы библиотечных подпограмм.
-----------------------------------------------------------
     $[NO]FLOATCALLS
-----------------------------------------------------------
Особенности.

Когда Вы вставляете $FLOATCALLS в Ваш текст, Вы генерируете вычисления над действительными числами через инструкции вызова. $NOFLOATCALLS подавляет условие по умолчанию и заставляет компилятор генерировать инструкции внутренних прерываний, а не вызовы подпрограмм. По умолчанию действует $FLOATCALLS.

$DECMATH автоматически устанавливает $FLOATCALLS.

------------ - $INCLUDE ------------

Заставляет компилятор действовать так, как если бы указанный файл был вставлен в месте употребления $INCLUDE.

-----------------------------------------------------------
     $INCLUDE: 'файл'
-----------------------------------------------------------
     Где
     файл      - это имя существующего файла, как оно описывается
в Вашей опирационной системе.
Особенности.

В конце вставленного файла компилятор возобновляет обработку файла исходного текста со строки, следующей за $INCLUDE.

У компилятора нет ограничений на вложенность уровней мета-команд $INCLUDE. Метакоманды $INCLUDE, в частности, полезны для гарантии того, что в разных модулях используется одно и тоже описание COMMON-блока.

-------------------- - $LARGE и $NOLARGE --------------------

Заставляет компилятор располагать массивы в менее ограниченной области и генерировать менее эффективные последовательности кодов для ссылки на них.
-----------------------------------------------------------
     $[NOT]LARGE[:имя[,имя]. . .]
-----------------------------------------------------------
     Где
     имя  -это имя массива.
Особенности.

$LARGE может быть использована без параметров, в основном виде. Эта форма может встречаться, где угодно за исключением выполняемой части подпрограммы. $LARGE воздействует на все подпрограммы, которые следуют за ней в текстовом файле, до тех пор пока в тексте не встретится общая метакоманда $NOLARGE. $NOLARGE подчиняется тем же правилам, что и $LARGE но оказывает обратное воздействие.

По умолчанию установлено $NOLARGE. В области между оператором END (или началом компилируемой единицы) и выполняемой частью следующей подпрограммы или основной программы основная форма $LARGE или $NOTLARGE, но не обе, может использоваться только однажды. Например, следующий фрагмент текста ошибочен.

     $LARGE
            SUBROUTINE P
     $NOTLARGE
          A=1.0
          :

$LARGE может содержать имена описанных массивов и массивов формальных параметров, но тогда она должна стоять в описанной части подпрограммы и будет тогда действовать на массивы или формальные параметры этой подпрограммы. $NOTLARGE с параметром может быть использован для исключения из действия общей команды $LARGE массива или формального параметра. Массивы с точными размерностями, которые показывают, что эти массивы больше допустимого предела в 64 килобайта, автоматически размещаются на нескольких сегментах вне сегмента данных по умолчанию. Вам не нужно ставить $LARGE для этих массивов.

-------------- - $LINESIZE --------------

Форматирует последующие страницы листинга шириной n позиций.
-----------------------------------------------------------
     $LINESIZE: n
-----------------------------------------------------------
     Где
     n    - положительное целое число в диапазоне от 40 до 132 включительно.

Если в программе нет метакоманды $LINESIZE по умолчанию подразумевается длина строки 80 символов.

--------------------- - $LIST и $NOLIST ---------------------

Включает заполнение файла листинга, опреленного при вызове компилятора, или запрещает его заполнение.
-----------------------------------------------------------
     $[NO]LIST
-----------------------------------------------------------
Особенности.

Если файл листинга не заказан при запуске компилятора, то метакоманда $LIST не действует. $NOLIST указывает на отмену листинга.

$LIST и $NOLIST могут стоять где угодно в текстовом файле.

По умолчанию установлено установлено $LIST.

------------ - $MESSAGE ------------

Используется для посылки сообщения на стандартное устройство вывода при выполнении Фортрана, перед его окончанием.
-----------------------------------------------------------
     $MESSAGE: 'строка'
-----------------------------------------------------------
     Где
     строка         - любая действительная символьная константа.
                      Максимальная длина - 40 символов.
Пример
$MESSAGE: 'это высвечивается, когда вы выполняете FOR1'

--------- - $PAGE ---------

Начинает новую страницу листинга.
-----------------------------------------------------------
     $PAGE
-----------------------------------------------------------
Особенности.

Если первым символом строки исходного текста является символ ASCII перевод страницы (шестнадцатиричный код ОСh), это считается эквивалентным использованию метакомоманды $PAGE в этой точке.

------------- - $PAGESIZE -------------

Определяет длину в n строк последующих страниц листинга.
-----------------------------------------------------------
     $PAGESIZE
-----------------------------------------------------------
     Где
     n         - любое положительное целое число не меньше  15.
Особенности.

Если в программе нет метакоманды $PAGESIZE, то размер страницы по умолчанию - 60 строк.

------------ - $STORAGE ------------

Определяет заданное чмсло байтов памяти для всех переменных, объявленных в исходном файле как INTEGER или LOGICAL.
-----------------------------------------------------------
     $STORAGE: n
-----------------------------------------------------------
     Где
     n    либо 2, либо 4. Использование величины 2 подразумевает
16-разрядную арифметику. Смотрите также важные замечания по представлению 
данных в конце описания "Типы данных" в части 2 "Термины и концепции".
Особенности.

$STORAGE не оказывает влияния на распределение памяти для переменных, описанных с точным указанием длины, например, INTEGER*2 или LOGICAL*4.

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

Метакоманда $STORAGE должна предшествовать первому оператору описания в файле текста.

Если в программе нет метакоманды $STORAGE, осуществляется выделение 4-х байтов по умолчанию. Это умолчание соответствует тому, что под переменные INTEGER, LOGICAL и REAL выделяется одинаковое количество памяти, что требуется стандартом Фортрана 77.

------------------------ - $STRICT и $NOTSTRICT ------------------------

$STRICT запрещает особые возможности МS-Фортрана, отсутствующие в подмножестве Фортрана 77 в полном стандарте языка. Метакоманда $NOTSTRICT разрешает эти возможности.
-----------------------------------------------------------
     $[NOT]STRICT
-----------------------------------------------------------
Особенности.

Метакоманда $NOTSTRICT разрешает следующие возможности МS- Фортрана:

  1. Символьное выражение может быть присвоено несимвольной переменной.
  2. Символьное и несимвольное выражения могут быть сравнены.
  3. В одном и том же символьном COMMON-блоке допустимы символьные и несимвольные переменные.
  4. Можно установить эквивалентность между символьными и несимвольными переменными.
  5. В несимвольных переменных могут быть заведены символьные данные.

По умолчанию установлена $NOTSTRICT.

------------- - $SUBTITLE -------------

Присваивает определенный подзаголовок последующим страницам листинга исходного текста (до тех пор пока не встретится другая метакоманда $SUBTITLE).
-----------------------------------------------------------
     $SUBTITLE: 'подзаголовок'
-----------------------------------------------------------
     Где
     подзаголовок - любая определенная символьная константа.
                    Максимальная длина - 40 символов.
Особенности.

Если в программе нет метакоманды $SUBTITLE, подзаголовок - это пустая строка.

---------- - $TITLE ----------

Присваивает определенный заголовок последующим страницам листинга (до тех пор пока не встретится другая метакоманда $TITLE).
-----------------------------------------------------------
     $TITLE: 'заголовок'
-----------------------------------------------------------
     Где
     заголовок   - любая определенная символьная константа.
                   Максимальная длина - 40 символов.
Особенности.

Если в программе нет метакоманды $TITLE, заголовок - это пустая строка.