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

Книга Фортран Павловец 2008

.pdf
Скачиваний:
127
Добавлен:
31.05.2015
Размер:
1.55 Mб
Скачать

А=В**(С**2)

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

Отрицательное число не может быть возведено в вещественную степень. Поэтому в выражениях записи функции sin2x запись в программе должна быть:

SIN(X)**2

где 2 – целого типа, без точки.

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

целую степень заменяется перемножением. Например, выражение x2,5 + 3 y 2sin2 x +e2x

должно быть записано так:

X**2.5 + Y**(1./3.) – 2.*SIN(X)**2 + EXP(2.*X) .

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

Если арифметическое выражение получило результат вещественного типа и этот результат присваивается переменной целого типа, то дробная часть результата отбрасывается (без округления!) и переменной присваивается только целая часть результата.

Примеры:

 

A=1/3

результат =0

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

A=1./3.

результат =0.33(3 в периоде)

I=199/100

результат =1

J=1./3

результат =0.33(3)

при вычислении, а при пересылке результата вычисления в ячейку памяти ЭВМ дробная часть результата отбрасывается и J будет равно 0. Это происходит потому, что J – переменная целого типа.

Если выражение для 3 y записать как Y**(1/3), то результат такой записи при любом

Y будет равен 1. Поскольку деление 1 целого типа на 3 дает результат также целого типа - ноль. Любое число Y, возведенное в нулевую степень, будет равно 1. Правильная запись: Y**(1./3.).

Ошибки в записи порядка операций с данными целого типа являются одними из самых распространенных!!! Обратите внимание!

7. Расположение текста программы на экране дисплея

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

Правила набора текста программ:

В одной строке на экране дисплея можно разместить 80 символов. Текст программы записывается с 7 позиции по 72.

1 2 3 4 5 |6| 7………………………………………72|73……80

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

11

1-5 позиции – отведены для записи меток операторов.

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

Если в первой позиции строки размещается латинская буква C или символ «*» или «!» - то это строка комментариев. Она служит для внесения поясняющего текста в программу.

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

Цифры, внесённые с 1 по 5 позицию, являются меткой оператора.

Метка оператора – это число, содержащее до 5 символов, которое обозначает условный номер оператора. Метки ставят не на все операторы, а только на те, на которые будут ссылки в программе. Назначение меток: метки дают возможность обращаться к нужной строке программы из любого места этой программы.

Правила:

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

Обязательно должны присутствовать метки после операторов GOTO и IF арифметического.

Задача:

Составить программу для вычисления площади треугольника по формуле Герона:

S = p ( p a )( p b)( p c )

p= (a + b + c ) / 2

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

Впроцессе работы программы необходимо вычислить значение площади S и вывести это значение на экран.

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

1 2 3 4 5 |6|7

72|73

C

Программа № 1 – Вычисление площади треугольника

4 WRITE(6,*)’ Введите значения сторон треугольника A,B,C’

Оператор WRITE служит для вывода информации. В данном случае на экран дисплея (т.к. стоит цифра 6). Символ * означает, что вывод бесформатный (упрощённый)

При работе программы и выполнении этого оператора на экране дисплея появится приглашение к вводу информации: Введите значения сторон треугольника A,B,C (желательно все программы снабжать такой строкой).

READ(5,*) A,B,C

12

 

READ служит для ввода информации. A,B,C – список имен переменных,

 

значения которых необходимо ввести. 5 – канал ввода данных с экрана

 

дисплея. Символ «*» – бесформатный( упрощенный) ввод.

 

Данная строка расшифровывается так: ввести с экрана дисплея числовые

 

данные для переменных A,B,C.

 

P=(A+B+C)/2. Сложить значения переменных, хранящихся в переменных А, В,

 

С, разделить на 2 и результат записать в переменную Р.

 

S=SQRT(P*(P-A)*(P-B)*(P-C)) Вычисляется значение переменной S.

 

WRITE(6,*) ’Площадь треугольника со сторонами’, A,B,C,’ равна’,S

 

Выводится информация, находящаяся в списке вывода за скобками оператора

 

WRITE. На экране появится текст Площадь треугольника со сторонами,

 

затем три числа - численные значения переменных А,В,С, затем текст равна

 

и численное значение переменной S.

 

