Главная страница

Курс лекций по дисциплине Программирование на языке Фортран


Скачать 0.98 Mb.
НазваниеКурс лекций по дисциплине Программирование на языке Фортран
Дата02.09.2019
Размер0.98 Mb.
Формат файлаdoc
Имя файлаFortran01.doc
ТипКурс лекций
#85698
страница2 из 15
1   2   3   4   5   6   7   8   9   ...   15
Переменнаяименованная область памяти, отведенная для временного хранения данных, которые могут изменяться при выполнении программы.

Переменная, имя которой присутствует в программе, считается существующей. Существующая переменная может быть определенной и неопределенной. Переменная становится определенной после того, как она получила значение, например, в результате присваивания или выполнения ввода. Массив считается неопределенным, если не определен хотя бы один его элемент. Как сказано выше по области действия переменные могут быть локальные и глобальные. Наряду с областью действия переменные характеризуются также временем жизни. Обычно переменные являются статическими, т.е. существуют только во время выполнения программы. Динамическая переменная размещается в динамически выделяемой памяти. Переменные могут иметь различные типы.

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 и т.д.

      1. Константы

Константа – именованная область памяти, сохраняющая постоянное значение. Как и переменные константы по области действия могут быть локальными и глобальными. Константы также могут быть различных типов. 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. Функции

Функция – подпрограмма, вычисляющая и возвращающая значение.

На функцию ссылаются в выражении, и она возвращает величину, которая используется при вычислении этого выражения. Существует три вида функций:

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 должен быть логическим.

      1. Массивы

Массив – набор последовательно индексируемых элементов, имеющих одинаковый внутренний тип данных. Массив с переменным размером - динамический. Массивы позволяют под одним именем получить доступ к некоторому множеству элементов. Массивы характеризуются числом измерений – рангом. Для массива a(10) – rank=1, b(2,5) – rank=2.

Синтаксис ссылки на элемент массива:

массив ( индекс [, индекс ] . . . ),

где массив - имя массива; индекс - индексное выражение, являющееся целым выражением для выбора заданного элемента массива. Число индексных выражений должно соответствовать числу размерностей в описании массива. Величина индексного выражения должна находится между единицей и верхней границей для соответствующей ей размерности включительно.

Пример. C(i,j)=c(i,j)+a(1,k)*b(k,j+1)

    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. Использование функций.

Используемые величины переменных, элементов массивов или функций должны быть определены до того, как они появятся в арифметическом выражении.

Арифметические операторы

Оператор

Операция

Приоритет




A/B*C



(A/B)*C

* *

Возведение в степень

Высший




A**B**C

A**(B**C)

/

Деление

Средний










*

Умножение

Средний










-

Вычитание или отрицание

Низший










+

Сложение или идентичность

Низший










Операции равного приоритета, за исключением возведения в степень выполняются слева направо. Возведение в степень выполняется справа налево.

Результатом деления двух целых чисел является величина, равная математическому частному двух этих величин, округленного до целого в сторону нуля. Поэтому 7/3 превращается в 2, а (-7)/3 превращается в -2. Выражения 9/10, 9/(-10), ¼+¼+¼+¼ равны нулю.

Когда в арифметическом выражении все операнды одного типа, то величина, являющаяся результатом этого выражения, этого же типа. Когда операнды разного типа, типом результата выражения является тип операнда максимального ранга.

Перевод числа к большей разновидности типа, например от REAL*4 к REAL*8, может привести к искажению точности, как и при переходе к низшей разновидности типа:

REAL*4 a/1.11/

REAL*8 c

C=a

PRINT*, a, c ! Результат: 1.110000 и 1.110000014305115

INTEGER*2 k2/325/

INTEGER*1 k1

K1=k2

PRINT*, k2, k1 ! Результатом будет 325 и 69

Ранг операнда зависит от его типа данных соответственно следующему списку:

1. INTEGER *2 (низший ранг)

2. INTEGER *4

3. REAL *4

4. REAL *8

5. COMPLEX *8

6. COMPLEX *16 (высший ранг)

Например, результатом операции над элементами INTEGER*2 и REAL*4 будет величина, относящаяся к типу данных REAL*4.

Специальный случай: операция над операндами типов 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. Для сравнения величин в выражениях отношения можно использовать любой оператор, указанный в табл. Операторы отношения:

