• Tidak ada hasil yang ditemukan

Обучение программированию на фортране. Цель настоящ ей главы — ознакомиться с основами техники програм м ирования вы

числительных задач на фортране. М етодика обучения програм ­ мированию вклю чает знакомство с м инимальны м фортраном в объеме п. 3.2. Д ля некоторых пользователей это и максимум необходимых знаний. Изложение за небольш им исключением ведется на уровне ф ортрана 66 без дальнейш их оговорок.

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

М инимальный фортран можно было бы еще сократить, оставаясь верным структурному програм м ированию (см. гл. 2). Это не сде­

лано по той причине, что возмож ны трудности в понимании

текста чужих програм м . С первых ш агов обучения п рограм м ирова­

нию необходимы работа на ЭВМ и решение учебных задач с использованием каж дого изученного оператора ф ортрана.

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

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

Следующий этап обучения наступает тогда, когда пользователя уже не удовлетворяет «какая-нибудь» програм м а решения задачи.

Возникает желание или необходимость написать в некотором смысле оптимальную програм м у (по быстродействию , с мини­

м альны м и затратам и пам яти и т. п.). Н екоторы е приемы оптими­

зации в програм м ировании изложены в 3.4.

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

гаю тся в 3.5.

Важным м ом ентом обучения програм м ированию на всех этапах является стремление написать простую по стилю програм му.

И хотя понятие простоты, как и красоты, определить довольно трудно, простая програм м а отличается тем, что ее работу можно понять в отсутствие автора. Такому стилю програм м ирования отвечает концепция структурного программирования. Э тот стиль не связан с конкретным языком. В более поздних, чем фортран, языках (например, паскале) заложены эти концепции. Н а фортране есть возмож ность писать плохие по стилю програм м ы . П оэтом у с начального этапа обучения следует избегать «дурных привычек»

в программировании.

# 3.2. Основы программирования на фортране

3.2.1. Символы. П ри записи п р о гр а м м на ф о р тр а н е и сп ользую тся следую щ и е си м волы :

1) Прописные буквы латинского алф авита от А до Z;

2) Ц ифры от 0 до 9;

3) Специальные символы;

- пробел

= — знак равенства -I---плюс

--- минус

* — звездочка / — косая черта ) — правая скобка ( — левая скобка

, — запятая

. — десятичная точка ' — апостроф

” — кавычки

$ — денежный символ : — двоеточие.

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

И з символов язы ка образую тся ключевые слова (например, IF (если), DO (делать), GO ТО (идти к) и т. п.), имею щие строго определенный смысл, и слова пользователя-- идентификаторы.

Идентификаторы— это последовательность (не более ш ести сим­

волов) букв и цифр, начинаю щ аяся с буквы.

Примеры.

1) Д опустимые идентификаторы А15, BETA, IN D M A S, А1В2С 2) Недопустимые идентификаторы С*ВЗ (содержит *)

5ALPH A (начинается с цифры)

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

3.2.2. Константы и переменные. Константы представляю т собой неизменяемую величину в процессе вычислений. Рассм отрим сле­

дующ ие типы констант: целые, вещественные, вещественные с двой­

ной точностью , комплексные, логические, текстовые.

Ц елая константа имеет следующий вид:

SN1N2...

где N 1N2 — последовательность десятичных цифр, a S — знак числа.

Если константа не имеет знака, она считается полож ительной.

Д опустимая область значений для целых констант (в ЭВМ с 16-битовым словом) — от — 32768 до +32767.

Примеры.

1) П равильная запись целых констант О

- 1 5 1 4 + 31539 275 037

2) Н еправильная запись целых констант 50327 (слиш ком велика)

3.14 (присутствует десятичная точка)

Вещественная константа мож ет быть записана двумя спо­

собами.

1. Вещественная константа без порядка имеет вид SN1N 2.N1N2

где N1N2 — последовательность десятичных цифр, a S — знак числа.

2. Вещественная константа с порядком записывается в виде К1ЕК2

где К 1 — вещественная константа без порядка, К2 — порядок (од­

нозначная или двузначная целая константа).

