Слайд 2Запись программ
Текст программы на Фортране - это последовательность символов ASCII.
К символам ASCII относятся:
52 прописных и заглавных английских буквы
(от А до Z и от а до z).
10 цифр (0,1,2,3,4,5,6,7,8,9).
Специальные символы (все остальные печатаемые символы таблицы кодов ASCII - в том числе и русские буквы).
Слайд 3ЗАПИСЬ ПРОГРАММ.
Буквенно-цифровые символы
Английские буквы и цифры, рассматриваемые как одна группа,
называются буквенно-цифровыми символами.
МС-Фортран воспринимает прописные буквы как заглавные в любом
контексты, исключая символьные константы и холлеритовские поля.
Поэтому следующие имена, определенные пользователем, эквивалентны в МС-Фортране:
ABCDE abcde AbCdE aBcDe
Слайд 4ЗАПИСЬ ПРОГРАММ.
Пробелы
За исключением ниже приведенного списка символов пробел не является
значащим в тексте программы на МС-Фортране и поэтому может использоваться
для улучшения внешнего вида программы.
Исключения следующие:
Пробелы внутри строковых констант являются значащими.
Пробелы внутри холлеритовских полей являются значащими.
Пробел или нуль в шестой позиции отличает начальную строку от строки продолжения.
Слайд 5ЗАПИСЬ ПРОГРАММ.
Табуляторы
Символ ТАВ имеет следующее значение в тексте программы на
МС-Фортране:
Если ТАВ появляется в позициях с 1-ой по 5-ю, то
считается, что следующий символ находится в 7-ой позиции.
ТАВ в позициях с 6-ой по 72-ю рассматривается как пробел, даже если он содержится внутри строки или холлеритового поля.
Слайд 6ЗАПИСЬ ПРОГРАММ.
Позиции
Символы в каждой строке расположены по позициям, первый -
в первой позиции, второй - во второй и т.д.
Позиция, в
которой находится символ, имеет существенное значение в Фортране:
Позиция 1 используется для указания комментария и метакоманды.
Позиции с 1-ой по 5-ю зарезервированы для меток операторов.
6-я позиция для указания продолжения.
Слайд 7Строки
Вы можете считать, что текст программы на Фортране - это
последовательность строк.
Для компилятора значащими являются только первые 72 символа
в строке, остальные им игнорируются.
Строки, длиной меньше, чем 72 символа, считаются заполненными пробелами до 72-ой позиции.
Слайд 8СТРОКИ.
Начальные строки
Начальной строкой называется строка, не являющаяся строкой комментария или
метакоманды и содержащая пробел или нуль в шестой позиции
В первых
пяти позициях строки должны быть пробелы или должна стоять метка
За исключением оператора, следующим за логическим IF, операторы Фортрана должны начинаться с начальной строки
Слайд 9СТРОКИ.
Строки продолжения
Строка продолжения - это любая строка, не являющая строкой
комментария или метакоманды и содержащая в позиции 6 любой символ
отличный от пробела или нуля.
Первые пять символов строки продолжения позволяет существенно увеличить длину оператора.
Если он не помещается в одну начальную строку, его можно продлить на 19 строк продолжения
Слайд 10СТРОКИ.
Строки коментария
Строка считается строкой комментария, если выполняется одно из следующих
условий :
В позиции 1 стоит "С" (или"с").
В позиции 1 стоит
звездочка (*).
Строка состоит из одних пробелов.
Строки комментария не оказывают никакого воздействия на выполнение программы на Фортране.
После строки комментария должна идти начальная строка или другая строка комментария.
Строка продолжения не может следовать за строкой комментария.
Слайд 11Классификация и порядок следования операторов
Оператор Фортрана состоит из начальной строки
и от 0 до 19 строк продолжения.
Оператор может содержать
до 1320 символов в позициях с 7-ой по 72-ю начальной строки и с 7-ой по 72-ю строк продолжения.
Оператор END должен быть записан в позициях с 7-ой по 72-ю начальной строки и в его строке не может быть никаких других операторов.
Слайд 12КЛАССИФИКАЦИЯ ОПЕРАТОРОВ.
Операторы делятся на пять типов:
описательные операторы
операторы присваивания
операторы управления
операторы ввода
и вывода
подпрограммы
Слайд 13Фортран требует определенного порядка следования операторов и строк, составляющих программную
единицу Фортрана.
Кроме того Фортран накладывает дополнительные требования на порядок строк
и операторов в транслируемом тексте.
Слайд 14ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ.
Порядок расположения операторов в программной единице следующий:
1
метакоманды $DO66,$STORAGE,$DECMATH
2
оператор
определения подпрограммы PROGRAM, ВLОСК DАТА, FUNCTION или SUBROUTINE
3
оператор IMPLICIT
4
описательные операторы,
отличные от оператора IMPLICIT
5
определения оператор-функций
6
исполняемые операторы
7
оператор END
Слайд 15ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ.
Операторы
DАТА, FОRМАТ, ENTRY, RETURN
могут находиться в
любом месте программной единицы.
Оператор DАТА должен следовать после оператора IMLICIT
за описательными операторами, объявляющими величины, используемые в операторе DАТА.
Оператор ENTRY не должен находиться в цикле.
Оператор DEFINE FILE должен логически предшествовать операторам ввода и вывода прямого доступа.
Оператор NAMELIST должен логически предшествовать операторам ввода и вывода, которые используют величины, объявленные в операторе NAMELIST.
Слайд 16Метакоманды $LARGE и $NOTLARGE не могут находиться в разделе выполняемых
операторов.
Слайд 17ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ.
Подпрограммы BLOCK DATA не могут содержать функции-операторы, операторы
FORMAT или выполняемые операторы.
Подпрограмма начинается с оператора либо SUBROUTINE, либо
FUNCTION, либо BLOCK DATA и заканчивается оператором END.
Основная программа начинается с оператора PROGRAM или любого другого оператора, отличного от операторов SUBROUTINE, FUNCTION или BLOCK DATA, и заканчивается оператором END.
Подпрограмма и основная программа являются программными единицами
Слайд 19ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ.
1
Оператор PROGRAM, если он есть или оператор SUBROUTINE,
FUNCTION, BLOCK DATA должны быть первым оператором программной единицы.
2
Оператор FORMAT
может встретиться в любом месте после оператора SUBROUTINE, FUNCTION, или PROGRAM, если он есть.
3
Все операторы определения типов должны предшествовать операторам DATA, операторам-функциям и выполняемым операторам.
4
Все операторы DATA должны стоять после операторов определения типов. Операторы DATA могут быть перемешаны с операторами-функциями и выполняемыми операторами.
Слайд 20ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ.
5
Обычно оператор PARAMETER предшествует всем другим операторам определения
типов. Однако, когда некоторый оператор определяет тип константы, используемой в
операторе PARAMETER, оператор PARAMETER должен следовать за этим оператором определения типа.
6
В операторах определения типа оператор IMPLICIT должен предшествовать всем другим операторам, за исключением оператора PARAMETER.
7
Все операторы-функции должны предшествовать всем выполняемым операторам.
8
Метакоманды $DO66, $DECMATH и $STORAGE должны предшествовать любым другим операторам. Другие метакоманды могут находиться где угодно в программной единице.
Слайд 21Типы данных
В МС-Фортране существует шесть основных типов данных:
Целый (INTEGER*2 и
INTEGER*4).
Действительный (REAL*4 или REAL)
Двойной точности (REAL*8 или DOUBLE PRECISION)
Комплексный
(COMPLEX*8 и COMPLEX*16)
Логический (LOGICAL*2 и LOGICAL*4)
Символьный (СHARACTER)
Слайд 24ТИПЫ ДАННЫХ.
На многих микропроцессорах команды, необходимые для выполнения 16-битовой арифметики,
значительно быстрее и короче соответствующих команд для выполнения 32-битовой арифметики.
Поэтому, пока Вы не используете метакоманду $STORAGE, устанавливающую 2, в программе по умолчанию будет 32-битовая арифметика и она будет выполняться существенно медленней, чем ожидается.
Слайд 25Установка 2 метакомандой $STORAGE ускорит выполнение программы и сделает ее
короче.
Вы можете использовать внутреннюю функцию INT2 для указанию компилятору использовать
в выраженных 16-битовую арифметику.
Слайд 26ТИПЫ ДАННЫХ.
Целые типы данных
Целая величина занимает 2 или 4 байта,
в зависимости от установки метакоманды $STORAGE.
2-х байтовое целое, INTEGER*2, может
содержать величину в диапазоне от ‑32767 до 32767.
4-х байтовое целое, INTEGER*4, может содержать величину в диапазоне от -2147483647 до 2147463647.
Слайд 27ТИПЫ ДАННЫХ.
Целые константы содержат последовательность одной или более десятичных цифр
или определитель системы счисления, за которым следует строка цифр в
диапазоне от 0...(основание системы счисления - 1), где величины от 10 до 35 представлены буквами от А до Z соответственно.
Указатель системы счисления содержит символ "#", которому обычно предшествует строка десятичных цифр, представляющая величину основания системы счисления.
Если строка отсутствует, подразумевается, что основание равно 16.
Если указатель системы счисления отсутствует, подразумевается, что основание равно 10.
Слайд 28Диапазон величин как для 16-битовых так и для 32- битовых
целых не включает наиболее отрицательное число, которое может быть представлено
в двоичном дополнительном коде этим числом битов.
Эти числа, 16#8000 и 16#80000000 обрабатываются как "неопределенные" для сигнализации об ошибке.
Слайд 29ТИПЫ ДАННЫХ.
Примеры целых констант:
123 +123 0
00000123 32767 -32767
-#AB05 2#010111 -36#ABZ07
Слайд 30ТИПЫ ДАННЫХ.
Действительный тип данных обычной точности
(REAL или REAL*4)
Действительный тип
данных обычной точности занимает 4 байта памяти.
Диапазон действительных чисел обычной
точности приблизительно следующий:
от 8.43Е-37 до 3.37Е+38 (положительные числа).
от -3.37Е+38 до -8.43Е-37 (отрицательные числа)
0 (нуль)
Слайд 31ТИПЫ ДАННЫХ.
Действительный тип данных данных двойной точности
(REAL*8 или DOUBLE
PRECISION)
Действительный тип данных двойной точности занимает 8 байт памяти.
Диапазон действительных
чисел двойной точности приблизительно следующий:
от 4.19D-307 до 1.67D+308 (положительные числа)
от -1.67D+308 до -4.19D-307 (отрицательные числа)
0 (нуль)
Точность больше чем 15 десятичных цифр.
Слайд 32ТИПЫ ДАННЫХ.
Комплексные типы данных
Комплексная константа состоит из необязательного знака, левой
скобки, двух целых или действительный чисел, разделенных запятой, и правой
скобки.
Тип данных COMPLEX*8 задает пару действительных чисел обычной точности, второе из которых представляет мнимую часть.
Число COMPLEX*8 занимает 8 байтов памяти.
Каждая компонента COMPLEX*8 - это REAL*4.
Элемент данных COMPLEX*16 содержит упорядоченную пару действительных чисел двойной точности.
Элемент данных COMPLEX*16 занимает 16 байтов памяти.
Каждая компонента COMPLEX*16 - это REAL*8.
Слайд 33ТИПЫ ДАННЫХ.
Логические типы данных
Логический тип данных содержит две логических величины
.TRUE. и .FALSE.
Логическая переменная занимает два или четыре байта памяти
в зависимости от установки метакоманды $STORAGE.
Переменные LOGICAL*4 занимают два слова, младшее значащее (первое) из которых содержит величину LOGICAL*2. Старшее значащее слово не определено.
Слайд 34ТИПЫ ДАННЫХ.
Символьный тип данных
Символьный тип данных содержит последовательность символов ASCII.
Длина
символьной величины равно числу символов в последовательности.
Символьная константа содержит последовательность
из одного или более символов, заключенных в пару одиночных кавычек.
Пара одиночных кавычек означает один символ.
Слайд 35ТИПЫ ДАННЫХ.
Примеры символьных констант:
'A' ' ' 'Help!'
'A very long CHARACTER constant ‘
'O''Brien' ''''
Последний
пример - это символьная константа содержащая один апостроф (одиночную кавычку).
Слайд 36ТИПЫ ДАННЫХ.
Символьной переменной может быть присвоена несимвольная величина, если присвоение
не включено в выражение.
Слайд 37Фортран допускает строки исходного текста длиной
до 72 позиций.
Короткие
строки дополняются пробелами до 72-ой позиции.
Слайд 38ТИПЫ ДАННЫХ.
Когда символьная константа переходит через границу строки, ее величина
такова, как если бы часть строки продолжения, начиная с 7-ой
позиции, добавить к 72-й позиции начальной строки.
Поэтому следующий текст Фортрана
Эквивалентен:
С 60-ю пробелами между C и D , равными пространству от С в 14-й позиции до 72-й позиции плюс одному пробелу в 7-ой позиции строки продолжения.
Слайд 39ТИПЫ ДАННЫХ.
Символьные подстроки
Ряд версий языка Фортран поддерживают подстроки.
Подстроки относятся к
типу CHARACTER и используются для доступа к слитным частям символьной
переменной
Слайд 40ТИПЫ ДАННЫХ.
Подстроки имеют следующий синтаксис:
где
переменная — это символьная переменная
массив (индекс1[,индекс2])
— это элемент символьного массива
первый № и последний № — это целые
выражения, определяющие первый и последний символ в подстроке.
переменная ([первый№]:[последний№])
или
массив (индекс1 [,индекс2])([первый№]:[последний№])
Слайд 41ТИПЫ ДАННЫХ.
Как первый №, так и последний № необязательны.
По умолчанию
первый № равен единице
так что подстрока начинается с первого символа
строки.
По умолчанию последний № -это длина строки
так что подстрока кончается на последнем символе строки.
Конструкция вида переменная(:) эквивалентна переменная.
Слайд 42ТИПЫ ДАННЫХ.
Длина подстроки равна
(последний№ - первый№ + 1).
Взятая длина
должна быть длиной символьной переменной и при этом должны удовлетворятся
следующие отношения:
первый№ ≤ последний №
1 ≤ первый№ ≤ длина строки
1 ≤ последний№ ≤ длина строки
Транслятор не проверяет эти соотношения.
Если они не сообщены Вы получите неопределенный результат.
Слайд 43ТИПЫ ДАННЫХ.
Вы можете использовать подстроки для конкатенации строк.
например:
CHARACTER A*12, B*20,
C*32
A='Now is the t'
B='ime for all good men'
C(1:12)=A
C(13:12+20)=B
WRITE(*,*)'C=',C
END
В результате
на выходе будет :
C=Now is the time for all good men
Слайд 44Область действия имен Фортрана
Область действия имени – это диапазон операторов,
где это имя известно, или на него можно ссылаться в
программе на Фортране.
В основном, область действия имени либо глобальна, либо локальна, хотя и существуют некоторые исключения.
Имя может быть использовано лишь в соответствии с единственным определением в его области действия.
Однако одно и тоже имя может иметь разные определения в разных областях действия.
Слайд 45ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА.
Имя с глобальной областью действия может быть
использовано в более чем одной программной единице
(подпрограмме, функции, основной
программе)
и на него можно ссылаться в них.
Фактически, имена с глобальной областью действия используются обычным последовательным образом в одной и той же программе.
Все имена процедур, функций, подпрограмм, COMMON-блоков так же как и имена программ имеют глобальную область действия.
Поэтому не может быть подпрограммы-функции с тем же именем, что и подпрограмма или COMMON-блок.
Также в одной программе две процедуры-функции не могут иметь одно и то же имя.
Слайд 46ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА.
Имя с локальной областью действия доступно только
внутри одной программной единицы.
Имя с локальной областью действия может быть
использовано в другой программной единице по другому назначению или подобно
но нельзя требовать чтобы оно имело одинаковое значение в разных областях действияобласть действия.
Локальную область действия имеют имена переменных, массивы, формальные параметры и функций-операторы.
Слайд 47ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА.
Единственным исключением в правилах областей действия является
имя, присваиваемое данным в COMMON-блоке.
Можно ссылаться на глобально действующее имя
COMMON-блока в программной единице, в которой определено такое же локально действующее имя.
Это возможно благодаря тому, что имя COMMON-блока всегда заключено в косые черточки, например, /FROG/ и поэтому всегда отличимо от таких же, но обычных имен.
Слайд 48ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА.
Другое исключение из правил областей действия сделано
для параметров
функции-оператора.
Область действия параметров оператор-функции ограничена единственным оператором, входящим
в эту функцию.
Любое другое использование этих имен в функции-операторе недопустимо, пока они могут быть задействованы и вне ее.
Слайд 49ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА.
В общем случае наименования переменных, массивов и
оператор-функций, а также метки операторов и формальные параметры локализованы в
той программной единице, в которой они появляются
Это значит, что всякое обращение к ним разрешается только из данного сегмента программы.
Слайд 50Наименования подпрограмм-функций и подпрограмм, наименования всех входов, а также наименования
общих блоков являются общими для всех сегментов программы, и к
ним можно обращаться из любой программной единицы в соответствии с установленными правилами.
(по идентификатору подпрограммы-функции, имени входа или идентификатору стандартной функции, с помощью операторов САLL или СОММОN)