Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Статистика и анализ геологических данных

..pdf
Скачиваний:
20
Добавлен:
15.11.2022
Размер:
21.12 Mб
Скачать

Х-формат используется для размещения пробелов между опре­ деляемыми полями. Например, указанный ниже FORMAT может сопровождать команду READ:

23 □ FORMAT (F10.0.5X, F10.0).

Такая запись указывает машине, что вещественное-число было пробито в столбцах 1— 10 перфокарты, что за ним следуют пять столбцов, которые не должны читаться, после чего идет веще­ ственное число, пробитое в колонках 16—25. Формат определяет, что столбцы 11—15 не должны читаться, даже если они про­ биты. Это позволяет от одной группы данных переходить к дру­ гой, минуя те данные, которые мы не хотим рассматривать. Форматы описаны в монографиях Мак-Калла [2], Голда [5], Мак-Крэкена [7], а также Меррила и Смита [8].

Команда WRITE (писать). Результаты вычислений печата­ ются с помощью команды WRITE, сопровождаемой специфика­ цией формата. Форма команды WRITE очень сходна с формой команды READ. Запись команды FORMAT аналогична записи команды WRITE. Например,

WRITE (6,23) DELTA, GAMMA, NBAR

23 □ FORMAT (1H1, F10.3.5X, F10.3,5X,I3).

Команда указывает устройству печати переход к началу новой страницы, а затем в колонках 1— 10 печатается значение пере­ менной DELTA с десятичной точкой в колонке 4 (причем три колонки справа от десятичной точки отводятся для дробной ча­ сти числа). Колонки 11—15 останутся пустыми, и переменная GAMMA будет напечатана в колонках 16—25, причем снова три колонки справа от десятичной точки отводятся для дробной ча­ сти числа. Следующие пять колонок остаются пустыми, а целое значение NBAR будет напечатано в колонках 31—33.

Порядок переменных, указанный в команде WRITE, должен соответствовать порядку полей, спецификация которых опреде­ ляется в предложении формата. С помощью вводного формата можно описать не более 80 колонок, так как это число колонок перфокарты. Однако устройства построчной печати могут печа­ тать 120 или больше колонок, что позволяет в выводных форма­ тах учитывать до 132 печатаемых символов плюс одна позиция

для управляющего символа. Все это необходимо

согласовать

с вычислительным центром (Мак-Калла [2], Голд

[5], Мак-Крэ-

кен [7]).

Номера предложений. Несколько слов о номерах предложе­ ний. Последние используются для однозначного указания ка­ кого-либо предложения в программе. Так, например, в командах READ или WRITE они используются для обозначения другого

предложения FORMAT. Номера предложений можно распола­ гать в программе в любом порядке, используя для этого любые числа от □ □ □ □ 1 до 99999, при условии, что один и тот же но­ мер соответствует только одному предложению. Необходимо отметить, что не все предложения требуют нумерации, а только те, на которые есть ссылки в других предложениях.

Окончание программы. Теперь мы владеем правилами записи арифметических предложений, а также правилами ввода дан­ ных в машину и вывода из нее. Рассмотрев еще несколько пред­ ложений, мы сможем приступить к написанию программ. Иногда выполнение программы прекращается из-за возникновения оши-' бок или же в связи с выполнением всех заданных операций. Это можно сделать с помощью предложения STOP. Однако этот

прием достаточно хорош только для

малых ЭВМ. Остановка же

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

машины — сложная задача,

и этого стараются избегать всеми возможными способами. Боль­

шая вычислительная машина работает под управлением так на­

зываемого монитора (операционной

системы), который автома­

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

CALL EXIT.

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

Предложения STOP или CALL EXIT должны следовать не­ посредственно за последним предложением, которое выполня­ ется в вашей программе. Иногда после STOP или CALL EXIT помещают невыполнимые предложения, например такие, как карты формата. (Многие программисты предпочитают все карты формата вводить в конце, где их легко найти в том случае, если требуются какие-либо изменения.) Фактически последней картой вашей программы должна быть карта

END.

Она указывает вычислительной машине, что данная программа на ФОРТРАНе выполнена и можно перейти к выполнению оче­ редной программы.

Теперь давайте напишем программу!

Допустим, что нам нужно выразить объем осадочной частицы через объем эквивалентной сферы некоторого радиуса. Иными словами, приблизительно эллипсоидальное зерно можно описать с помощью сферы некоторого радиуса, имеющей тот же объем. Это показано на фиг. 2.3. Предположим, что мы измерили три

предположительно являющееся устройством чтения карт. Карта, которая должна быть прочитана в предложении с номером 10, имеет заданный формат 3F10.0, т. е. должны быть пробиты три числа с десятичной точкой в любом месте на трех последователь­ ных полях из десяти колонок. Первая переменная называется AAXIS, вторая — BAXIS и третья — CAXIS. Эти названия выби­ рались почти произвольно, за исключением первой буквы, кото­ рая характеризует тип числа (вещественное или с плавающей точкой).

