Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
современный фортран , Бортеньев.pdf
Скачиваний:
242
Добавлен:
26.03.2015
Размер:
2.34 Mб
Скачать

1. Элементы языка

примерах пособия Венгерская нотация (за редкими исключениями) не употребляется.

1.6. Выражения и операции

Выражение - это формула, по которой вычисляется значение, например 2.0*cos(x/4.5). Выражение состоит из операндов и нуля или более операций. Используемые в выражениях операции разделяются на двуместные и одноместные (унарные + и -). В двуместной операции участвуют два операнда, в одноместной - один. Например:

b + c

! Простое выражение с двуместной операцией

-b

! Простое выражение с одноместной операцией

c

! Выражение без операций

Операндами выражения могут быть константы, переменные и вызовы функций. Выражение может присутствовать в правой части оператора присваивания, в операторах вывода, в вызовах процедур и других операторах языка. Общий вид выражения, в котором присутствуют двуместные операции:

операнд операция операнд операция операнд ...

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

Замечание. Подобъект составного объекта также является переменной и, следовательно, может быть операндом выражения. Например:

real a(10) = 3.0, b(7)

! Массив является составной переменной

a = 2.0 * a

! Массив как элемент выражения

! Элементом выражения является сечение подобъект массива - его сечение a(2:8) b = a(2:8) / 2.5

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

Таблица 1.1. Встроенные арифметические операции

Действия

Обозначения

Примеры

Запись на Фортране

 

 

 

2**(1.0 / 3.0)

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

**

3 2

Умножение, деление

*, /

a × b; a : b

a * b; a / b

 

 

 

 

13

О. В. Бартеньев. Современный ФОРТРАН

Сложение, вычитание

+, -

a + b; a - b

a + b; a - b

 

 

 

 

Унарные

+ и -

+2; -5.5

+2; -5.5

 

 

 

 

Пример арифметического выражения:

real :: a = -1.2

 

a = a * a + 2.2**2

! Возвращает 6.28

Возведение в степень имеет ограниченную область действия. Так, запрещается возводить отрицательное число в нецелочисленную степень, например ошибочно выражение (-2)**3.1. Также нельзя возводить нуль в отрицательную или нулевую степень.

Операции различаются старшинством, или приоритетом. Среди арифметических операций наибольшим приоритетом обладает операция возведения в степень, далее с одинаковым приоритетом следуют умножение и деление, одинаковый и наименьший приоритет имеют сложение, вычитание и унарные + и -. Например, -3**2 возвращает -9, а не 9.

Выражения без скобок вычисляются слева направо последовательно для операций с одинаковым приоритетом, за исключением операций возведения

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

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

Пример:

real :: a, c, d = 1.1

real :: s1 = -1.0, s2 = -2.2, s3 = 3.3

d = (d + 5.17) / 46.2

! Прежде вычисляется выражение в скобках

a = d - (s1 + s2 + s3)

! или a = d - s1 - s2 - s3

c = 2.0**2.0**(1.0/3.0)

! Отобразим порядок вычислений,

c = 2.0**( 2.0**(1.0/3.0) )

! расставив скобки

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

a = 4

/ -2

! Ошибка

a = 4

/ (-2)

! Правильно

Всегда надо учитывать эффект целочисленного деления, при котором отбрасывается получаемая в результате арифметического деления дробная часть, например:

-5 / 2

Возвращает -2

5 / 2

Возвращает 2

14

1. Элементы языка

Результатом арифметического выражения может быть целое, вещественное или комплексное число. Результатом логического выражения является либо .TRUE. - истина, либо .FALSE. - ложь. Результатом символьного выражения является последовательность символов, которая называется символьной строкой.

Примеры логического и символьного выражений:

real :: a = 4.3, d = -5.0

 

logical :: fl = .false.

! Объявление логической переменной

character(10) :: st, st2*3 = 'C6'

! Объявление символьных переменных st и st2

fl = .not. fl .and. a > d

! .TRUE.

st = st2 // '- 97'

! C6 - 97

Выражение является константным, если оно образуется из констант. Такого рода выражения могут быть использованы, например, при объявлении массивов или символьных данных:

integer, parameter :: n = 20, m = 3 * n real a(n), d(2*n), c(m)

character(len = n / 2) st

Операндами арифметических, логических и символьных выражений могут быть согласованные массивы или их сечения. Одномерные массивы согласованы, если они имеют одинаковое число элементов. Всегда согласованы массив и скаляр, т. е. объект данных, не являющийся массивом. Например:

integer :: a(0:4) = 3, b(-1:3) = 7, d(5)

d = (a + b) / 2 ! Элементы массива d: 5, 5, 5, 5, 5

В приведенном примере поэлементно выполняется сложение соответствующих элементов массивов a и b, затем скаляр 2 расширяется до одномерного массива из пяти элементов, каждый элемент которого равен двум и на который поэлементно делится полученный ранее массив сумм, т. е. оператор d = (a + b)/2 эквивалентен оператору

d = (a + b) / (/ 2, 2, 2, 2, 2 /)

Фортран позволяет использовать в выражениях не только встроенные, но и задаваемые программистом операции. Такие операции применяются, например, при работе с производными типами данных, для которых не определено ни одной встроенной операции. Могут быть заданы как двуместные, так и одноместные операции.

1.7. Присваивание

Оператор присваивания обозначается знаком равенства (=) и записывается в виде

15