GO TO 4 Этот оператор осуществляет переход на метку 4 в начало

 

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

 

вычисления площади другого треугольника.

6

STOP

 

END

 

Операторы STOP и END осуществляют стандартное завершение программы.

 

Поскольку оператор STOP расположен после GO TO, то он должен иметь

метку (хотя в программе на метку 6 и нет ссылок).

Текст программы набран жирным шрифтом. Курсивом сделаны пояснения к операторам. Все операторы любой программы выполняются поочередно, сверху вниз до конца программы. Любая программа имеет стандартное завершение операторами STOP и END. Очередность выполнения операторов может быть изменена с помощью оператора GO TO М (перейти на метку М) или с помощью оператора IF («если»).

8. Технология прохождения фортран-программ на ЭВМ

Как и на других языках высокого уровня, на Фортране возможно выполнение загрузочного модуля, т.е. файла, имеющего расширение .EXE.

Загрузочный модуль получается путем трансляции и компиляции исходного текста программы.

Исходный текст программы (в предыдущем примере выделен жирным текстом, курсивом выделены пояснения к программе) создается любым текстовым редактором и записывается на жесткий диск компьютера с именем (желательно не более 6 символов) и расширением .FOR . Например, PROG1.FOR. Затем этот файл обрабатывается транслятором и компилятором. Этот процесс лучше выполнять с использованием командных файлов (см. главу Командные файлы). При трансляции создаются файлы:

PROG1.LST с листингом (распечаткой исходного текста программы с указанием найденных транслятором ошибок);

PROG1.OBJ – файл объектного модуля в двоично–десятичных кодах; PROG1.MAP – карта распределения памяти.

Эти файлы могут использоваться как временные и при отсутствии ошибок после компиляции программы и получения загрузочного модуля PROG1.EXE могут быть удалены.

При наличии ошибок, обнаруженных транслятором (следует иметь в виду, что транслятор не в состоянии обнаружить все ошибки программы), необходимо просмотреть на экране файл PROG1.LST и выяснить ошибки, которые Вы допустили. Следует удержать себя

13

от соблазна исправить эти ошибки прямо в файле PROG1.LST. Ошибки необходимо исправлять в файле исходного текста PROG1.FOR, а затем снова транслировать, и.т.д. до получения загрузочного модуля PROG1.EXE.

Для запуска программы необходимо выделить файл PROG1.EXE и нажать клавишу

ENTER.

Программа начнет выполняться и на экране появляется результат работы оператора

WRITE в виде текста: Введите значения сторон треугольника А, В, С.

Затем ЭВМ ожидает ввода данных для списка ввода оператора READ. Мы должны ввести три числа. Эти данные следует набрать на клавиатуре и они отображаются на дисплее. Одно число от другого отделяется запятой или символом “пробел”. При вводе бо'льшего количества чисел, чем необходимых нам трех, лишние игнорируются. Ввод заканчивается нажатием клавиши ”ENTER”. При вводе количества чисел меньше, чем три и нажатии ”ENTER”, ЭВМ будет ожидать ввода остальных чисел из списка ввода. Необходимо набрать оставшиеся числа, и нажать ”ENTER”. Затем программа продолжает свою работу.

Вычисляются значения переменных P и S. Затем оператор вывода информации WRITE выведет на экран результат. Оператор GOTO 4 осуществляет переход к вводу новых исходных данных.

Выполняемая программа снимается с выполнения или по достижению оператора STOP или комбинацией клавиш CTRL+Break или созданием искусственной сбойной ситуации путем ввода текстовой информации вместо числовой.

Технология прохождения фортран – программ на ЭВМ в Fortran PowerStation

PowerStation - оконная среда для разработки программ в операционной среде Windows (поддерживаются версии Windows 3.11, Windows 95, Windows 98, Windows ME). В комплект программного обеспечения входят:

1.Компилятор FL32.

2.Линкер LINK32.

3.Набор стандартных библиотек.

4.Многооконный редактор.

5.Отладчик фортран – программ.

6.Справочная информация.

Для запуска Fortran PowerStation необходимо запустить файл F32VWB.EXE расположенный в папке: диск: \путь установки\BIN. Если вы при установке указали путь d:\F32, то файл будет находится в папке d:\F32\BIN

