Метода по фортрану (01)

Посмотреть архив целиком

2



МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ


МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

(МАМИ)


Кафедра "Прикладная и вычислительная математика"




Е.А.Лопаницын,

С.Г.Сальков,

А.Б.Фролов




Программирование на языке Фортран MS 5.0

Сборник лабораторных работам

по курсу

"Информатика и программирование на ЭВМ"

для студентов всех специальностей






Под редакцией

заведующего кафедрой

чл.- корр. РАН Э.И.Григолюка





МОСКВА - 2003

Лопаницын Евгений Анатольевич, профессор, доктор физико-матема-тических наук;

Сальков Станислав Григорьевич, доцент, кандидат технических наук;

Фролов Александр Борисович, профессор, кандидат технических наук.





Методические указания к лабораторным работам по курсу "Информатика и программирование на ЭВМ" для студентов всех специальностей. Программирование на языке Фортран MS 5.0. - М.: МАМИ, 2002. - 92 с. Издание третье исправленное и дополненное.







Лабораторные работы ориентированы на изучение основ алгоритмического языка Фортран MS 5.О, программирования на этом языке и получение навыков в решении задач на ЭВМ.

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






Московский государственный технический университет (МАМИ)

2002 г.


В В Е Д Е Н И Е


Алгоритмический язык программирования Фортран (FORmula TRANslator) был разработан фирмой International Business Machines (IBM) в середине 50-х годов как программное средство для решения вычислительных задач. Работа над его усовершенствованием продолжается по сей день, и к настоящему времени используется несколько стандартов Фортранa (FORTRAN-66, FORTRAN-77, FORTRAN – 90, FORTRAN POWER STATION). Сегодня он является основным языком программирования при решении научно-технических задач. В данном пособии рассматривается стандарт FORTRAN-77 для персональных ЭВМ фирмы MicroSoft вер

сии 5.0, в котором реализованы многие положения стандарта FORTRAN-90, котрый вошел в новую систему FORTRAN POWER STATION.

С целью изучения основ программирования и получения практических навыков по составлению и отладке программ на алгоритмическом языке Фортран студентам предлагается выполнить представленные в данном пособии лабораторные работы. Для выполнения лабораторных работ студент обязан заранее подготовиться к ним:

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

  • выполнить задание в соответствии со своим вариантом;

  • оформить отчет по лабораторной работе.

Отчет по лабораторной работе должен быть оформлен на листах формата А4 и включать в себя следующие разделы:

  • титульный лист;

  • справочную информацию о синтаксисе и работе изучаемых операторов;

  • условия задания;

  • решения задания в виде блок-схемы и текста программы;

  • результаты счета программы на ЭВМ.

Составленная студентом программа должна быть набрана им в одном из текстовых редакторов (NORTON EDIT или ЛЕКСИКОН) и записана в файл с именем, имеющим расширение for - исходный файл. Например: prog.for, test.for, и т.п. Кроме этого, если требуется, студент должен подготовить файл исходных данных с расширением dat. Например: prog.dat, test.dat.

Исходный файл должен быть обработан на ЭВМ программой-транслятором, который переведет его в машинные коды ЭВМ. Для выполнения этой операции, работая в Norton Commander, достаточно выделить курсором имя исходного файла и нажать клавишу "Enter".

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

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

При успешном завершении трансляции образуются два файла с расширениями obj и exe. Например: prog.obj, test.obj и, соответственно, prog.exe, test.exe. Загрузочный файл с расширением exe является готовой к выполнению на ЭВМ программой.

Запуск программы на счет в Norton Commander'е осуществляется путем выделения курсором файла с расширением exe и нажатием клавиши "Enter". Результаты счета должны быть либо выведены на экран монитора, либо записаны в файл с именем исходного файла, но с расширением res. При запуске программы на счет возможно появление ошибок выполнения. Их краткий перечень приведен в Приложении.

В конце занятия студент должен удалить из директории все созданные им и ненужные для дальнейшей работы файлы.

Для каждой лабораторной работы студент в своей директории должен организовать поддиректории LR_1, LR_2, ..., LR_8. В них должны храниться файлы программ и, если требуется, файлы исходных данных. Файлы с расширениями exe, obj, lst, bak и res должны быть уничтожены.

Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 1

ОСНОВНЫЕ ПОНЯТИЯ. ПРОГРАММИРОВАНИЕ РАСЧЕТОВ ПО

ФОРМУЛАМ


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

