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

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

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

числа. Как следует из названия, целое число — число без деся­ тичных долей. Такие числа используются в операциях перечис­ ления. Переменные, представляющие целые числа, должны на­ чинаться с букв I, J, К, L, М или N. В названиях, которые состоят из букв или чисел, но не являются специальными симво­ лами, должно содержаться не более шести букв. Например, не­ которые названия целых чисел можно записать так:

N

JOE

MN221

ICOUNT.

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

X

BARX

A23G7

HICCUP.

Часто названия выбираются в соответствии с изображаемыми ими объектами. Так, например, в этой книге встретятся такие наименования программ, как SUMX, SUMY и XMEAN.

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

A L P H A =ВЕТА+3.7654.

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

ALPHA = ВЕТА+3.7Е2.

Число 3.7Е2 равно 3.7Х 102, или 370.

Такое число, как 35, в предложении NUMB = NCOUNT+35 является целой константой. Целая константа 35 и вещественная константа 35.0 не могут быть заменены одно другим в пред­ ложениях ФОРТРАНа, так как они по-разному хранятся и

3 Заказ № 455

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

ALPHA = GAMMA +NCOUNT

ALPHA = GAMMA + 3 5

NUMB = NCOUNT+ GAMMA

NUMB = NCOUNT+ 3 5 .0 .

Все указанные четыре предложения составлены неправильно, так как в них использован смешанный тип записи. Первые два предложения являются вещественными арифметическими, содер­ жащими целочисленные переменные (NCOUNT, 35), а последние два представляют собой целочисленные предложения, содержа­ щие вещественные переменные (GAMMA, 35.0). Дополнитель­ ный материал об арифметических предложениях на ФОРТРАНе можно найти в учебниках по программированию Мак-Крэкена [7J, Голда [5], Мэррила и Смита [8] и Мак-Кэлла [2], а также в некоторых других.

Максимально допустимое число цифр и максимальное значе­ ние как вещественных, так и целых чисел ограничено разрядной сеткой машины. На большинстве вычислительных машин мак­ симальное количество цифр целочисленных констант приблизи­ тельно равно 10; это соответствует максимальному значению целого числа приблизительно 235 или 1010. Вещественные кон­ станты обычно ограничены 7—9 цифрами и имеют абсолютную величину порядка 1038. Однако этих знаков может оказаться не­ достаточно для сохранения точности в сложных вычислениях, как, например, при возведении чисел в высокую степень. ФОРТРАН дает возможность объединять два слова с целью об­ разования слова двойной точности. Число значащих цифр, кото­ рые используются для удвоения точности, приблизительно вдвое больше, чем в словах, обладающих обычной точностью, хотя максимальная величина числа остается практически той же. Пе­ ременные двойной точности являются вещественными и требуют специального указания о двойной точности. Если мы хотим ис­ пользовать переменные ALPHA, BETA и GAMMA с двойной точ-

ностью, то перед основной частью программы должно стоять предложение

DOUBLE PRECISION ALPHA, BETA, GAMMA.

Это предложение называется описанием, так как оно определяет тип перечисленных в нем переменных. В этом примере перемен­ ные а, р и у объявлены переменными с двойной точностью. В вы­ числительной машине для хранения этих переменных тогда бу­ дут использоваться два слова [7].

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

сложения + вычитания — умножения * деления /

возведения в степень ** Оператор ** рассматривается как один символ. Он не может

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

Предложения ФОРТРАНа

ALPHA = BETA -f GAMMA ALPHA = BETA - GAMMA ALPHA = BETA*GAMMA ALPHA = BETA/GAMMA ALPHA = BETA**2

Математическая запись

= P + T a = p — 7

“ = PX т a = Ph

a = (52.

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

ALPHA = BETA * * .75

a = pv* или а = ^ р з .

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

показатель степени и затем по логарифму числа находят его зна­ чение. Последняя процедура значительно сложнее, и результат получается менее точным.

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

ALPHA=- A *B -|-C /D —Е * *1

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

а = (А B )+ (C /D ) - E 1.

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

ALPHA = ((A —В) * * (l+ J))/(C - D )

эквивалентно

(A — B)<I + J )

С — D

То же предложение без скобок было бы воспринято машиной следующим образом:

а = А — В1-)—g— D.

Сделаем еще одно замечание относительно знака = , который в ФОРТРАНе имеет несколько иное значение, чем в обычной ма­ тематике. Эту разницу можно охарактеризовать следующим об­ разом: символ = выражает не только равенство между объек­ тами, но также обозначает эквивалентность выражений, распо­ ложенных по обе стороны знака равенства, т. е. что выражение, содержащееся в левой части равенства, может быть заменено результатом выполнения операций в правой части равенства. Программа может содержать ряд предложений типа

ALPHA = BETA ALPHA = GAMMA.

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

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

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

ALPHA = SQRT (BETA),