Арифметические операции, перечисленные во втором предло­ жении, выполняются в порядке, указанном последовательностью скобок. Первой выполняется операция перемножения трех осей, записанная во внутренних скобках, т. е. AAXIS * BAXIS * CAXIS. Полученный результат, как указано в следующих скобках, де­ лится на 8, и полученное число затем возводится в степень 7зМатематический символ, эквивалентный этому предложению на

ФОРТРАНе, имеет вид

Фиг. 2.4. Тригонометрические соотношения в простой триан­ гуляционной задаче.

Р ассто я н и е

АВ и угл ы САВ и АВС

и звестн ы .

В ы ч и сляю тся р асстоя н и я

 

СА. СВ и СХ.

1У Щ 2 .

Если бы не скобки, то операции, вы­ полненные по обычным правилам ФОРТРАНа, дали бы выражение

А . В . С

После выполнения указанных ариф­ метических операций результат приписывается переменной, назван­ ной R. Снова название переменной выбрано произвольно, но тем не ме­ нее оно соответствует правилам вы­ бора названий вещественных пере­ менных. Затем переменная R печа­ тается на периферийном устройстве с номером 6, предположительно яв­ ляющимся устройством построчной печати, в соответствии с форматом, заданным в предложении И. Формат указывает устройству печати пере­ ход на новую страницу 1Н1, затем требует напечатать слово из 30 сим­ волов, после чего на дополнитель­ ном поле из 10 колонок печатается переменная R с четырьмя знаками справа от десятичной точки.

Предложение CALL EXIT возвращает управление операцион­ ной системе. Предложение END указывает компилятору на. окон­ чание программы.

Вы можете попытаться сами запрограммировать простую за­ дачу, связанную с триангуляцией (фиг. 2.4). Нам необходимо уз­ нать расстояния от двух базисных точек А и В до недосягаемой точки С. Расстояние между точками А и В известно, так же как и углы АВС и ВАС. Напишите программу вычисления расстоя­ ний АС, ВС и расстояния от точки С по перпендикуляру к ли­ нии АВ. Напомним, что тригонометрические функции ФОРТРАНа используют аргументы в радианах, а не в градусах (1° = = 0.01745329 рад). Ваша программа должна быть пригодна для применения при решении триангуляционных задач, например при АВ = 532 м, АВС = 62° и ВАС = 87°.

Операторы управления

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

IF (выражение) пи п2, п3

В скобках можно поместить любое арифметическое выраже­ ние, записанное по правилам языка ФОРТРАН; щ, пг, «з — номера предложений (операторов). Если выражение в скобках отрицательно, то управление передается предложению с номером пь Если выражение в скобках равно нулю, то управление пере­ дается предложению п2. Если выражение в скобках положи­ тельно, то будет выполняться предложение с номером пз.

В качестве примера рассмотрим последовательность IF (A L P H A -12.0) 15, 25, 8

8 □ В ЕТ А = ALPHA * GAMMA

15 □ BETА = ALP НA/GAMMA

25 □ B ET A = 1.0/(ALPHA * GAMMA)

Если а меньше 12, то следующим выполняется предложение 15 и р приравнивается a /у. Если величина а в точности равна 12, то следующим выполняется оператор 25 и Р приравнивается 1/(а-у). Если же а больше 12, то следующим выполняется предложение 8 и р приравнивается а-у.

Предложение безусловного перехода GO ТО изменяет по­ следовательность операций, передавая" управление оператору, отличному от следующего в указанном порядке. Этот оператор не производит проверки условий. Однако в данный момент мы рассматриваем его потому, что он дает возможность возвраще­ ния к главной последовательности операций после разветвления-, осуществляемого оператором условного перехода, а также по­ зволяет осуществить обход тех частей программы, которые не должны выполняться. В нашем примере', если а больше 12, то переменной р в процессе работы программы последовательно присваиваются три различных значения. Иногда это не соответ­ ствует нашим намерениям. При использовании предложений GO ТО можно опустить нежелательные операции в следующей последовательности:

IF (ALPHA-1 2 .0 ) 15, 25, 8 8 □ BETA = ALPHA * GAMMA

GO TO 30

15 □ BETA=ALPHA/GAMMA GO TO 30

25 □ B ET A = 1.0/(ALPHA * GAMMA)

30 □ DELTA ==ALOG 10 (BETA)