Оператор




Операция

.LT.

<

Меньше чем

.LE.



Меньше или равно

.EQ.

=

Равно

.NE.



Не равно

.GT.

>

Больше чем

.GE.



Больше или равно

Все операторы отношения бинарные и появляются между двумя операндами. Среди операторов отношения нет относительного старшинства или сочетательности и поэтому выражение следующего вида нарушает правила типов для операндов: 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. Выражения отношения.

Другие логические выражения состоят из простейших логических форм, приведенных выше, с использованием скобок и логических операторов, указанных в табл.

Логические операторы:

Оператор

Операция

Приоритет

Пояснения

.NOT.

Отрицание

Наивысший

Значение аргумента изменяется на противоположное.

.AND.

Конъюнкция

Средний

Выражение истинно, если оба аргумента истинны, иначе оно ложно.

.OR.

Включающая дизъюнкция

Средний

Выражение ложно, если оба аргумента ложны.

.EQV.

Эквивалентность

Низший

Выражение истинно, если оба аргумента истинны или ложны.

.NEQV.

Неэквивалентность

Низший

Выражение ложно, если оба аргумента истинны или ложны.

Операторы .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 – ЛОЖЬ.

Пример. При A=10, B=8, C=6 выражения:

.Nоt.(A.Gt.B) равно False; .Nоt.(B.Gt.A) равно True; (A.Gt.B.And.B.Gt.C) равно True;

(B.Gt.A.And.B.Gt.C) равно False; (A.Gt.B.Or.B.Gt.C) равно True; (B.Gt.A.Or.B.Gt.C) равно True;

(A.Gt.B.Eq.B.Gt.C) равно True; (B.Gt.A.Eq.B.Gt.C) равно False.

Например, вычислим логическое выражение f.And.g.Or.Nоt.g.Or.h при f=.True., g=.False., h=f. Расставим скобки в порядке вычисления результата: (((f.And.g).Or.(Nоt.g)).Or.h). Определяем .Nоt.g=.True., f.And.g=.False., тогда .False..Or..True.=.True. и окончательно .True..Or..True.=.True.. Выражение f.And.g.Or.Nоt.(g.Or.h) будет равно .False..

A

1

1

0

0

B

1

0

1

0

.NOT.A

0

0

1

1

A.AND.B

1

0

0

0

A.OR.B

1

1

1

0

A.EQV.B

1

0

0

1

A.NEQV.B

0

1

1

0




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

1. Арифметические (высший); 2. Символьные операции; 3. Отношения; 4. Логические (низший).

Приоритет выполнения всех операций в логических выражениях приведен в табл.

**

* /

+ -

.Lt. .Le. .Gt. .Ge.

.Eq. .Ne.

.Nоt.

.And.

.Or.

.Eqv., .Neqv.

Приоритет

    1. Ввод-вывод

Ввод - это передача данных из внешней среды или из внутреннего файла во внутреннюю память (чтение). Вывод - передача данных из внутренней памяти во внешнюю среду или во внутренний файл (запись). В Fоrtran есть набор операторов, обеспечивающих такую передачу данных, кроме того, существует набор операторов для редактирования таких данных.


Операторы ввода/вывода

Функции ввода/вывода

Операторы ввода/вывода

Некоторые дополнительные положения.

1. Запись - последовательность символов или величин. Существует три вида записей: форматные, бесформатные и конец файла.

2. Файлы - последовательности записей. Файлы могут быть внешними или внутренними. Внешние файлы - файлы, относящиеся к устройству, или само устройство. Внутренний файл - текстовая переменная, которая используется либо как текст, либо как назначение некоторых действий по форматному вводу/выводу.

Передача данных

READ

WRITE, PRINT

Вспомогательные функции

ввода/вывода

OPEN

CLOSE

BACKSPASE

ENDFILE

REWIND

INQUIRE

LOCKING

Определение положения

в файле

BACKSPASE

ENDFILE

REWIND

Все файлы имеют следующие атрибуты:

1. Имя файла (произвольное);

2. Указатель позиции в файле;

3. Структура (форматная, неформатная или двоичная);

4. Метод доступа (последовательный или прямой).

Более подробно см. систему ввода/вывода.
  1. 1   2   3   4   5   6   7   8   9   ...   15


написать администратору сайта