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

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

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

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

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

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

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

Устройства,

Центральный,

Устройства

ввода информации,

процессор

вывода информации

Фиг. 2.1. Функциональные части типичного вычислительного устройства.

электрические импульсы. Электрический импульс, проходя через сердечник, намагничивает его в определенном направлении. Им­ пульс противоположного направления приводит к обратному на­ магничиванию. Каждый элемент памяти действует подобно пере­ ключателю или реле, имеющему два устойчивых состояния: 0 или 1. Необходимо отметить, что в первых вычислительных машинах использовались механические реле со сходными свойствами.

Слово бит возникло из слияния двух слов: бтагу (двоичный) и digi£ (цифра), так как два состояния элемента памяти пред­ ставляют цифры двоичной системы счисления. Соединяя биты в группы, мы можем создать код, в котором любые числа, буквы или символы могут быть представлены в виде комбинации только нулей и единиц. Во многих современных вычислительных ма­ шинах биты соединяются в восьмерки и образуют байт, который способен хранить любую единицу информации. Хотя из восьми бит можно образовать 256 различных комбинаций, фактически используется только 90. Последние включают в себя десятичные цифры от 0 до 9, малые и заглавные буквы алфавита и ряд спе­ циальных символов, включающих знаки препинания и символы арифметических операций. Устройство вычислительной машины, или ее твердая структура, рассмотрено в гл. 2 книги Стерлинга и Поллака [4]. В гл. 3 они вводят термин мягкая структура, кото­ рой является логическая часть машины, представленная последо­ вательностью двоичных чисел, записанных в элементах памяти1.

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

Бинарные операции. Для выполнения операций в большин­ стве машин числа переводятся из десятичной в двоичную си­ стему, в которой осуществляются все математические операции. Например, десятичное число 1 в двоичной системе счисления за­ писывается как 0001. Десятичное число 2 — как 0010. Эти числа складываются по аналогии с десятичными, при этом надо иметь в виду следующую таблицу сложения:

0+ 0 = 0

0 + 1 = 1

1+ 0 = 1

1+ 1= 10

Сложение двоичных единицы и двойки дает

0001 + 0010

ООН

что является двоичным представлением тройки. Точно так же ООП

+0001

0100

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

 

 

 

Т а б л и ц а

2.1

Представление десятичных цифр в двоичной системе счисления

 

 

 

 

1

 

Д есятичные цифры

С оответствую щ ие им

Десятичные цифры

Соответствую щ ие

им

двоичные символы

двоичные символы

 

 

0

0 0 0 0

5

0 1 0 1

 

1

0 0 0 1

6

он о

 

2

0 0 1 0

7

0 1 1 1

 

3

ООП

8

1 0 0 0

 

4

0 1 0 0

9

1 0 0 1

 

с числами в двоичной системе счисления можно найти в книге Голда [5].

С помощью байта в машине можно представить один символ. Ряд байтов (от 2 до 12 в зависимости от типа машины) объеди­ няется в слова, местоположения (или адреса) которых одно­ значно фиксируются. В некоторых больших машинах группы (или блоки) последовательно расположенных в памяти слов свя­ зываются в так называемые страницы, каждой из которых также приписываются адреса. Это позволяет получить доступ к лю­ бому определенному блоку (странице) информации в памяти машины. Как только найден требуемый адрес, хранимая по,нему информация может быть прочитана. Физически процесс чтения сводится к определению направления намагниченности сердеч­ ника.

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

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

вывода данных, вплоть до введения информации в память,

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

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

ивнешнюю память. Хотя существует много различных уст­

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

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

Алгоритмические языки

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

К счастью, имеется возможность записывать ряд машинных инструкций с мнемоническими упрощениями, а не в двоичном коде. В машинах среди инструкций имеются такие команды, которые позволяют центральному процессору определять истин­ ные адреса данных непосредственно при вводе информации в машину. Это освобождает программиста от необходимости яв­ ного задания адресов в памяти в процессе написания программы. Язык, использующий мнемонические коды для записи команд или инструкций, называется языком ассемблера. Существует программа, которая осуществляет перевод команд, записанных на языке ассемблера в машинные коды. Такая программа на­ зывается АССЕМБЛЕРОМ. Языки ассемблера значительно по­ вышают производительность вычислительных машин. Поэтому очень важно, чтобы ими овладели как можно более широкие круги программистов и пользователей.