В этой последовательности предложений переменной р при­ сваивается требуемое значение, после чего управление переходит к предложению 30. Изложение вопросов, связанных с операто­ ром управления, можно найти в книгах Голда [5J, Мак-Крэкена [7J, а также Мэррилла и Смита [8].

Оператор GO ТО вычисляемый. Предложение IF приводит к разветвлению вычислительного процесса в трех направлениях в зависимости от знака вычисляемой величины. Другой опера­ тор управления, а именно оператор GO ТО вычисляемый, обус­ ловливает ветвление вычислительного процесса в любом числе возможных направлений. Он имеет вид

GO ТО (tix, ftz, п3, . . ., п), I

где tii, пг и т. д.— номера предложений, а I — целая переменная, записанная без знака. Предположим, что значение целой пере­ менной есть 3, тогда осуществляется передача управления к предложению, номер которого стоит в скобках на третьем ме­ сте, в данном случае к предложению с номером пз. Например,

рассмотрим предложение

GO ТО (15, 25, 8, 10), NUMB.

Если переменная NUMB имеет значение 4, то следующей вы­ полняемой по порядку операцией должно быть предложение 10. Если переменная NUMB равна 1, то управление передается опе­ ратору с номером 15 и т. д. При этом требуется соблюдать сле­ дующую предосторожность: значение, принимаемое целой пере­ менной, не должно быть меньше единицы и не может превышать число допустимых ветвлений в скобках. В нашем примере пере­ менная NUMB не должна превышать 4. Если она превысит 4, то действие программы заранее нельзя предсказать. Подробно этот

вопрос

рассмотрен в книгах Мак-Крэкена [7], Мэррилла

и Смита

[8].

Операторы отношения. ФОРТРАН IV содержит ряд опера­ торов отношения, которые позволят принимать решения, основы­ ваясь на сравнении относительных величин двух переменных (их равенство или неравенство). Мы можем принять то или иное ре­ шение в зависимости от выполнения некоторого соотношения. Например, «если а меньше р, то выполняется указанная опера­ ция; если а больше р, то осуществляется переход к следующему по порядку предложению.»

IF (ALPHA. LT. BETA) GAMMA = DELTA * * 3.

В скобках содержатся две сравниваемые переменные и сокра­ щенное обозначение оператора отношения (следует особо отме­ тить, что оператор отношения обычно записывается сокращенно). Непосредственно за скобкой следует оператор, который должен быть выполнен, или GO ТО. На этом месте может быть запи­ сано любое предложение на ФОРТРАНе, за исключением дру­ гого логического предложения IF или предложения DO. Если вы­ ражение в скобках имеет ложное значение, то выполняется пере­ ход к следующему предложению программы. Если в логическом операторе IF используется арифметическая операция, как в на­ шем примере, то это приводит к добавлению к программе нового предложения при условии, что предложение отношения истинно. Если а больше или равно р, то управление передается следую­ щему оператору.

Операторы отношения включают

Логические предложения

IF (A LPH A .LT .BETA ) IF (A LPH A .LE.BETA ) IF (A LPH A .EQ .BETA ) IF (A LPH A .N E.BETA ) IF (A LPH A .О Т .BETA) IF (ALPH A .O E.BETA)

Смысловое содержание

»< P “ <P » = P “ Ф P

a > p

a > p

4 З а к а з N° 455

Логические операторы. Кроме описанных, ФОРТРАН IV ис­ пользует ряд логических операторов, которые позволяют рас­ крыть содержание логического предложения IF. Употребляются два логических оператора .AND. и .OR. Предложение вида

IF (ALPHA. LT. BETA. AND. GAMMA. LT. DELTA)

содержит два условия (a < P ) и (у < б ), которые должны одно­ временно выполняться для того, чтобы утверждение в скобках было истинным. Наоборот, предложение

IF (ALPHA. GT. BETA. OR. GAMMA. EQ. DELTA)

правильно, если являются истинными условия (a > P )

или (у =

= 6 ).

 

 

Логические выражения, которые можно построить, не огра­

ничиваются двумя

приведенными в этих примерах. В ФОРТ-

РАНе существуют

и другие логические операторы,

но в про­

граммах этой книги они не используются. Детально этот вопрос рассмотрен в монографиях Мак-Крэкена [7], Мэррилла и Смита [8].

Теперь попытаемся составить программу, содержащую опе­ раторы управления. В качестве упражнения мы перепишем про­ грамму вычисления эквивалентного сферического радиуса, про­ должая чтение карт до тех пор, пока не будет считана величина, являющаяся признаком конца. Тогда выполнение программы за­ канчивается. Для того чтобы можно было легко проследить от­ дельные изменения, выходная информация программы на листах распечатки должна содержать исходные значения осей и экви­ валентные значения сферических радиусов. Счетчик регистри­ рует каждое наблюдение по мере его поступления. Читателю ре­ комендуется самостоятельно разобраться в том, какие изменения были внесены в программу, а затем провести вычисление экви­ валентных сферических радиусов для серии наблюдений, указан­ ных в табл. 2.2. Если ЭВМ читает пустую карту, то значение переменной AAXIS получается равным нулю и управление пере­ дается предложению 5, что приводит к выходу из программы. Чтение карт, вычисления и печать осуществляются до тех пор, пока не будет введена пустая карта.

1*0

WRITE!6,12)

1 READ!5 , 10)AAXIS, BAXIS.CAXIS