где SQRT — название функции]/- и BETA — аргумент функции. Это предложение требует извлечения квадратного корня из Р и затем присваивания полученного значения переменной а. Функции, которые приняты в большинстве компиляторов ФОРТРАНа и которые мы будем также использовать в дальней­ шем, следующие:

Функции ФОРТРАНа

ALPHA = EXP (BETA) ALPHA = ALOQ (BETA) ALPHA = ALOQIO (BETA) ALPHA = SIN (BETA) ALPHA = COS (BETA) ALPHA = ATAN (BETA) ALPHA = SQRT (BETA) ALPHA = ABS (BETA)

Математические функции

a =

eP

 

a =

loge P

 

a =

logio P

 

a =

sin p (в

радианах)

a =

cos p (в

радианах)

a =

arctan p (в радианах)

«-1М -

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

Например,

ALPHA = ALOG (BETA* SQRT (GAM M A+DELTA))

a = loge (PV r-H )-

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

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

ALPHA=DSQRT (BETA).

В ФОРТРАНе есть еще две важные функции, которые не имеют математических эквивалентов. Это функция_1Е1Х, кото­ рая преобразует вещественную переменную в переменную с це­ лочисленными значениями, и функция FLOAT, которая преобра­ зует целочисленную переменную в вещественную. Названия этих функций произошли от выражений «fixed-point» (фиксирован­ ная точка) и «floating-point» (плавающая точка). В выражении

ALPHA= BETA * FLOAT (NUMBER)

целочисленная переменная NUMBER преобразуется в вещест­ венную переменную, и поэтому ее умножение на вещественную переменную законно. Аналогично

NUMBER = MEAN+ IFIX (GAMMA).

Необходимо отметить, что выражение вида

NUMBER = ALPH A+BETA

не является предложением смешанного типа. Операции, стоящие в правой части равенства, должны быть выполнены, а получен­ ное значение должно быть приписано переменной NUMBER. Так как NUMBER является целым числом, то все дробные части дол­ жны быть отброшены. Округление не производится. Предполо­ жим, что переменная ALPHA имеет значение 3.7, переменная BETA равна 2.1, а их сумма равна 5.8. Тогда переменной NUMBER должно быть приписано значение 5.

Точно так же выражение

ALPHA = MEAN+NUMBER

не является предложением смешанного типа. Операция, указан­ ная в правой части, выполняется в целых числах или с указа­ нием десятичных знаков, и полученное значение приписывается как вещественное число переменной ALPHA. Если переменная MEAN равна 5, а переменная NUMBER равна 2, то значение, приписанное переменной ALPHA, должно быть 7.0.

Это второе исключение из правила, запрещающего предло­ жения смешанного типа. Переменные, разделенные знаком ра­ венства, могут быть различного типа. См. работы Голда [5], Мак-Крэкена [7], Мэррила и Смита [8], где содержится допол­ нительная информация о функциях ФОРТРАНа.

Ввод и вывод

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

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

Предложение READ (читать). Данные вводятся в машину с помощью предложения READ, имеющего форму

READ (5, 1000) NUMBER, GAMMA, DELTA.

Предложение READ учитывает, какая операция должна быть выполнена. Числа в скобках указывают устройства ввода, с по­ мощью которых данные будут вводиться (первое) и номер пред­ ложения формата (второе). Приведенная команда означает: «прочесть три переменные, записанные в соответствии со специ­ фикациями, указанными на карте с номером 1000, используя периферийное устройство номер 5». Все устройства ввода-вы­ вода, включая устройство чтения карт, перфоратор, все магнит­ ные барабаны, устройства построчной печати и другие, пронуме­ рованы. Большинство вычислительных систем использует для главного устройства ввода (обычно это устройство чтения карт) один и тот же номер 5. Главным выводным устройством явля­ ется устройство построчной печати, и ему обычно присваивается номер 6. Однако эта нумерация может в различных вычисли­ тельных центрах отличаться. Ознакомьтесь с этими условными обозначениями в вашем вычислительном центре перед тем, как попытаетесь ввести программу в ЭВМ.

FORMAT. Предложение с номером 1000 в команде READ от­ сылает нас к карте, на которой пробито число 1000, записанное

по правилам языка в поле, включающем колонки 2—5. Это предложение FORMAT и оно может быть записано так:

1000 □ FORMAT (12, F6.0, F10.0).

Команда FORMAT указывает вычислительной машине, что это спецификация ввода-вывода. Информация в скобках указывает, каким образом данные будут размещены на карте, которую тре­ буется прочитать, а также содержит пояснение о том, будут ли данные целыми или вещественными. Предложение говорит: «це­ лое число пробито в двух колонках 1 и 2, за ним следует вещест­ венное число, пробитое в колонках 3—8, за которым вновь идет, вещественное число, пробитое в десяти колонках 9—18».

