Статистика и анализ геологических данных
..pdfХ-формат используется для размещения пробелов между опре деляемыми полями. Например, указанный ниже 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.
Ниже мы рассмотрим очень полезное предложение ФОРТРАНа, которое используется для тех же целей, но требует значительно меньших усилий при программировании.