числительных задач на фортране. М етодика обучения програм мированию вклю чает знакомство с м инимальны м фортраном в объеме п. 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