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

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

1.2.4. Файлы с исходным текстом

В общем случае файлы с исходным текстом программы могут иметь расширения F90, F и FOR. Например, myp.f90, myp.f, myp.for. В первом случае компилятор считает, что файл написан в свободной форме. В двух последних по умолчанию предполагается, что исходный текст записан в фиксированной форме (прил. 2). Мы же будем использовать для файлов расширение F90 и свободную форму записи исходного текста.

1.3. Операторы

Написанная на Фортране программа - это последовательность операторов языка программирования. Операторы разделяются на выполняемые и операторы, которые не участвуют в вычислениях и называются невыполняемыми.

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

Невыполняемые операторы описывают элементы программы, например данные или программные компоненты.

Наиболее часто используется выполняемый оператор присваивания, имеющий вид:

имя переменной = выражение

В результате его выполнения переменной присваивается результат некоторого выражения. Например:

real :: d, a = 1.2

! Невыполняемый оператор объявления

 

! типа данных, в котором переменная a

 

! получила начальное значение 1.2

d = 2.3

! Читается: d присвоить 2.3

a = a + 4.0 * sin(d)

! Значение a изменится с 1.2 на 4.182821

print *, a

! Вывод значения переменной a

end

! Оператором END завершаем программу

 

 

Замечание. Оператор

присваивания будет лучше читаться, если перед

и после знака оператора = поставить по одному пробелу.

Все используемые в программе объекты данных, например переменные, следует предварительно объявить, т. е. явно указать их тип и при необходимости другие свойства. Для этих целей существуют невыполняемые операторы объявления типа, например:

real x, y

! Невыполняемый оператор REAL объявляет две переменные

 

! x и y вещественного типа

integer k

! Невыполняемый оператор INTEGER объявляет переменную

 

! k целого типа, принимающую целые положительные

9

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

! и отрицательные значение и нуль, например:

k = -55

Невыполняемые операторы объявления типа должны располагаться в программе ранее любого исполняемого оператора.

1.4. Объекты данных

Программа выполняет обработку данных. Данные представлены

впрограмме в виде переменных и констант. Объекты данных (переменные

иконстанты) различаются именами, типами и другими свойствами. Переменная, имя которой присутствует в программе, считается существующей. Существующая переменная может быть определенной и неопределенной. Переменная становится определенной после того, как она получит значение, например в результате присваивания или выполнения ввода. Константы бывают именованными и буквальными (неименованными).

Именованная константа объявляется с атрибутом PARAMETER. Значение именованной константы не может быть изменено в результате вычислений. Поэтому ее имя не может находиться в левой части оператора присваивания или быть элементом списка ввода.

real a, b

! Объявляем вещественные переменные с именами a и b

 

! Задание именованной константы n

integer, parameter :: n = 5

 

! Все именованные константы имеют атрибут PARAMETER

a = 4.5

! Теперь переменная a определена, ей присвоено

 

! значение буквальной константы 4.5

read *, b

! После ввода будет определена переменная b

Замечание. При записи не имеющей десятичных знаков вещественной константы следует использовать десятичную точку, например:

real a

 

a = 4

! Так записывать не следует

a = 4.0

! Такая запись подчеркивает тип используемых данных и

 

! не требует дополнительных преобразований типов данных

Начальное значение переменной может быть установлено оператором объявления типа или оператором DATA. В случае задания начальных значений (посредством присваивания) или атрибутов оператор объявления типа должен содержать разделитель :: .

real :: a = 1.2, b, c

! Разделитель :: необходим

real d / 4.5 /

! Разделитель :: может быть опущен

data b, c / 1.5, 4.8 /

! или: data b / 1.5 /, c / 4.8 /

В приводимых выше примерах переменные содержат одно значение. Такие переменные называются простыми. Однако можно задать составные

10

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

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

real a(5)

! Объявляем вещественный массив a из пяти элементов

a(1)

= 1.2

! a(1) - имя первого элемента массива a

a(2)

= 1.3

! Присвоим значение 1.3 второму элементу массива a

a(3)

= 1.4; a(4) = -4.2; a(5) = 0.0

print *, a

! Вывод всех элементов массива a

! Следующий вывод эквивалентен PRINT *, a print *, a(1), a(2), a(3), a(4), a(5)

end

Массив не может иметь в качестве элементов другие массивы. Рассмотренный в примере массив является одномерным. Могут быть

заданы и многомерные (с числом измерений не более семи) массивы. Протяженность каждого измерения массива задается нижней и верхней границами, которые разделяются двоеточием. Если нижняя граница равна единице, она может быть опущена. В этом случае опускается и разделяющее двоеточие. Например, каждое из следующих объявлений задает массив из 10 элементов:

real a(-4:5), b(0:9), c(1:10), d(10)

Число измерений массива называется его рангом. Объект данных, ранг которого равен нулю, называется скаляром.

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

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

real :: a(5) = (/ 1.1, -2.1, 3.1, -4.5, 5.0 /) real b(5)

b = (/ 1.1, -2.01, 3.1, 4.05, 50.0 /)

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

Примеры объявления объектов данных разных типов:

real :: c = 4.56, b(20)

complex :: z = (1.4142, 1.4142)

!c и b - вещественные переменные

!z - переменная комплексного типа

11

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

character(30) :: fn = 'c:\dig.bin'

! fn - символьная переменная

real, parameter :: pi = 3.141593

! pi - вещественная константа

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

сечением массива. Например:

real a(5)

! Объявляем вещественный массив a из пяти элементов

a = 1.2

! Присвоим значение 1.2 всем элементам массива a

a(2) = -4.0

! Присвоим значение -4.0 второму элементу массива

print *, a(1:3)

! Вывод сечения массива a - первых трех его элементов

print *, a(1), a(2), a(3)

! Этот вывод эквивалентен предыдущему

1.5. Имена

Переменные, константы, программные компоненты имеют имена. Имя - это последовательность латинских букв, цифр, символа $ или подчеркивания, начинающаяся с буквы или символа $. Имя не должно содержать более 31 символа. Регистр букв не является значащим. Так, имена st, St, sT, ST есть одно и то же. Следует придумывать имена, отображающие смысл применяемых переменных, констант и других объектов программы.

Примеры имен: Cat1F_Name $var stlen

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

Разрешается создавать локальные имена, совпадающие с глобальными именами встроенных процедур. Но если в программной единице имя, например sum, использовано для имени локальной переменной, встроенная функция SUM в этой программной единице будет недоступна. Поэтому для создаваемых объектов следует придумывать имена, которые отличаются от имен встроенных процедур. Не стоит также давать создаваемым объектам имена, совпадающие с именами операторов идругих объектов Фортрана.

Замечание. Широко используется при формировании имен так называемая Венгерская нотация. В соответствии с ней имя объекта снабжается префиксом из строчных букв, указывающих его тип (если объект обладает типом). Последующая часть имени раскрывает его смысл. Причем каждая часть имени, отражающая отдельный смысловой компонент, начинается с прописной буквы. Например, имя iVectorSize может быть дано именованной константе, хранящей размер вектора, а имя SetInitValues может иметь подпрограмма, выполняющая инициализацию переменных. В

12