Курс лекций по дисциплине Программирование на языке Фортран
Скачать 0.98 Mb.
|
Переменная – именованная область памяти, отведенная для временного хранения данных, которые могут изменяться при выполнении программы. Переменная, имя которой присутствует в программе, считается существующей. Существующая переменная может быть определенной и неопределенной. Переменная становится определенной после того, как она получила значение, например, в результате присваивания или выполнения ввода. Массив считается неопределенным, если не определен хотя бы один его элемент. Как сказано выше по области действия переменные могут быть локальные и глобальные. Наряду с областью действия переменные характеризуются также временем жизни. Обычно переменные являются статическими, т.е. существуют только во время выполнения программы. Динамическая переменная размещается в динамически выделяемой памяти. Переменные могут иметь различные типы. REAL a(10)/1.1, 2.0, 8*5.0/ ! Объявление вещественного массива и задание начальных значений. 8-повторитель a(1)=1.1, a(2)=2.0, a(3)=5.0, a(4)=5.0 и т.д. Константы Константа – именованная область памяти, сохраняющая постоянное значение. Как и переменные константы по области действия могут быть локальными и глобальными. Константы также могут быть различных типов. a(1)=1.1, a(2)=2.0, a(3)=5.0, a(4)=5.0 и т.д. до 10. Определение вещественной константы: REAL Pi, Pi2 PARAMETER (Pi=3.14159265, Pi2=2.0*Pi) ! Pi можно задать как 2.0*ASIN(1.0) Функции Функция – подпрограмма, вычисляющая и возвращающая значение. На функцию ссылаются в выражении, и она возвращает величину, которая используется при вычислении этого выражения. Существует три вида функций: 1. Внешние функции; 2. Встроенные функции; 3. Функции-операторы. Внешняя функция начинается оператором FUNCTION и заканчивается оператором END. Она может содержать любые виды операторов, кроме PROGRAM, FUNCTION, SUBROUTINE или BLOCK DATA. Встроенные функции определены в языке Microsoft FORTRAN и доступны для использования в программе на Microsoft FORTRAN. Ссылка на функцию может появиться в арифметическом или логическом выражении. Когда выполняется ссылка на функцию, функция вызывается, а величина результата используется как операнд в выражении, которое содержит ссылку на функцию. Форма ссылки на функцию: имя_функции ([пар[,пар]...]), где имя_функции - это определенное пользователем имя внешней или встроенной функции или функции-оператора; пар - это фактический параметр. Фактический параметр - указанная переменная, выражение, массив и т.д., передаваемый процедуре при конкретном ее вызове. Формальный параметр - имя, с помощью которого параметр передается функции или подпрограмме. Параметры передают величины и берут их из процедуры ссылочным образом. Когда параметр передается ссылкой, передается адрес параметра. Процедуры получают значения параметров через адреса, любые изменения параметра в вызываемой процедуре изменяют величину фактического параметра. Число действительных параметров должно совпадать с числом формальных параметров и при этом их типы должны быть согласованы. Если фактический параметр - выражение, то оно вычисляется немедленно, еще до установления связи формальных и фактических параметров. Если фактический параметр - элемент массива, его индексные выражения вычисляются тоже до установления связи и остаются постоянными во время выполнения процедуры, даже если они содержат переменные, которые переопределяются во время выполнения процедуры. Формальный параметр, описанный как переменная, может быть связан с фактическим параметром - переменной, элементом массива, выражением. Формальный параметр, описанный как массив, может быть связан с фактическим параметром, являющимся массивом или элементом массива. Число и размер размерностей формального параметра могут быть отличны от этих характеристик фактического параметра, но любая ссылка на формальный массив должна быть в пределах памяти, отведенной под фактический массив. Переменная INTEGER*2 не может быть передана формальному параметру INTEGER*4 и наоборот. Передача неверного типа переменной порождает ошибку компиляции. В этом случае необходимо использовать встроенные функции преобразования целых типов INT4 и INT2. Пример. . Здесь функция angle вызывается из арифметического выражения (2),являющегося левым операндом выражения отношения (3), которое в свою очередь является левым операндом логического выражения (4). Список формальных параметров (1) состоит из переменной, арифметического выражения, элемента массива и логической константы. Переменные lоg и flag должны быть логического типа. Объявление функции может иметь следующий вид: . В списке формальных параметров (5) тип переменной bооl должен быть логическим. Массивы Массив – набор последовательно индексируемых элементов, имеющих одинаковый внутренний тип данных. Массив с переменным размером - динамический. Массивы позволяют под одним именем получить доступ к некоторому множеству элементов. Массивы характеризуются числом измерений – рангом. Для массива a(10) – rank=1, b(2,5) – rank=2. Синтаксис ссылки на элемент массива: массив ( индекс [, индекс ] . . . ), где массив - имя массива; индекс - индексное выражение, являющееся целым выражением для выбора заданного элемента массива. Число индексных выражений должно соответствовать числу размерностей в описании массива. Величина индексного выражения должна находится между единицей и верхней границей для соответствующей ей размерности включительно. Пример. C(i,j)=c(i,j)+a(1,k)*b(k,j+1) Операции и выражения Выражение - формула для вычисления величины, оно содержит последовательность операндов и операторов. Операнды могут содержать обращения к функциям, переменные, константы и даже другие выражения. Операторы определяют действия, которые необходимо произвести над операндами. В выражении A+B: плюс (+) - оператор, а A и B – операнды. Результатом выражения является число, строка или объект. Пример: REAL a(10) ! объявление вещественного массива a=5.0 ! присвоение всем элементам массива значения a(3)=7.0 a(4)=a(3)*2.0 ! изменение значения 4-го элемента 1.7.1 Арифметические выражения Результатом арифметических выражений являются величины типов INTEGER, REAL, DOUBLE PRECISION или COMPLEX. Простейшие виды арифметических выражений: 1. Константы; 2. Использование переменных; 3. Использование элементов массивов; 4. Использование функций. Используемые величины переменных, элементов массивов или функций должны быть определены до того, как они появятся в арифметическом выражении. Арифметические операторы
Операции равного приоритета, за исключением возведения в степень выполняются слева направо. Возведение в степень выполняется справа налево. Результатом деления двух целых чисел является величина, равная математическому частному двух этих величин, округленного до целого в сторону нуля. Поэтому 7/3 превращается в 2, а (-7)/3 превращается в -2. Выражения 9/10, 9/(-10), ¼+¼+¼+¼ равны нулю. Когда в арифметическом выражении все операнды одного типа, то величина, являющаяся результатом этого выражения, этого же типа. Когда операнды разного типа, типом результата выражения является тип операнда максимального ранга. Перевод числа к большей разновидности типа, например от REAL*4 к REAL*8, может привести к искажению точности, как и при переходе к низшей разновидности типа:
Ранг операнда зависит от его типа данных соответственно следующему списку:
Специальный случай: операция над операндами типов REAL*8 и COMPLEX*8 породит COMPLEX*16, а не COMPLEX*8. Определенные арифметические операции, также как деление на нуль, математически неопределенные, запрещены. К другим запрещенным операциям относятся возведение нулевого операнда в нулевую или отрицательную степень и возведение отрицательного операнда в степень типа REAL. Запрещенные операции: 0/0, 5.6/0, 0**0, 0**(-3), (-27)**(1./3.), SQRT(-9.), LOG(-2), LOG10(-5.5), TAN(1.570796327) и т.п. 1.7.2 Символьные выражения Результатом символьных выражений является тип CHARACTER. Формы символьных выражений: 1. Символьные константы; 2. Ссылки на символьные переменные; 3. Ссылки на элементы символьных массивов; 4. Любые символьные выражения, заключенные в скобки; 5. Ссылки на символьные функции. В символьных выражениях нет операторов. 1.7.3 Выражения отношения Выражения отношения сравнивают величины двух арифметических или двух символьных выражений. Арифметическое выражение нельзя сравнивать с символьным, пока не определена метакоманда $NOTSTRICT. В этом случае арифметические выражения сравнимы с символьными. Результатом выражения отношения является тип LOGICAL. Для сравнения величин в выражениях отношения можно использовать любой оператор, указанный в табл. Операторы отношения:
Все операторы отношения бинарные и появляются между двумя операндами. Среди операторов отношения нет относительного старшинства или сочетательности и поэтому выражение следующего вида нарушает правила типов для операндов: A.LT.B.NE.C. Выражения отношения могут появляться только в логических выражениях. Выражения отношения с арифметическими операндами могут иметь один операнд типа INTEGER и один операнд типа REAL. В этом случае перед вычислением выражения отношения целый операнд будет преобразован в тип REAL. Выражения отношения символьных операндов сравнивают положение этих операндов в упорядоченной последовательности ASCII. Операнд меньше чем другой, если он появляется раньше в упорядоченной последовательности. Если сравниваются операнды разной длины, то более короткий рассматривается как дополненный справа пробелами до такой же длины. Например, “ABC”=”ABC”, “AB”<”ABC”, “AB”>”AA”, “ABC”<”abc”, “C ”>”C”, “8/10/2000”<”9/10/2000”. 1.7.4 Логические выражения Результатом логического выражения является величина типа LOGICAL. Простейшие формы логических выражений следующие: 1. Логические константы; 2. Ссылки на логические переменные; 3. Ссылки на элементы логических массивов; 4. Ссылки на логические функции; 5. Выражения отношения. Другие логические выражения состоят из простейших логических форм, приведенных выше, с использованием скобок и логических операторов, указанных в табл. Логические операторы:
Операторы .AND., .OR., .EQV., .NEQV. являются бинарными и появляются между двумя операндами логических выражений. Оператор .NOT. - унарный и предшествует своему операнду. Два .NOT. не могут соседствовать друг с другом. Операции равного приоритета выполняются слева направо. Пример правила приоритета: .NOT. A .OR. B.AND. C выполняется как (.NOT. A) .OR. (B .AND. C). Другой пример: .NOT. A . EQV. B .OR. C .NEQV. D .AND. E аналогичен ((.NOT. A) .EQV. (B .OR. C)) .NEQV. (D .AND. E). Действие всех логических операторов сведено в таблицу (в порядке выполнения), при этом 1 означает ИСТИНА, а 0 – ЛОЖЬ.
Когда в одном выражении встречаются арифметические, логические операторы и операторы отношения, они выполняются со следующими приоритетами: 1. Арифметические (высший); 2. Символьные операции; 3. Отношения; 4. Логические (низший). Приоритет выполнения всех операций в логических выражениях приведен в табл.
Ввод-вывод Ввод - это передача данных из внешней среды или из внутреннего файла во внутреннюю память (чтение). Вывод - передача данных из внутренней памяти во внешнюю среду или во внутренний файл (запись). В Fоrtran есть набор операторов, обеспечивающих такую передачу данных, кроме того, существует набор операторов для редактирования таких данных. Операторы ввода/вывода
Все файлы имеют следующие атрибуты: 1. Имя файла (произвольное); 2. Указатель позиции в файле; 3. Структура (форматная, неформатная или двоичная); 4. Метод доступа (последовательный или прямой). Более подробно см. систему ввода/вывода. |