Программа для ЭВМ состоит из последовательности команд, реализующих алгоритм решения задачи. Каждая из команд языка Фортран состоит из ключевых слов, определяющих характер выполняемых действий над константами, переменными и выражениями. В Фортране используются пять основных типов команд (операторов): присваивание; ввод-вывод информации; передача управления; описание объектов; подпрограммы. Каждая команда на Фортране записывается в свою строку длиной 80 символов.

Основными символами языка Фортран, образующими его алфавит, являются: строчные и прописные латинские буквы A, B, C, ..., Z; цифры 0, 1, 2, ..., 9; пробел и специальные символы = + - * / ( _ ) , . $ ' :. Другие символы, в частности, буквы русского алфавита могут быть использованы только в качестве комментариев к программе.

Положение символа в строке нумеруется слева направо, начиная с 1-ой позиции. Строка условно делится на четыре зоны. Первая зона (с 1-й по 5-ю позиции) предназначена для метки оператора. Метка выполняет роль адреса оператора и может располагаться в любой позиции зоны. Метка оператора - целое положительное число, которое может содержать не более 5 цифр. Для большинства операторов метка является необязательным параметром. Вторая зона, состоящая из 6-ой позиции, используется как признак продолжения оператора, не умещающегося на одной строке. В качестве символа продолжения может использоваться любой символ, отличный от нуля или пробела. Строк продолжения не должно быть более 19-ти. Позиции с 7-й по 72-ю являются третьей зоной и служат для записи оператора. Последняя зона с 73-й по 80-ю позиции Фортраном не обрабатывается и может использоваться программистом по своему усмотрению. Например

123456789...................72 73.......80

24 y = sin(x**2) + 2*cos(1 - x)/

(метка) (о п е р а т о р)

* (1 + x)**2

(п р о д о л ж е н и е о п е р а т о р а )

В отличие от записи оператора, комментарии к программе записываются со 2-й по 80-ю позиции. Признаком комментария является наличие английской буквы "С" в первой позиции. Например

123456789.........................72 73.......80

С *** Программа к лабораторной работе № 1 ***

Комментарии могут присутствовать в конце строки записи операторов. Для этой цели используется восклицательный знак, после которого следует текст комментария:

123456789........................72 73.......80

24 y = sin(x) ! *** вычисление синуса ***

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

Целая константа представляет собой целое число:

81, -1230, 0, 225, ....

В Фортран-программе целые константы записываются в форме I (Integer), которая совпадает с записью целых чисел в алгебре.

Вещественная константа действительное число:

562,401 0,362.10-4 2,57 -0,01276 1,0273.102

В программе вещественная константа может быть записана в одной из трех форм: F, E и D.

Форма F (Fixed) - форма с фиксированной точкой, представляет собой запись вещественной константы с десятичной точкой вместо запятой:

562.401 0.0000362 2.57 -0.01276 102.73

Формы Е (Exponential) и D (Double precision) формы с плавающей точкой, представляют собой запись вещественной константы в виде мантиссы и порядка. Константа в форме Е имеет мантиссу длиной до 7 цифр и порядок в виде двузначного числа, обозначаемый буквой Е:

0.562401E+03 0.362E-04 0.257E+01 -0.1276E-01 0.10273E+03

а константа в форме D допускает мантиссу длиной до 15 цифр, ее порядок обозначается буквой D и может быть трехзначным числом:

0.562401D+003 0.362D-004 0.257D+01 -0.1276D-01 0.10273D+03

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

Логическая константа используется для обозначения одного из значений: "истина" или "ложь". Значения логической константы, соответственно, задаются ключевыми словами TRUE и FALSE, заключенными между точками:

.TRUE. или .FALSE.

Символьная константа представляет собой последовательность символов, заключенную в апострофы. Апострофы служат признаками начала и конца константы и не являются ее частью. Если последовательность символов содержит апостроф, то в константе он должен записываться в виде пары апострофов. Например, слова ForTran и O'Генри соответствуют символьным константам 'ForTran' и 'O''Генри'.

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

Имя переменной может включать в себя буквы латинского алфавита, цифры, знаки подчеркивания и $, но первым символом - всегда должна быть буква. Длина имени может быть от 1 до 31 символа, однако для распознавания используются только первые шесть. Строчные и прописные буквы в имени равносильны, а пробелы не рассматриваются как значащие. Например, имена переменных LONG, Long и L o n g воспринимаются транслятором как одно имя.

Тип переменной определяется по умолчанию или явно. По умолчанию тип переменной принимается числовым и определяется по первой букве ее имени. Если имя переменной, начинается с букв I, J, K, L, M, N, то ей приписывается целый тип, в противном случае - вещественный тип .