Допустим, что мы написали программу, которая содержит эти два предложения. Предложение FORMAT можно поместить практически в любом месте программы: перед предложением READ, или непосредственно после него, или же в конце про­ граммы. Вычислительная машина не будет замечать его до тех пор, пока она не прочтет команду READ, которая укажет ей предложение 1000. Как только вычислительная машина получает команду READ, она немедленно обращается к предложению FORMAT для того, чтобы определить форму, в которой будет осуществляться ввод. Тогда начинает работать устройство чте­ ния карт, вводится одна карта и читаются данные, записанные в трех полях спецификации. Остальные символы на карте игно­ рируются. Данные трех полей присваиваются переменным NUMBER, GAMMA и DELTA. Затем вычислительная машина обращается к команде, непосредственно следующей за предло­ жением READ, и продолжает выполнение программы. В боль­ ших вычислительных машинах последовательность команд мо­ жет несколько отличаться от указанной. Информация считыва­ ется с больших пачек карт и хранится на магнитной ленте. Затем вычислительная машина считывает ее с магнитной ленты так, как если бы это был ввод с перфокарт. Это делается с це­ лью экономии времени и не заставляет изменять описанную по­ следовательность команд.

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

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

Код

Тип данных

Пример

13

Целые числа

 

321

F6.2

Вещественные

числа с десятичными

423.21

 

знаками

 

Е 10.2

Вещественный показатель степени

1234.56Е03

D16.2

Вещественные

числа удвоенной точ­

13765482213.2D 13

 

ности

 

12Н

Холлерит

 

PRINTEDDDATA

Пробелы

 

□ □ □ □ □

Указанные слева величины соответствуют полям специфи­ кации.

Форматы целых чисел должны быть достаточно длинными для размещения вводимых чисел. Если число отрицательно, то поле должно содержать на одну колонку больше для размеще­ ния знака. Например, число —425 требует форматной специфи­ кации 14. (До тех пор пока не указано обратное, знак числа счи­ тается положительным.) Если несколько одинаковых целых по­ лей следует одно за другим, то в формате это изображается, например, как 315. Это значит, что на карте расположены три последовательных целых поля, занимающих по пять колонок каждое.

Вещественный формат (или формат с плавающей точкой) может быть использован двумя способами. Число, подобное 232,436, может быть введено в вычислительную машину, зани­ мая при этом на карте формата не более шести колонок при ис­ пользовании формата F6.3, который указывает, что длина поля равна 6 колонкам и три колонки располагаются справа от де­ сятичной точки. В этом случае пробивается число 232436, и деся­ тичная точка автоматически вставляется вычислительной маши­ ной между третьей и четвертой цифрами. Если числу присвоен знак, то формат должен быть расширен, в нашем случае до F7.3. Число может быть отперфорировано как +232436, и десятичная точка снова будет помещена в нужном месте.

Данные, считываемые с форматом F, также могут содержать десятичную точку. В этом случае данные читаются так, как они пробиты, и положение десятичной точки определяет дробную часть числа независимо от форматной спецификации. Например, число 236.42 при коде F6.4, все равно будет воспринято машиной как 236.42. В действительности в практике программирования для спецификации полей F используется такая запись, как F6.0, F10.0 и им подобные, и при этом подразумевается, что данные снабжены десятичной точкой.

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

Экспоненциальные форматы используются в тех же случаях/ что и форматы F, за исключением характеристик большой длины и значений показателя степени. Числа можно считывать и с де­ сятичной точкой или без нее. Форматы двойной точности иден­ тичны экспоненциальным форматам, но вместо Е между числом и показателем степени вставляется буква D. Экспоненциальная запись особенно полезна в том случае, когда абсолютную вели­ чину числа нельзя заранее предсказать. Так же, как и в случае формата I, повторяющиеся поля данных можно описать форма­ тами F, Е и D. Например, 4F10.0 описывает четыре последова­ тельных поля, каждое из которых содержит десять колонок, составленных из вещественных чисел.

Холлерит, или Н-формат, используется в двух целях. Во-пер­ вых, он позволяет вводить в вычислительную машину и печатать

алфавитно-цифровые данные, например, такие, как

заглавия.

(Алфавитно-цифровые символы — это просточисла,

символы

и буквы алфавита, которые не преобразуются машиной и не ис­ пользуются в вычислениях.) Поля Холлерита указывают число колонок, требуемое для размещения записи. Вводимая в формате Холлерита информация не может быть использована в вы­ числениях из-за способа ее хранения. Таким образом вводятся цифры, буквы и специальные символы. Во-вторых, поля Холле­ рита используются для управления печатью строк, когда для вывода данных используется печатающее устройство. Первое поле спецификации WRITE может занимать одну колонку поля Холлерита. Если поле содержит пробел, то происходит обычная протяжка бумаги (один интервал). Если поле содержит нуль, то печатающее устройство осуществляет удвоенную протяжку бу­ маги (два интервала между строками). Приведем полный пере­ чень команд расположения:

1HQ

Обычная протяжка бумаги

1Н0

Двойная протяжка

1Н1

Переход к новой странице

1Н-{-

Без

перехода к следующей строке

 

(т. е.

без протяжки бумаги)