Скачать презентацию Термины и концепции 1 Запись программ Скачать презентацию Термины и концепции 1 Запись программ

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

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

Термины и концепции 1 Термины и концепции 1

Запись программ • • Текст программы на Фортране - это последовательность символов ASCII. К Запись программ • • Текст программы на Фортране - это последовательность символов ASCII. К символам ASCII относятся: • • • 52 прописных и заглавных английских буквы (от А до Z и от а до z). 10 цифр (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Специальные символы (все остальные печатаемые символы таблицы кодов ASCII - в том числе и русские буквы).

Буквенно-цифровые символы Английские буквы и цифры, рассматриваемые как одна группа, называются буквенноцифровыми символами. МС-Фортран Буквенно-цифровые символы Английские буквы и цифры, рассматриваемые как одна группа, называются буквенноцифровыми символами. МС-Фортран воспринимает прописные буквы как заглавные в любом контексты, исключая символьные константы и холлеритовские поля. • Поэтому следующие имена, эквивалентны в МС-Фортране: определенные пользователем, • ABCDE abcde Ab. Cd. E a. Bc. De ЗАПИСЬ ПРОГРАММ. 3

Пробелы За исключением ниже приведенного списка символов пробел не является значащим в тексте программы Пробелы За исключением ниже приведенного списка символов пробел не является значащим в тексте программы на МС-Фортране и поэтому может использоваться для улучшения внешнего вида программы. Исключени я следующие : Пробелы внутри строковых констант являются значащими. внутри Пробелы холлеритовских полей являются Пробел или нуль в значащими. шестой позиции отличаетначальную строку от строки продолжения. ЗАПИСЬ ПРОГРАММ. 4

Табуляторы Символ ТАВ имеет следующее значение в тексте программы на МС-Фортране: 1. Если ТАВ Табуляторы Символ ТАВ имеет следующее значение в тексте программы на МС-Фортране: 1. Если ТАВ появляется в позициях с 1 -ой по 5 -ю, то считается, что следующий символ находится в 7 -ой позиции. 2. ТАВ в позициях с 6 -ой по 72 -ю рассматривается как пробел, даже если он содержится внутри строки или холлеритового поля. ЗАПИСЬ ПРОГРАММ. 5

Позиции Символы в каждой строке расположены по позициям, первый - в первой позиции, второй Позиции Символы в каждой строке расположены по позициям, первый - в первой позиции, второй - во второй и т. д. Позиция, в которой находится символ, имеет существенное значение в Фортране: Ø Позиция 1 используется для указания комментария и метакоманды. Ø Позиции с 1 -ой по 5 -ю зарезервированы для меток операторов. Ø 6 -я позиция для указания продолжения. ЗАПИСЬ ПРОГРАММ. 6

Строки • • • Вы можете считать, что текст программы на Фортране это последовательность Строки • • • Вы можете считать, что текст программы на Фортране это последовательность строк. Для компилятора значащими являются только первые 72 символа в строке, остальные им игнорируются. Строки, длиной меньше, чем 72 символа, считаются заполненными пробелами до 72 -ой позиции.

Начальные строки Начальной строкой называется строка, не являющаяся строкой комментария или метакоманды и содержащая Начальные строки Начальной строкой называется строка, не являющаяся строкой комментария или метакоманды и содержащая пробел или нуль в шестой позиции В первых пяти позициях строки должны быть пробелы или должна стоять метка За исключением оператора, следующим за логическим IF, операторы Фортрана должны начинаться с начальной строки СТРОКИ. 8

Строки продолжения Строка продолжения - это любая строка, не являющая строкой комментария или метакоманды Строки продолжения Строка продолжения - это любая строка, не являющая строкой комментария или метакоманды и содержащая в позиции 6 любой символ отличный от пробела или нуля. • Первые пять символов строки продолжения позволяет существенно увеличить длину оператора. • Если он не помещается в одну начальную строку, его можно продлить на 19 строк продолжения СТРОКИ. 9

Строки коментария Строка считается строкой комментария, если выполняется одно из следующих условий : 1. Строки коментария Строка считается строкой комментария, если выполняется одно из следующих условий : 1. 2. 3. В позиции 1 стоит "С" (или"с"). В позиции 1 стоит звездочка (*). Строка состоит из одних пробелов. Строки комментария не оказывают никакого воздействия на выполнение программы на Фортране. После строки комментария должна идти начальная строка или другая строка комментария. Строка продолжения не может следовать за строкой комментария. СТРОКИ. 10

Классификация и порядок следования операторов • • • Оператор Фортрана состоит из начальной строки Классификация и порядок следования операторов • • • Оператор Фортрана состоит из начальной строки и от 0 до 19 строк продолжения. Оператор может содержать до 1320 символов в позициях с 7 -ой по 72 -ю начальной строки и с 7 -ой по 72 -ю строк продолжения. Оператор END должен быть записан в позициях с 7 -ой по 72 -ю начальной строки и в его строке не может быть никаких других операторов.

Операторы делятся на пять типов: описательные операторы присваивания операторы управления операторы ввода и вывода Операторы делятся на пять типов: описательные операторы присваивания операторы управления операторы ввода и вывода подпрограммы КЛАССИФИКАЦИЯ ОПЕРАТОРОВ. 12

Фортран требует определенного порядка следования операторов и строк, составляющих программную единицу Фортрана. Кроме того Фортран требует определенного порядка следования операторов и строк, составляющих программную единицу Фортрана. Кроме того Фортран накладывает дополнительные требования на порядок строк и операторов в транслируемом тексте. 13

Порядок расположения операторов в программной единице следующий: 1 • метакоманды $DO 66, $STORAGE, $DECMATH Порядок расположения операторов в программной единице следующий: 1 • метакоманды $DO 66, $STORAGE, $DECMATH 2 • оператор определения подпрограммы PROGRAM, ВLОСК DАТА, FUNCTION или SUBROUTINE 3 • оператор IMPLICIT 4 • описательные операторы, отличные от оператора IMPLICIT 5 • определения оператор-функций 6 • исполняемые операторы 7 • оператор END ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. 14

Операторы DАТА, FОRМАТ, ENTRY, RETURN могут находиться в любом месте программной единицы. • Оператор Операторы DАТА, FОRМАТ, ENTRY, RETURN могут находиться в любом месте программной единицы. • Оператор DАТА должен следовать после оператора IMLICIT за описательными операторами, объявляющими величины, используемые в операторе DАТА. • Оператор ENTRY не должен находиться в цикле. Оператор DEFINE FILE должен логически предшествовать операторам ввода и вывода прямого доступа. Оператор NAMELIST должен логически предшествовать операторам ввода и вывода, которые используют величины, объявленные в операторе NAMELIST. ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. 15

Метакоманды $LARGE и $NOTLARGE не могут находиться в разделе выполняемых операторов. 16 Метакоманды $LARGE и $NOTLARGE не могут находиться в разделе выполняемых операторов. 16

Подпрограммы BLOCK DATA не могут содержать функцииоператоры, операторы FORMAT или выполняемые операторы. Подпрограмма начинается Подпрограммы BLOCK DATA не могут содержать функцииоператоры, операторы FORMAT или выполняемые операторы. Подпрограмма начинается с оператора либо SUBROUTINE, либо FUNCTION, либо BLOCK DATA и заканчивается оператором END. Основная программа начинается с оператора PROGRAM или любого другого оператора, отличного от операторов SUBROUTINE, FUNCTION или BLOCK DATA, и заканчивается оператором END. Подпрограмма и основная программа являются программными единицами ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. 17

В программной единице операторы должны следовать в порядке, соответствующем таким правилам: См. следующий слайд В программной единице операторы должны следовать в порядке, соответствующем таким правилам: См. следующий слайд ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. 18

1 • Оператор PROGRAM, если он есть или оператор SUBROUTINE, FUNCTION, BLOCK DATA должны 1 • Оператор PROGRAM, если он есть или оператор SUBROUTINE, FUNCTION, BLOCK DATA должны быть первым оператором программной единицы. 2 • Оператор FORMAT может встретиться в любом месте после оператора SUBROUTINE, FUNCTION, или PROGRAM, если он есть. 3 • Все операторы определения типов должны предшествовать операторам DATA, операторам-функциям и выполняемым операторам. 4 • Все операторы DATA должны стоять после операторов определения типов. Операторы DATA могут быть перемешаны с операторами-функциями и выполняемыми операторами. ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. 19

5 • Обычно оператор PARAMETER предшествует всем другим операторам определения типов. Однако, когда некоторый 5 • Обычно оператор PARAMETER предшествует всем другим операторам определения типов. Однако, когда некоторый оператор определяет тип константы, используемой в операторе PARAMETER, оператор PARAMETER должен следовать за этим оператором определения типа. 6 • В операторах определения типа оператор IMPLICIT должен предшествовать всем другим операторам, за исключением оператора PARAMETER. 7 • Все операторы-функции выполняемым операторам. 8 • Метакоманды $DO 66, $DECMATH и $STORAGE должны предшествовать любым другим операторам. Другие метакоманды могут находиться где угодно в программной единице. должны предшествовать ПОРЯДОК СЛЕДОВАНИЯ ОПЕРАТОРОВ. всем 20

 • Типы данных В МС-Фортране существует шесть основных типов данных: 1. 2. 3. • Типы данных В МС-Фортране существует шесть основных типов данных: 1. 2. 3. 4. 5. 6. Целый (INTEGER*2 и INTEGER*4). Действительный (REAL*4 или REAL) Двойной точности (REAL*8 или DOUBLE PRECISION) Комплексный (COMPLEX*8 и COMPLEX*16) Логический (LOGICAL*2 и LOGICAL*4) Символьный (СHARACTER)

Тип LOGICAL Байт Примечание Может использоваться 2 или 4 байта. По умолчанию 2 или Тип LOGICAL Байт Примечание Может использоваться 2 или 4 байта. По умолчанию 2 или 4 4, но метакомандой $STORAGE может быть установлено 2 или 4. LOGICAL*2 2 LOGICAL*4 4 INTEGER Может использоваться 2 или 4 байта. По умолчанию 2 или 4 4, но метакомандой $STORAGE может быть установлено 2 или 4. INTEGER*2 2 INTEGER*4 4 CHARACTER 1 CHARACTER и CHARACTER*1 – синонимы. CHARACTER*n n Максимальное n равно 127. ТИПЫ ДАННЫХ. 22

Тип Байт Примечание REAL 4 REAL и REAL*4 - синонимы. REAL*4 4 REAL*8 8 Тип Байт Примечание REAL 4 REAL и REAL*4 - синонимы. REAL*4 4 REAL*8 8 DOUBLE PRECISION 8 COMPLEX*8 8 COMPLEX*16 16 REAL*8 и DOUBLE PRECISION синонимы. COMPLEX и COMPLEX*8 - синонимы. ТИПЫ ДАННЫХ. 23

На многих микропроцессорах команды, необходимые для выполнения 16 -битовой арифметики, значительно быстрее и короче На многих микропроцессорах команды, необходимые для выполнения 16 -битовой арифметики, значительно быстрее и короче соответствующих команд для выполнения 32 -битовой арифметики. Поэтому, пока Вы не используете метакоманду $STORAGE, устанавливающую 2, в программе по умолчанию будет 32 -битовая арифметика и она будет выполняться существенно медленней, чем ожидается. ТИПЫ ДАННЫХ. 24

Установка 2 метакомандой $STORAGE ускорит выполнение программы и сделает ее короче. Вы можете использовать Установка 2 метакомандой $STORAGE ускорит выполнение программы и сделает ее короче. Вы можете использовать внутреннюю функцию INT 2 для указанию компилятору использовать в выраженных 16 -битовую арифметику. 25

Целые типы данных Целая величина занимает 2 или 4 байта, в зависимости от установки Целые типы данных Целая величина занимает 2 или 4 байта, в зависимости от установки метакоманды $STORAGE. • 2 -х байтовое целое, INTEGER*2, может содержать величину в диапазоне от ‑ 32767 до 32767. • 4 -х байтовое целое, INTEGER*4, может содержать величину в диапазоне от -2147483647 до 2147463647. ТИПЫ ДАННЫХ. 26

Целые константы содержат последовательность одной или более десятичных цифр или определитель системы счисления, за Целые константы содержат последовательность одной или более десятичных цифр или определитель системы счисления, за которым следует строка цифр в диапазоне от 0. . . (основание системы счисления - 1), где величины от 10 до 35 представлены буквами от А до Z соответственно. • Указатель системы счисления содержит символ "#", которому обычно предшествует строка десятичных цифр, представляющая величину основания системы счисления. • Если строка отсутствует, подразумевается, что основание равно 16. • Если указатель системы счисления отсутствует, подразумевается, что основание равно 10. ТИПЫ ДАННЫХ. 27

Диапазон величин как для 16 -битовых так и для 32 - битовых целых не Диапазон величин как для 16 -битовых так и для 32 - битовых целых не включает наиболее отрицательное число, которое может быть представлено в двоичном дополнительном коде этим числом битов. Эти числа, 16#8000 и 16#80000000 обрабатываются как "неопределенные" для сигнализации об ошибке. 28

Примеры целых констант: 123 +123 00000123 32767 -#AB 05 0 -32767 2#010111 -36#ABZ 07 Примеры целых констант: 123 +123 00000123 32767 -#AB 05 0 -32767 2#010111 -36#ABZ 07 ТИПЫ ДАННЫХ. 29

Действительный тип данных обычной точности (REAL или REAL*4) Действительный тип данных обычной точности занимает Действительный тип данных обычной точности (REAL или REAL*4) Действительный тип данных обычной точности занимает 4 байта памяти. • Диапазон действительных чисел обычной точности приблизительно следующий: • от 8. 43 Е-37 до 3. 37 Е+38 (положительные числа). • от -3. 37 Е+38 до -8. 43 Е-37 (отрицательные числа) • 0 (нуль) ТИПЫ ДАННЫХ. 30

Действительный тип данных двойной точности (REAL*8 или DOUBLE PRECISION) Действительный тип данных двойной точности Действительный тип данных двойной точности (REAL*8 или DOUBLE PRECISION) Действительный тип данных двойной точности занимает 8 байт памяти. • Диапазон действительных чисел двойной точности приблизительно следующий: • от 4. 19 D-307 до 1. 67 D+308 (положительные числа) • от -1. 67 D+308 до -4. 19 D-307 (отрицательные числа) • 0 (нуль) Точность больше чем 15 десятичных цифр. ТИПЫ ДАННЫХ. 31

Комплексные типы данных Комплексная константа состоит из необязательного знака, левой скобки, двух целых или Комплексные типы данных Комплексная константа состоит из необязательного знака, левой скобки, двух целых или действительный чисел, разделенных запятой, и правой скобки. Тип данных COMPLEX*8 задает пару действительных чисел обычной точности, второе из которых представляет мнимую часть. • Число COMPLEX*8 занимает 8 байтов памяти. • Каждая компонента COMPLEX*8 - это REAL*4. Элемент данных COMPLEX*16 содержит упорядоченную пару действительных чисел двойной точности. • Элемент данных COMPLEX*16 занимает 16 байтов памяти. • Каждая компонента COMPLEX*16 - это REAL*8. ТИПЫ ДАННЫХ. 32

Логические типы данных Логический тип данных содержит две логических величины. TRUE. и. FALSE. • Логические типы данных Логический тип данных содержит две логических величины. TRUE. и. FALSE. • Логическая переменная занимает два или четыре байта памяти в зависимости от установки метакоманды $STORAGE. • Переменные LOGICAL*4 занимают два слова, младшее значащее (первое) из которых содержит величину LOGICAL*2. Старшее значащее слово не определено. ТИПЫ ДАННЫХ. 33

Символьный тип данных содержит последовательность символов ASCII. • Длина символьной величины равно числу символов Символьный тип данных содержит последовательность символов ASCII. • Длина символьной величины равно числу символов в последовательности. • Символьная константа содержит последовательность из одного или более символов, заключенных в пару одиночных кавычек. • Пара одиночных кавычек означает один символ. ТИПЫ ДАННЫХ. 34

Примеры символьных констант: 'A' '' 'Help!' 'A very long CHARACTER constant ‘ 'O''Brien' '''' Примеры символьных констант: 'A' '' 'Help!' 'A very long CHARACTER constant ‘ 'O''Brien' '''' Последний пример - это символьная константа содержащая один апостроф (одиночную кавычку). ТИПЫ ДАННЫХ. 35

Символьной переменной может быть присвоена несимвольная величина, если присвоение не включено в выражение. Допустимо Символьной переменной может быть присвоена несимвольная величина, если присвоение не включено в выражение. Допустимо следующее: Но следующее недопустимо: REAL R CHARACTER*5 C C=R +1. 0 ТИПЫ ДАННЫХ. 36

Фортран допускает строки исходного текста длиной до 72 позиций. Короткие строки дополняются пробелами до Фортран допускает строки исходного текста длиной до 72 позиций. Короткие строки дополняются пробелами до 72 -ой позиции. 37

Когда символьная константа переходит через границу строки, ее величина такова, как если бы часть Когда символьная константа переходит через границу строки, ее величина такова, как если бы часть строки продолжения, начиная с 7 -ой позиции, добавить к 72 -й позиции начальной строки. Поэтому следующий текст Фортрана 2 0 0 C H = * ‘ A B C D E F ‘ Эквивалентен: 2 0 0 C H = ‘ A B C 60 пробелов D E F ‘ С 60 -ю пробелами между C и D , равными пространству от С в 14 -й позиции до 72 -й позиции плюс одному пробелу в 7 -ой позиции строки продолжения. ТИПЫ ДАННЫХ. 38

Символьные подстроки Ряд версий языка Фортран поддерживают подстроки. • Подстроки относятся к типу CHARACTER Символьные подстроки Ряд версий языка Фортран поддерживают подстроки. • Подстроки относятся к типу CHARACTER и используются для доступа к слитным частям символьной переменной ТИПЫ ДАННЫХ. 39

Подстроки имеют следующий синтаксис: переменная ([первый№]: [последний№]) или массив (индекс1 [, индекс2])([первый№]: [последний№]) где Подстроки имеют следующий синтаксис: переменная ([первый№]: [последний№]) или массив (индекс1 [, индекс2])([первый№]: [последний№]) где переменная — это символьная переменная массив (индекс1[, индекс2]) — это элемент символьного массива первый № и последний № — это целые выражения, определяющие первый и последний символ в подстроке. ТИПЫ ДАННЫХ. 40

Как первый №, так и последний № необязательны. По умолчанию первый № равен единице Как первый №, так и последний № необязательны. По умолчанию первый № равен единице • так что подстрока начинается с первого символа строки. По умолчанию последний № -это длина строки • так что подстрока кончается на последнем символе строки. Конструкция вида переменная(: ) эквивалентна переменная. ТИПЫ ДАННЫХ. 41

Длина подстроки равна (последний№ - первый№ + 1). Взятая длина должна быть длиной символьной Длина подстроки равна (последний№ - первый№ + 1). Взятая длина должна быть длиной символьной переменной и при этом должны удовлетворятся следующие отношения: • первый№ ≤ последний № • 1 ≤ первый№ ≤ длина строки • 1 ≤ последний№ ≤ длина строки Транслятор не проверяет эти соотношения. • Если они не сообщены Вы получите неопределенный результат. ТИПЫ ДАННЫХ. 42

Вы можете использовать подстроки для конкатенации строк. например: CHARACTER A*12, B*20, C*32 A='Now is Вы можете использовать подстроки для конкатенации строк. например: 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 ТИПЫ ДАННЫХ. 43

 • • Область действия имен Фортрана Область действия имени – это диапазон операторов, • • Область действия имен Фортрана Область действия имени – это диапазон операторов, где это имя известно, или на него можно ссылаться в программе на Фортране. В основном, область действия имени либо глобальна, либо локальна, хотя и существуют некоторые исключения. Имя может быть использовано лишь в соответствии с единственным определением в его области действия. Однако одно и тоже имя может иметь разные определения в разных областях действия.

Имя с глобальной областью действия может быть использовано в более чем одной программной единице Имя с глобальной областью действия может быть использовано в более чем одной программной единице (подпрограмме, функции, основной программе) и на него можно ссылаться в них. Фактически, имена с глобальной областью действия используются обычным последовательным образом в одной и той же программе. Все имена процедур, функций, подпрограмм, COMMON-блоков так же как и имена программ имеют глобальную область действия. • Поэтому не может быть подпрограммы-функции с тем же именем, что и подпрограмма или COMMON-блок. • Также в одной программе две процедуры-функции не могут иметь одно и то же имя. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА. 45

Имя с локальной областью действия доступно только внутри одной программной единицы. Имя с локальной Имя с локальной областью действия доступно только внутри одной программной единицы. Имя с локальной областью действия может быть использовано в другой программной единице по другому назначению или подобно • но нельзя требовать чтобы оно имело одинаковое значение в разных областях действияобласть действия. Локальную область действия имеют имена переменных, массивы, формальные параметры и функций-операторы. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА. 46

Единственным исключением в правилах областей действия является имя, присваиваемое данным в COMMON-блоке. Можно ссылаться Единственным исключением в правилах областей действия является имя, присваиваемое данным в COMMON-блоке. Можно ссылаться на глобально действующее имя COMMON-блока в программной единице, в которой определено такое же локально действующее имя. • Это возможно благодаря тому, что имя COMMONблока всегда заключено в косые черточки, например, /FROG/ и поэтому всегда отличимо от таких же, но обычных имен. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА. 47

Другое исключение из правил областей действия сделано для параметров функции-оператора. Область действия параметров оператор-функции Другое исключение из правил областей действия сделано для параметров функции-оператора. Область действия параметров оператор-функции ограничена единственным оператором, входящим в эту функцию. • Любое другое использование этих имен в функции-операторе недопустимо, пока они могут быть задействованы и вне ее. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА. 48

В общем случае наименования переменных, массивов и оператор-функций, а также метки операторов и формальные В общем случае наименования переменных, массивов и оператор-функций, а также метки операторов и формальные параметры локализованы в той программной единице, в которой они появляются • Это значит, что всякое обращение к ним разрешается только из данного сегмента программы. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН ФОРТРАНА. 49

Наименования подпрограмм-функций и подпрограмм, наименования всех входов, а также наименования общих блоков являются общими Наименования подпрограмм-функций и подпрограмм, наименования всех входов, а также наименования общих блоков являются общими для всех сегментов программы, и к ним можно обращаться из любой программной единицы в соответствии с установленными правилами. (по идентификатору подпрограммы-функции, имени входа или идентификатору стандартной функции, с помощью операторов САLL или СОММОN) 50