Явным способом тип переменной может быть определен с помощью операторов описания типов переменных:

тип[*длина] список

или

тип имя переменной[*длина] [[, имя переменной[*длина]]...],

где тип

ключевое слово, определяющее тип переменной:

Integer числовой целый;

Real числовой вещественный;

Logical логический;

Character символьный;

длина

объем памяти в байтах, выделяемый для переменной указанного типа;

список

имя переменной [[,имя переменной]...] перечень имен переменных данного типа, разделенных запятыми.

Для переменных типа Integer и Real существуют две допустимые длины: стандартная 4 байта, которая устанавливается по умолчанию, и дополнительная 2 байта для целых переменных и 8 байт для вещественных. Переменным типа Logical указывать длину не требуется, так как она постоянна и равна 4 байтам. Длина символьных переменных может колебаться от 1 до 32767 байтов (символов). Например

Integer A, B, C*2

Real Lem, Io*8

Real Lambda

Logical R

Character First*15, SECOND*10

Операторы описания типов должны стоять в начале программы.

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

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

"+"

сложение и

"-"

вычитание;

"*"

умножение и

"/"

деление;

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

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

1. Все необходимые вычисления должны быть указаны явно, то есть все операнды должны быть разделены знаками арифметических операций. Например, запрещена запись 5.2A, требуется писать 5.2*A;

2. Два символа арифметических операций не могут следовать непосредственно друг за другом. Например, запрещена запись А*-B, требуется писать A*(-B);

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

1 2 3

D * C / K + D.

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

2 1 3 4 1 3 4 2

A + B * K - D - 2; (A + B) * K - (D - 2)

5. Операция возведения в вещественную степень допустима только при положительном основании, в целую степень - при любом. Например, операция А**2.5 допустима при А > 0, а А**2 - при любых А;

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

Integer*2 ранг 1

Integer*4 ранг 2

Real*4 ранг 3

Real*8 ранг 4

Например:

5*ROT

дает результат Real*4;

I/10

Integer*4;

J + 0.2D+6

Real*8;

5.*(N+1)

Real*4.

*** Замечания: в сложных арифметических выражениях тип результата определяется поэтапно, для каждой отдельной операции, например

(N+1) * A

Первая операция N+1 дает целый результат, так как оба операнда целого типа. Вторая операция умножение результата первой операции на А дает вещественный результат, так как переменная А вещественного типа. Окончательный результат выражения Real*4.

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

5 / 2 * 10 = 20; 64**(1 / 3) = 1;

5 / 2.* 10 = 25.0; 64**(1. / 3) = 4.0 .

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

.EQ.

равно;

.NE.

не равно;

.GT.

больше;

.LT.

меньше;

.GE.

больше или равно

(не меньше);

.LE.

меньше или равно

(не больше).

Например, результатом выполнения логического выражения A.LT.B. будет .TRUE. (истина), если AB.