IF!AA XIS)5,5,2

2 I-I+l

R «( ( AAXIS*DAXIS*CAXIS)/ 8 . 0 ) * * 0 .33333 WRITE!6,11 ) I * AAXIS,BAXIS.CAXIS,R

GO TO t

5 CALL EXIT

10FORMAT!3F10 .0 )

11FORMAT! I 3 ,5 X ,F 5 . 2 ,5 X ,F 5 .2 ,5 X ,F 5 . 2 ,5 X ,F I 0 .4 )

12 FORMAT!1 HI, 50HN0•

A-AXIS

B-AXIS

C-AXIS

EQUIV. SPHERE)

END

 

 

 

 

Т а б л и ц а 2.2

Результаты измерения длины осей десяти зерен песка, мм

 

 

 

Оси

 

 

 

А

в

с

А

в

 

с

1,8 6

0,95

0,82

2,34

1,46

1

,0 2

1,43

0,82

0,71

1,6 6

0,84

0,72

1,54

1 ,2 1

0,91

2,56

2 ,2 1

2

,0 1

1,73

1,38

1,30

1,0 2

0,64

0,53

1,95

1,0 2

0,85

2,53

2,04

0,62

Индексированные переменные и циклы DO

Нередко требуется вычислить не одно значение некоторой ве­ личины, а последовательность ее значений. Для выполнения по­ вторяющихся операций удобно ввести индексированные пере­ менные, которые имеют следующую форму:

Обозначения на ФОРТРАНе

Математические обозначения

ALPHA

(I)

 

ALPHA

(I, J)

аи

Первая переменная имеет один нижний индекс, который опре­ деляет массив, называемый ALPHA, содержащий элементы с но­ мерами от 1 до гп, что указывается целой переменной в скобках. Предположим, например, что массив ALPHA содержит шесть элементов:

4.0

2.7

3.4

8.2

6.0

8.5

ALPHA (4) указывает четвертый элемент в массиве, а 4, равный

8.2. Аналогично ALPHA (2)

обозначает элемент а2, значение ко­

торого равно 2.7. Индекс — целое число, обозначающее положе­ ние элемента в массиве ALPHA. Так как это целое число, его можно представить целой переменной, что позволяет указывать различные элементы массива без явного числового определения

каждого из них.

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

4*

от 1 до п. Например, массивом с двумя индексами является таб­ лица, состоящая из двенадцати элементов, расположенных в трех строках и четырех столбцах:

4.0

6 .2

5.8

3.1

7 .5

6.4

8 .2

9.3

0 .2

5.1

2.9

7:7

ALPHA (2, 3) обозначает второй элемент в третьем столбце, т. е. СС2, з = 8.2. ALPHA (3, 2) обозначает третий элемент во втором столбце, или а 3>2 = 5.1. Как и в случае переменных с одним ин­ дексом, каждый из индексов записывается в виде целой пере-' менной, указывая таким образом любой элемент массива.

Предположим, что мы хотим сложить двадцать значений, ко­ торые хранятся в таблице, называемой Х(1). Обозначим требуе­ мую сумму SUMX:

SUMX = 0.0

1= 1

10DSUM X = SU M X+X(I)

1= 1 + 1

IF (1 -20) 10, 10, 11 11 □ CONTINUE.

Сначала переменной SUMX присваивается значение, равное нулю. Эта предосторожность принимается с целью устранения предыдущего значения этой переменной. Затем I присваивается

значение

1,

так что Х(1) принимает значение, равное

первому

элементу

в

массиве X.

Это

значение

прибавляется к

SUMX.

На этом

шаге SUMX =

X (I).

Затем к

I прибавляется

1, в ре­

зультате получаем новое значение I, равное 2. Наконец, опера­ тор IF проверяет, не становится ли I больше 20. Пока это усло­ вие не выполнено, вычисления возвращаются к оператору с но­ мером 10, и значение Х(2) добавляется к SUMX. Эта процедура продолжается до значения 1 = 21, после чего управление пере­ дается оператору 11, предложение CONTINUE в данном случае является фиктивным, не несущим никакой функции. Управление просто передается следующему оператору программы.

Вместо арифметического предложения IF для возврата про­ граммы к оператору 10 можно было бы использовать другие про­ цедуры, например, такие, как логический оператор

IF (I. LE. 20) QO ТО 10.

Ниже мы рассмотрим очень полезное предложение ФОРТРАНа, которое используется для тех же целей, но требует значительно меньших усилий при программировании.