Главное окно редактора имеет вид :

14

Панель

инструментов

Главное

меню

Линия разделяющая служебное поле и основное поле программы.*

Рабочая область

Строка

состояния

*- Разделительная линия находится в 6-ой позиции, поэтому символ «*» - перенос строки, ставится прямо на линии.

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

-В меню File возможно создание нового документа, открытие программы, сохранненой на жестком диске, распечатка программы, выход из редактора.

-В меню Edit доступны функции по копированию, перемещению, вставке, удалению, поиску текстовой информации, отмена последнего действия.

-Меню View предоставляет сервисные функции для работы с программой (перемещение на заданную строку программы, включение/выключение строки состояния и.т.д).

-В меню Project возможно управление проектом (создание, редактирование), компиляция загруженной фортран-программы, создание и запуск на выполнение стандартного загрузочного модуля с расширением *.exe .

-Утилиты в меню Options дают возможность настроить параметры компилятора и линкера, присутствуют настройки редактора текста фортран програм.

Система Fortran PowerStation предназначена для работы в ОС Windows, но исполнимые модули, полученные с ее помощью, предназначены для работы в OC DOS. Поэтому для запуска программ в Windows потребуется специальный драйвер. Так же сохранена совместимость с

15

прошлой версией компилятора и все програмы, написанные ранее, будут корректно выполнятся и в PowerStation.

Для примера можно рассмотреть процесс отладки, компиляции, запуска, и построения загрузочного модуля :

После набора исходного текста программы в редакторе нужно сохранить его, выполнив следующую оперерацию: в главном меню выбираем пункт File -> Save, (или Save as…).

Далее следует проверить корректность исходного текста, т.е. нужно обработать исходный текст программы компилятором. Для этого выполняем следующи операции: в главном меню выбираем Project ->Compile File имя_файла.for . Откроестся окно, в котором можно будет видеть сообщения компилятора. Например, если в программе есть ошибка, то Вы увидите примерно следущее сообщение :

C:\F32\SAMPLES\FLOATING\ASSOC.FOR C:\F32\SAMPLES\FLOATING\ASSOC.FOR(12) : error F2115: syntax error FL32 returned error code 2.

ASSOC.FOR - 1 error(s), 0 warning(s)

Найдена ошибка в 12 строке вашей программы: (C:\F32\SAMPLES\FLOATING\ASSOC.FOR(12) : error F2115: syntax error), где F2115 –

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

Если ошибок не обнаружено, Вы увидите примерно такое сообщение компилятора :

Compiling...

Microsoft (R) FORTRAN PowerStation Optimizing Compiler Version 1.0 Copyright (c) Microsoft Corp 1984-1993. All rights reserved. C:\F32\SAMPLES\FLOATING\ASSOC.FOR

ASSOC.FOR - 0 error(s), 0 warning(s)

После этого можно выполнять операцию создания выполняемого загрузочного модуля, для чего необходимо произвести следующую последовательность операций: в главном меню выбираем Project -> Build имя_файла.for. После этого в открывшемся новом окне можно будет видеть рабочие сообщения компилятора и линкера.

Например :

Compiling...

Microsoft (R) FORTRAN PowerStation Optimizing Compiler Version 1.0 Copyright (c) Microsoft Corp 1984-1993. All rights reserved.

C:\F32\SAMPLES\FLOATING\ASSOC.FOR

Linking...

Microsoft (R) Portable Linker Version 2.8

Copyright (C) Microsoft Corp 1992-1993. All rights reserved.

16

-machine:i386 -base:0x00010000 -subsystem:console -entry:mainCRTStartup - debug:full -debugtype:cv4

ASSOC.OBJ -out:ASSOC.EXE libf.lib

libc.lib

kernel32.lib

ntdll.lib Binding...

BINDMSF: MSOFT1 -- Copyright (C) 1986-93 Phar Lap Software, Inc.

Replacing .EXE stub in application: ASSOC.EXE with one from file: C:\F32\BIN\BINDMSF.EXE.

INPUT FILES:

C:\F32\BIN\BINDMSF.EXE (stub .EXE at offset 47599) (25728 bytes)

ASSOC.EXE (89352 bytes)

OUTPUT FILE:

ASSOC.exe (115592 bytes)

ASSOC.EXE - 0 error(s), 0 warning(s)

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

9. Простейшие операторы ввода-вывода информации

К простейшим операторам ввода и вывода относятся READ и WRITE. В общем виде их можно записать:

READ(5,*) список например, READ(5,*)F,E,Q WRITE(6,*) список, например, WRITE(6,*)F,E,’ Переменная Q=',Q

где 5 – номер канала ввода информации, 6- канал вывода информации.

Для персональных ЭВМ в основном, по умолчанию, для ввода информации с экрана дисплея используется канал номер 5. Символ * обозначает, что информация будет вводиться бесформатно, упрощенно. Данные вводятся как целые числа или с десятичной точкой и разделяются между собой запятыми или символом «пробел». «список» - перечень имен переменных или массивов, перечисленных через запятую, в которые будут занесены введенные данные. Количество введенных данных должно соответствовать количеству элементов списка по очередности и по типу данных. Ввод данных заканчивается нажатием клавиши «Enter». До нажатия клавиши «Enter» набранные числовые данные находятся в буфере дисплея. Их можно стирать и редактировать. Если количество введенных данных больше количества элементов списка, то первые данные заносятся в элементы списка, а лишние игнорируются. Если количество введенных данных меньше количества элементов списка, то и после нажатия «Enter» ЭВМ ждет набора и ввода остальных данных. Можно после ввода каждого числа нажимать «Enter» до заполнения списка ввода.

В операторе WRITE цифра 6 – номер канала вывода информации. В персональных ЭВМ для вывода на экран дисплея используется канал номер 6. Можно для вывода использовать и канал номер 5.

17

Бесформатно числовые данные выводятся на экран дисплея в нормализованном виде до пяти чисел в каждой строке дисплея. Каждое число отображается в виде с плавающей точкой с семью цифрами после запятой, например, -0.1234567Е+02. Если в списке вывода указано только имя переменной, то на экране появится число, которое к моменту вывода хранилось в ячейке памяти с именем данной переменной. Однако, вместе с числом можно выводить и поясняющий текст. Для этого в список вывода, элементы которого отделяются друг от друга запятыми, необходимо ввести текстовые константы. В приведенном примере на экране дисплея появятся два числа, текстовая константа и третье число:

-0.1234567Е-02 0.4356754Е+03 Переменная Q= 0.8767854Е-02

Поскольку при выполнении программы мы не видим ее текста, то в операторах вывода информации всегда необходимо предусматривать вывод поясняющего текста.

10. Арифметический оператор IF

Служит для разветвления программ в трех или двух направлениях в зависимости от заданных условий. Записывается в виде:

IF(арифметическое выражение) m1, m2, m3

где m1, m2, m3 – метки операторов, на которые будет передаваться управление вычислительным процессом.

Пример: IF(2.*A–SIN(B)) 3,4,12

IF-арифметический работает следующим образом:

1). Вычисляется арифметическое выражение в скобках.

2). Вычисленное значение сравнивается с нулём.

3). Если вычисленное значение <0, то управление передаётся на метку m1(3), если вычисленное значение =0, то управление передаётся на метку m2 (4), если >0, то на метку m3

(12).

Спомощью IF арифметического, к примеру, можно проверять подкорневое выражение и, если оно окажется отрицательным (нельзя извлечь корень квадратный из отрицательного числа по законам математики), то управление передастся на нужную метку и не произойдёт прерывания выполнения программы при попытке вычисления корня квадратного из отрицательного числа.

Примечание:

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

Правило:

Оператор, следующий после IF арифметического, должен иметь метку; IF арифметический не может быть последним оператором в цикле DO.

Если в качестве условия имеется неравенство, то его необходимо привести к виду, при

котором происходит сравнивание выражения с нулём. x2+c>y преобразуем к виду x2+c-y>0

Сучётом этого доработаем Программу № 1, где при помощи IF арифметического проверим условие: «если самая длинная сторона больше чем полупериметр, то треугольник не существует».

18

СПрограмма № 2 – Вычисление площади треугольника при

Спомощи IF арифметического

4WRITE(6,*)’ Введите значения сторон треугольника A,B,C’ READ(5, *) A,B,C

CБлок проверки правильности введенных данных