Простые логические выражения могут быть объединены в сложные с помощью логических операций .NOT. - "не", .AND. - "и" и .OR. - "или". При вычислении логических выражений используется следующий порядок выполнения операций. Сначала выполняются операции отношения .EQ., .NE., .GT., .GE., .LT. и .LE., а затем .NOT., .AND. и .OR.. Например, условие принадлежности величины X отрезку [-1, 3/2] или интервалу ]3, 8[ будет записываться в виде

X.GE.-1..AND.X.LE.1.5.OR.X.GT.3..AND.X.LT.8.

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

((X.GE.-1.).AND.(X.LE.1.5)).OR.(X.GT.3..AND.X.LT.8.)

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

Например выражение '1 + 1 ='//' 2' дает '1 + 1 = 2'.

Встроенные библиотечные функции это программы для вычисления элементарных математических функций (например, sin х, cos х и др.), которые хранятся в библиотеке математических программ Фортрана. Для обращения к функции в арифметическом выражении требуется указать имя функции и далее в круглых скобках фактический параметр в форме константы, переменной или выражения. Ниже в таблице приведены некоторые часто используемые библиотечные функции.


Название

функции

Математическое

обозначение

Обозначение функции

в Фортране

Показательная функция

ex

Exp(x)

Натуральный логарифм

ln x

ALog(x)

Десятичный логарифм

lg x

ALog10(x)

Синус

sin x

Sin(x)

Косинус

cos x

Cos(x)

Тангенс

tg x

Tan(x)

Арксинус

arcsin x

ASin(x)

Арккосинус

arccos x

ACos(x)

Арктангенс

arctg x

ATan(x)

Квадратный корень

Sqrt(x)

Абсолютное значение

x

Abs(x)

Целая часть числа

[x]

Int(x)

При использовании функций следует учитывать, что:

  • тригонометрические функции используют аргумент только в радианной мере;

  • аргументы, приведенных в таблице функций, имеют вещественный тип;

  • результаты вычисления функций имеют вещественный тип;

Оператор присваивания простейший выполняемый оператор Фортрана. Он не имеет ключевого слова и форма его записи имеет вид:

переменная = выражение

Действие оператора состоит в том, что переменная, стоящая слева от символа "=", получает значение, равное результату выполнения выражения, записанного справа. Например

A = c i = i + 1

y = a*Sin(X**2) G = .TRUE.

Res_1 = (1.0 + Exp(x+1))/(x**2 + 1.) Str = 'МГТУ (МАМИ)'

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

Например, оператор L = 12.1 / 10.4 даст результат, равный единице.

Пример программы. Вычислить значение функции

F = 4x2 +eax при a = 2,87 и x = 0,5 .

123456789......................72 73......80

C *** Лабораторная работа 1 ***

A = 2.87

X = 0.5

F = 4.*X*X + Exp(A*X)

Write(*, *) ' A, X, F =', A, X, F

Stop

End

Данная программа выполняет следующую последовательность операций:

  • переменной А присваивается значение 2.87;

  • переменной X присваивается значение 0.5;

  • переменной F присваивается значение арифметического выражения, соответствующего заданной функции;

  • значения переменных А, Х и F выводятся на экран монитора;

  • ЭВМ завершает работу с программой.

При написании программы были использованы ранее не описанные операторы Write, Stop и End. Оператор Write(*, *) выводит на экран текст строки в апострофах и значения указанных переменных. Оператор Stop останавливает выполнение программы, а оператор End служит признаком конца текста программы.

*** Замечания:

оператор Stop в данном случае является необязательным. При его отсутствии функции остановки программы выполнит оператор End;

после завершения работы программы, содержащей оператор Stop, на экран монитора выводится сообщение Programm terminated;

допускается форма записи Stop [n], где n символьная константа, которая будет выведена на экран монитора при завершении работы программы.


З а д а н и е к л а б о р а т о р н о й р а б о т е

Составить программу для вычисления по формулам. Программу протестировать на приведенных данных. Значения аргументов задавать с помощью оператора присваивания. Результаты расчета вывести на экран монитора. В отчете по лабораторной работе привести результаты вычислений для к=1,3 и х=-1,1,2. В случае, если при каких – либо сочетаниях параметров к и х вычисление провести невозможно, дать объяснение -- почему это произошло.

Для вычисления кубического или любой целой нечетной степени корня из числа, которое может быть отрицательным, необходимо использовать библиотечную функцию Sign(A, B). Данная функция передает знак параметра B модулю параметра A. Например, при Х=-8 параметр , а В=-8, в результате чего функция Sign возвращает результат равный -2. Фрагмент программы, реализующий эти вычисления:

X=-8.

Z=Sign(Abs(X)**(1./3.),X)

Write(*,*) x, z

End

1

При k=2 и x=0.5 Y=3.933026Е-03

2

При k=2 и x=1 Z=7.793753E-01

3

При k=2 и x=-1.7 Y=2.880522

4

При k=1 и x=-0,6 V=-4.399004

5

При k=2 и x=0,4 Y=2.807465E-03

6

При k=2 и x=1 Z=3.324662E-01

7

При k=1 и x=1 Z=-3.488070E-02

8

При k=1 и x=0,3 Y=-3.372081E-02

9

При k=2 и x=1 Y=8.000226

10

При k=2 и x=0,7 V=20.214210

11

При k=2 и x=1.5 Y=2.076025E-01

12

При k=2 и x=1 Z=9.046751E-02

13

При k=2 и x=-1.3Y=-2.806125E-01

14

При k=1 и x=-0,8 V=-1.547823

15

При k=1 и x=0,8 Y=-6.426743E-02

16

При k=2 и x=0,5 Z=--4.009187

17

При k=2 и x=0.5 Z=-2.936719E-02

18

При k=1и x=0,3 Y=-5.602377E-02

19

При k=2 и x=1 Y=19.703690

20

При k=2 и x=0,5 V=2.723359

21

При k=1 и x=0.3 Y=1.048512E-01

22

При k=2 и x=1 Z=1.628316

23

При k=2 x=-1.3 Y=9.530854E-02

24

При k=1и x=-0,8V=-2.803053E-01

25

При k=2 и x=0,4 Y=-1.809660E-01

26