Значение вещественной константы находится в пределах от 0,29• 10~38 до 1 ,7 -1 0 + 38 (в ЭВМ с 32 разрядам и под запись числа, из которы х 24 бит отводятся под мантиссу).

Примеры.

1) П равильная запись вещественных констант 3.14159

3734.

-0 .2 1 3 4 28.Е31 2 . Е - 5

2) Н еправильная запись вещественных констант

$25. 5 (специальный символ) 41.3Е51 (слиш ком велика)

Вещественные константы удвоенной точности задаю тся в виде вещественной константы с порядком. Вместо буквы Е используется буква D.

Пример.

+ 131.5D + 2

Э тот тип константы занимает в пам яти 64 разряда. Точность представления числа с использованием 32 разрядов — порядка 7 десятичных цифр после запятой (0,9345671), с использованием 64 р азр я д о в — 17 десятичных цифр (0,93456718013542166). Диапазон изменения констант этого типа такой же, как у вещественных констант обычной длины.

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

лексного числа, а вторая кон стан та— мнимую часть. К омплексная константа имеет следующий вид:

(R l, R2)

где R l, R2 — вещественные константы.

Примеры.

1) К онстанта (25.236,— 1.3789) соответствует 25,536 — /*1,3789, где / — м ни м ая единица.

2) К онстанта (+ 1 7 5 6 7 .Е —4,0.) соответствует 1,7567.

3 Ю. П. Боглаев 65

Логическая константа мож ет принимать только два значения:

.TR U E. — «истина»

.FA LSE. — «ложь»

О граничиваю щ ие точки являю тся обязательной частью каж дой логической константы. Значения логических величин .TRUE, и .F A L ­ SE. представляю тся знаковым разрядом ячейки. Н уль в этом разряде соответствует .TRU E., а единица соответствует .F A L S E ..

О стальны е разряды ячейки нулевые.

Текстовая константа — это последовательность символов, кото­

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

N H C 1 C 2 ... CN Примеры.

17Н П РО ГРА М М А ПЕТРОВА 5HSTAR:

М аксимальное число символов в константе — 255. Текстовые константы удобно применять для сопровождения ввода и вывода чисел, таблиц чисел, поясняющей текстовой информации.

Т екстовая константа м ож ет быть определена без указателя длины. Такая константа имеет вид

'С 1 С 2 ... C N '

(последовательность символов заклю чается в апострофы).

Примеры.

П РО ГРА М М А ПЕТРОВА' 'STA R :'

Переменная представляет собой изменяемую величину в процессе вычислений. Переменная обозначается идентификатором.

Пример.

ХО, X I, EPSI.

Переменные разделяю тся по типу, так же как и константы, н а целые, вещественные и т. д. Тип переменной мож ет бы ть задан неявно. Если идентификатор начинается с букв

I, J, К, L, М, N,

то переменная целого типа, с остальных букв — вещественного:

IR I, К А М А , N — целый тип,

R l, АМ А, AN — вещественный тип.

К ром е того, тип переменной может бы ть задан явно операто­

рами описания типа, которые приводятся ниже. Тип переменной нужно установить до начала употребления переменной в программе, так как транслятор в соответствии с типом распределяет пам ять ЭВМ . Н апример, для переменной целого типа отводится одно 66

слово — 16 разрядов, для вещественного типа — 32 разряда, для комплексного — четыре слова — 64 разряда.

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

зволяет и его м ож но встретить в текстах програм м .

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

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

П рограм м а на ф ортране состоит из последовательности опера­

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

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

IN T E G E R — целый тип,

REA L — вещественный тип,

D O U BLE PR E C ISIO N — вещественный с двойной точностью , C O M PLEX — комплексный тип,

LO G IG A L — логический тип.

Операторы описания типа отм еняю т соглаш ения по умолчанию , например

IN T E G E R А, В REA L U, К CO M PLEX G, D, I LO G ICA L Q

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

3.2.3. Массивы. М ассив— это последовательность переменных одного типа, обозначаем ая идентиф икатором с индексами, закл ю ­ ченны м и в к руглы е скобки. Н ап р и м ер , в е кто р и с вещ ествен н ы м и компонентами н , , и2, ..., ип представляется одном ерны м массивом

U(I), U U N .

М атрица А с ком п онентам и—целыми числами A t J , 1 < / < /V, 1 < / < М , представляется двумерным массивом

K A (I,J), U K N , U J < M .

Значения индексов больш е либо равны 1. М ассив разм ещ ается в последовательно расположенных ячейках памяти. Размерность массива не более 3.

Массив, разм ерность которого больш е 1, располагается так, что левый индекс меняется быстрее правого. Д ля матриц это соответствует тому, что м атри ца А хранится в пам яти по столбцам

3 67

А (1 Л ) A (l, 2) А (1 ,3) А ( 2 ,1) А (2,2) А (2 ,3) А ( 3 ,1) А (3,2) А (3 ,3)

а именно: A (l, 1), А ( 2 ,1), А ( 3 ,1), А (1,2), А (2,2), А (3,2), А (1,3), А (2 ,3), А (3,3). Д ля обращ ения к конкретному элементу массива долж ны быть указаны или вычислены значения его индексов, например U(3) — третий элемент массива U, А (2, J ) — элемент второй строки J-ro столбца матрицы А (массива А). Значение J предварительно должно быть вычислено. Размер массива и тип его элементов в программ е должны быть описаны до первого употребления его элементов с помощ ью операторов описания типа, где указываю тся максимальные значения индексов. Н апример,

REA L U (20)

означает, что в программе будет использован одномерный массив вещественных чисел иь К /< 2 0 , или

IN T E G E R А (5,7)

означает, что в программе будет использован двумерный массив целых чисел A tj , 1 < /< 5 , 1 < /'< 7 .

Размер массива мож ет быть также определен с пом ощ ью невыполняемого оператора D IM E N SIO N по аналогии с выш е­

излож енным, например D IM E N SIO N U (20), А (5,7)

Н о чтобы описать массив А (5,7) как массив целых чисел, необходимо применить еще оператор описания типа

IN T E G E R А (5 ,7)

в противном случае соглашение по умолчанию устанавливает, что массив А состоит из вещественных чисел. Таким образом , если придерживаться строго описания типа всех переменных п рограм м , то оператор D IM EN SIO N оказывается лиш ним. В стандарте ф ортрана 8х этот оператор переведен в м одуль архаизмов.

3.2.4. Арифметические выражения и библиотечные функции. Ариф ­ метическое выражение — это запись математической формулы с ис­

пользованием констант, переменных, массивов, функций, соеди­

ненных знаками арифметических операций и скобками по правилам ф ортрана.

Знаки арифметических операций:

+ сложение

— вычитание

* умножение / деление

** возведение в степень.

Следует соблю дать следующие правила:

1) Н ельзя опускать знак умножения:

АВ не есть А*В 68

2) Н ельзя подряд писать два знака операций:

нельзя писать А* —В, нужно А*( —В) или — А*В

П орядок вычислений — по старш инству операций, при равном старш инстве — по порядку слева направо.

Порядок старш инства:

1) Вычисление функций.

2) Возведение в степень.

3) Умножение и деление.

4) Сложение и вычитание.

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

Н апример, значение выражения 1/3 + 2/3 равно 0, а не 1. В ариф­

метических выражениях м огут участвовать величины четырех типов:

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

2 + 2. вещественный

.2Е —2 /.3 D —1 с двойной точностью

Приведем примеры арифметических выражений.

Математическая запись Запись на фортране

Д ля вычисления индексов массивов допускаю тся следующие арифметические выражения:

целая константа * целая переменная + целая константа Например,

В програм м е м ож но обратиться к библиотечным функциям ф ортрана, указав имя и аргументы в скобках после имени (как в приведенном выше примере SIN(Y**2)). Аргументы при этом м огут бы ть арифметическими выражениями. П ользователю не нужно писать програм м у вычисления таких функций, готовую (библиотечную) програм м у вклю чит в нужном месте програм м ы пользователя операционная система.

П риведем некоторые библиотечные функции (полный список см. в гл. 12).

М атематическая запись Запись на фортране С

x* + sin у 2

А + В (А + В )/С

X**2 + SIN(Y**2)

V (I — 1) + V (2*1 + 3)

sin *

ABS(X) SIN (X) EXP(X)

3.2.5. Арифметический оператор присваивания. К ак уже отм еча­

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

С некоторы м и невыполняемыми операторам и мы уже познаком и­

лись (операторы описания типа переменных). С одерж ательная п рограм м а долж на иметь по крайней мере один выполняемый оператор.

К вы полняем ы м операторам относится арифметический опера­

тор присваивания. Вид оператора присваивания W = А

где W — идентификатор (имя) переменной, А — арифметическое выражение.

О ператор присваивания не эквивалентен м атематическому знаку равенства. Фактически этот оператор производит два действия:

1) вычисление арифметического выражения А;

2) присваивание значения арифметического выражения перемен­

ной.

Н апример, оператор Х = Х + 1

означает, что вычисляется выражение X + 1 и прежнее значение переменной X заменяется (затирается) на новое значение X + 1 .

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

П римеры арифметических операторов присваивания:

A (l) = S**2 + Q + A L G O L (X ) F = F + B ( I , К )*С (К , J)

П римеры неправильной записи:

Х = А = 3 (двойное присваивание не допускается)

SIN (X) = 1 (в левой части функция — часть арифметического выражения, а долж на стоять переменная)

3.2.6. Структура программы. Ф ортран-програм м а состоит из операторов. Каж ды й оператор печатается (набирается на клавиатуре дисплея) в строках длиной 80 символов. В строке не должно быть более одного оператора. Позиции символов в строке нумерую тся слева направо начиная с 1:

1 2 3 4 5 6 7 8 ... 72... 80 Строки делятся на четыре поля:

позиции: 1 — 5, 6, 7 — 72, 73— 80

О ператоры ф ортрана печатаю тся в третьем поле в позициях 7— 72, внутри этого поля расположение оператора произвольное.

Л ю бой оператор ф ортрана мож ет быть помечен меткой — деся­

тичным целым числом. М етки помещ аю тся в первом поле в позициях 1— 5.

Если оператор не помещ ается в позициях 7— 72 или для удобства желателен перенос оператора на следую щую строку, то в 6-й позиции строки продолжения следует напечатать лю бой символ, кроме пробела и нуля. Первое поле строк продолжения долж но бы ть пустым.

Четвертое поле (позиции 73— 80) под запись операторов не используется. В эти позиции можно пом ещ ать, например, номера строк.

Если в первой позиции лю бой строки програм м ы напечатана буква С

С К О М М Е Н Т А РИ Й

то такая строка транслятором полностью игнорируется, она рассматривается как комментарий. Текст ком м ентария помещ ается в позициях

2— 80. Н апример,

С АВТОР П Р О Г Р А М М Ы 2 ПЕТРОВ В. Н.

С В Е Р С И Я — 5, М АЙ 1990, Ф О РТРА Н 77

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

Последним оператором лю бой програм м ы долж ен быть оператор

EN D Оператор

STOP

п р ек р ащ ает вы п олн ен и е п р о г р а м м ы ; если о п е р а т о р STOP о т с у т с т ­ вует, т о вы п олн ен и е п о г р а м м ы закан ч и вается н а о п ер а то р е E N D .

В качестве прим ера структуры ф ортран-програм м ы приведем следую щ ую программу:

С П Р И М Е Р С Т РУ К Т У РЫ Ф О Р Т РА Н -П РО ГР А М М Ы С В Ы Ч И С Л Е Н И Е ЗН А Ч Е Н И Я Ф У Н К Ц И И У (Х ) С В Т О Ч К Е X

REA L X, Y

х=о.з

10 Y = (SlN (X ) + C O S(X )— 1.Е —4*Х**2) +

* (A L O G (X )/(X + 1)) EN D

Dokumen terkait