IF(A) 4,4,20 Проверка введенных исходных данных: сторона треугольника не

может быть отрицательной или равна нулю.

20IF(B) 4,4,21

21IF(C) 4,4,22

Вместо этих трех операторов лучше использовать IF(AMIN1(A,B,C))4,4,22 (если наименьшая из сторон А,В,С меньше либо рана нулю, то перейти на метку 4 на ввод новых исходных данных.)

СКонец блока проверки правильности введённых данных

22P=(A+B+C)/2. Вычисляем значение полупериметра треугольника IF(AMAX1(A,B,C)–P) 6,8,9 Встроенные функции АМIN1, АМАХ1 из списка переменных, перечисленных в скобках, выбирают минимальное (максимальное) число. Последний оператор обозначает: если максимальная из сторон равна полупериметру, то управление передается на метку 8. Если максимальная из сторон меньше полупериметра, то идем на метку 6 и вычисляем площадь. А иначе идем на метку 9.

8WRITE(6,*)’ Площадь треугольника равна нулю’

GO TO 4

6S=SQRT(P*(P-A)*(P-B)*(P-C)) WRITE(6,*)’ Площадь S=’, S PAUSE

GO TO 4

9 WRITE(6,*)’ Такой треугольник не существует’

Оператор PAUSE или PAUSE ’ текст ’ служит для приостановки выполнения программы на экране до любого нажатия на клавиатуру. Он позволяет просмотреть данные, полученные на экране дисплея при выполнении программы до её завершения по оператору STOP и выгрузки программы из памяти ЭВМ.

STOP

END

Описание работы программы:

В начале выводится приглашение к вводу численных значений сторон треугольника А, В, С. После их ввода с клавиатуры происходит присваивание этих чисел переменным А, В, С. Затем следует блок проверки, в котором проверяется, чтобы не было введено отрицательное число (если введено отрицательное или нулевое число, то управление передастся на метку 4 – метку оператора приглашения к вводу). После блока проверки вычисляется значение полупериметра Р. Проверка на корректность введенных данных и возможность существования треугольника с такими сторонами осуществляется при помощи условия: IF(AMAX1(A,B,C)–P) 6,8,9. В зависимости от результатов вычисления арифметического выражения в скобках внутри оператора IF вычислительный процесс разветвляется на метки 6, 8, или 9. По каждой из этих меток будут выполняться или вычисление, печать результатов, приостановка процесса (метка 6) или вывод информации и переход ко вводу исходных данных (метка 8) или вывод информации и завершение программы (метка 9). Следует

19

отметить, что в последнем случае текст «Такой треугольник не существует» мелькнет на экране на доли секунды и исчезнет, так как программа закончена. Чтобы увидеть результат, необходимо нажать комбинацию клавиш Ctrl+O. Чтобы потом продолжить работу, нужно еще раз нажать Ctrl+O. Но лучше использовать оператор PAUSE для приостановки программы.

11. IF логический

Записывается в виде:

IF(логическое выражение) выполняемый оператор

Пример:

IF(A.GT.B) Y=SIN(X) Если А больше В то Y присвоить значение sin(x).

Вкачестве выполняемых операторов могут быть: 1). Операторы присваивания типа Х=3.5;

2). Операторы ввода – вывода информации READ,WRITE;

3). Оператор перехода GO TO;

4). Оператор вызова подпрограммы CALL;

5). Оператор PAUSE.

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

Операции отношения соответствуют математическим обозначениям:

.GT. >

.GE.

.EQ. =

.NE.

.LE.

.LT. <

Рассмотрим, что значит выражение: IF(A.GT.B) Y=SIN(X)

Это означает: если А больше В, то Y присваивается значение синуса от Х. Затем после этого оператора будет выполнятся следующий за ним. Если А не больше В, то оператор присваивания Y= игнорируется и выполняется оператор, следующий после IF.

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

Логические операторы:

.AND. – логическое ‘И’

.OR. – логическое ‘ИЛИ’

.NOT. – логическое ‘НЕТ’

Пример:

если a+b≥с>2*sin x, то напечатать a,b,x IF(A+B.GE.C.AND.C.GT.2.*SIN(X)) WRITE(6, *) A,B,X

IF логический работает следующим образом:

20