Хотя языки ассемблера являются значительным шагом впе­ ред по сравнению с машинными языками, программа на ассем­ блере все еще является детальным изложением вычислительного алгоритма. Это приводит к необходимости очень подробного опи­ сания каждой процедуры. Чтобы облегчить использование вы­ числительных машин для широкого круга исследователей, не являющихся специалистами в области вычислительной техники, а также чтобы облегчить работу программистов, были созданы языки компиляции. Для перевода программ с языков компиля­ ции на язык машины существует специальная программа, назы­ ваемая КОМПИЛЯТОРОМ. Последняя является программой, на­ писанной на языке ассемблера. Полученная после компиляции на языке ассемблера программа переводится ассемблером в ма­ шинные коды и может быть использована.

В настоящее время существует множество языков компиля­ ции, причем каждый из них предназначен для некоторого опре­ деленного круга пользователей. Слова, символы, даже структура и синтаксис языка подобраны так, чтобы они были подобны есте­ ственному языку группы людей, использующих данный компиля­ тивный язык. Компилятивные языки называются языками «выс­ шего уровня» или «проблемно-ориентировочными языками», потому что пользователь может писать программы, употребляя выражения, свойственные его проблеме, а не выражения, при­ способленные к машине. КОБОЛ (COBOL), например, является языком экономическим и ориентирован главным образом на со­ ставление финансовых сводок и отчетов. Название языка про­ исходит от слов COmmon Business-Oriented Language (обобщен­ ный язык деловых людей), АЛГОЛ (ALGOL), или ALGOrithmic Language (алгоритмический язык), является формализованным научно ориентированным компилятивным языком, который ис­ пользует синтаксис, напоминающий применяемый математи­

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

ФОРТРАН претерпел постепенную эволюцию: Его современ­ ный вариант называется ФОРТРАН IV. Комитет по стандарти­ зации, в который входят представители фирм-потребителей и профессиональных организаций, предпринял попытку разрабо­ тать частные типы компиляторов ФОРТРАНа, которые обеспе­ чили бы их применимость для разного типа вычислительных ма­ шин. Вариант ФОРТРАНа, который мы будем использовать в этой книге, соответствует стандартам, утвержденным Амери­ канским национальным институтом стандартов и Ассоциацией вычислительной техники. Многие особенности, свойственные не­ которым компиляторам ФОРТРАНа, не были использованы, так как они не имеют универсального применения. Однако приспосо­ бление программ, написанных на ФОРТРАНе, для самых малых ЭВМ приводит к снижению' эффективности программирования. Представленную в этой книге версию ФОРТРАНа IV целесооб­ разно использовать для вычислительной машины, эквивалентной или большей, чем IBM 360/40 с операционной системой OS. С не­ которыми изменениями тексты программ на ФОРТРАНе можно использовать на значительно меньших ЭВМ, таких, как IBM ИЗО. Приспособление некоторых более сложных программ, та­ ких, как программа факторного анализа (программа 7.5), для малых ЭВМ более старого поколения, например, IBM 1620, по­ требовало бы значительных программных изменений. Эта книга рассчитана на исследователя, имеющего доступ к средним вы­ числительным машинам общего назначения, имеющим компиля­ тор с языка ФОРТРАН IV.

Программирование на языке ФОРТРАН IV

Ниже мы приведем основные сведения о языке ФОРТРАН IV, необходимые для понимания приведенных в разных местах этой книги программ, для выполнения упражнений по програм­ мированию, а также для внесения изменений в эти программы

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

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

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

к разгадыванию

математических головоломок,

и тех,

кто

с удовольствием

читает менее известные работы

Льюиса

Кэр-

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

Если по какой-либо причине вы хотите избрать программиро­ вание своей профессией, то не следует ограничиваться этой про­

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

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

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

Как видно на фиг. 2.2, карта разделена на 4 зоны, или поля. Первая зона содержит колонки 1—5, следующая — только ко­ лонку 6, наибольшее поле занимают колонки от 7 до 72, и послед­ нее поле содержит колонки 73—80. Предложения ФОРТРАНа располагаются на наибольшем поле, т. е. они должны начинаться в колонке 7. Первое поле используется для обозначения номера (метки) предложения, который занимает первые пять колонок. Колонка 6 предназначена для символа, обозначающего про­ должение предыдущей строки: мы не будем касаться этого

Фиг. 2.2. 80-колоночная перфокарта для набивки предложений языка ФОРТРАН.

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

Арифметические предложения

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

ALPHA = BETA+ GAMMA

означает, что две величины BETA и GAMMA складываются, причем в результате получается величина, которая называется ALPHA. ALPHA, BETA и GAMMA — названия переменных, представляющих числа. Значения их либо задаются в программе, либо присваиваются при вводе данных в машину.

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