МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХ...
7 downloads
313 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ
В.Ф. Звягин, Н.А. Яньшина, В.Н. Голыничев Практикум по современному Фортрану в курсе Информатики Учебное пособие
Санкт-Петербург 2010
3 Оглавление Введение ......................................................................................................... 4 1. Лабораторные работы ............................................................................... 5 1.1. Вычисления по формулам ................................................................. 5 1.2. Вычисление логических выражений .............................................. 16 1.3. Построение графиков функций ...................................................... 23 1.4. Попадание точки в заданную область плоскости ......................... 32 1.5. Приближенное вычисление функции – сумма степенного ряда . 39 1.6. Решение задач с одномерными массивами ................................... 50 1.7. Решение задач с двумерными массивами ...................................... 58 1.8. Решение задач с использованием функций ................................... 71 1.9. Решение задач с использованием подпрограмм ........................... 81 1.10. Механизмы присоединения данных............................................. 93 2. Элементы языка программирования Фортран ..................................... 98 2.1. Текст программы на Фортране ....................................................... 98 2.2. Синтаксис языка Фортран, выражения .......................................... 98 2.3. Оператор присваивания ................................................................. 103 2.4. Ветвления и циклы ......................................................................... 103 3. Ввод и вывод в Фортране ..................................................................... 107 3.1. Бесформатный ввод/вывод ............................................................ 108 3.2. Форматный вывод .......................................................................... 108 4. Вычисления с массивами. .................................................................... 111 4.1. Характеристики массива ............................................................... 111 4.2. Размещение массива в памяти компьютера ................................ 112 4.3. Секции массивов и неявный Do в списках ввода/вывода .......... 114 5. Программы, модули и механизмы обмена данными ......................... 114 5.1. Двухуровневая структура программ ............................................ 115 5.2. Трёхуровневая структура модуля ................................................. 116 5.3. Вызов процедур и использование модулей ................................. 117 5.4. Обмен данными в проекте............................................................. 119 6. Встроенные функции Фортрана .......................................................... 121 6.1. Числовые функции ......................................................................... 121 6.2. Функции редукции массивов ........................................................ 122 6.3. Линейная алгебра и генератор случайных чисел........................ 127 6.4. Функции для определения размеров массивов ........................... 127 7. Справочные материалы ........................................................................ 128 7.1. Инструкция для работающих в DevStudio................................... 128 7.2. Пакет Agrapher для построения графиков ................................... 130 7.3. Уравнения ....................................................................................... 131 7.4. Вычисление средних значений ..................................................... 132 7.5. Перевод ключевых слов, операторов и терминов Фортрана ..... 133 8. Литература ............................................................................................. 134 Практикум по современному Фортрану
4
Введение Традиционный подход к решению задач на компьютере: используя библиотечные процедуры, составить алгоритм, продумать ввод и вывод, написать программу, скомпилировать, собрать, отладить, выполнить и получить результаты. Программирование задач на Фортране в среде Windows – предмет обучения в курсе Информатики. Название языка Fortran произошло от Formula Translator – переводчик формул. В истории программирования Фортран – живой классический язык. Не одно поколение программистов выросло на Фортране, и если кому-то кажется, что Фортран из прошлого, то его новейшие возможности, например, для суперкомпьютеров – как раз из будущего. Фортран критиковали за «примитивность», но именно простота помогает ему жить и развиваться, сохраняя преемственность и проходя стандартизацию: − 1954, Фортран – первый язык программирования, Джон Бэкус, IBM; − Ф66 первый стандарт языка – универсальность и преемственность; − Ф77 ввёл в обиход структурное программирование; − современный Фортран Ф90, Ф95 стал вехой в развитии языка: − массивы – описание, функции редукции, конструкторы, секции, конформность массивов, выражений, ветвлений, циклов; − указатели, рекурсивные процедуры; − модульное программирование, механизмы передачи данных; − Ф03, Ф08 – объектно-ориентированное программирование. ФXX – это Фортран по годам, живой классический язык программирования, стабильный, развивающийся, нацеленный в будущее, только в нём: − история насчитывает 56 лет, чего попросту нет у других языков; − автоматизировано построение параллельных приложений; − сочетается строгая классика в изучении основ программирования и конструирование сверхсложных проектов при помощи модулей; − действия над векторами и матрицами наравне со скалярами, работа с комплексными числами наравне с вещественными; − накоплены численные библиотеки (IMSL, NAG, LAPACK, BLAS, Intel MKL), с высокопроизводительными вычислениями (MPI, PVM), с графическими интерфейсами (Quickwin, FORTRAN/TK). Наиболее популярные компиляторы Фортрана: по стандарту Ф95, Ф03 – Intel fortran compiler 9,10,11 для многоядерных компьютеров и суперкомпьютеров, свободно распространяемый для Linux; по стандарту Ф90-Ф95 – Fortran Power Station 4.0 и 5, 6 фирмы Compaq. Информация о Фортране размещена в Интернете: www.npac.syr.edu , netlib.org – набор библиотек, www.j3 – fortran.org – стандарт языка, наш сайт – http://twcad.ifmo.ru, http://parallel.ru/tech/tech_dev/newfortran.html , free compilers –http://www.thefreecountry.com/compilers/fortran.shtml.
Практикум по современному Фортрану
5
1. Лабораторные работы 1.1. Вычисления по формулам Задание Составить программу, которая: 1. вычисляет значения двух эквивалентных пар числовых формул y1 ∼ y2 и z1 ∼ z2, с указанными в варианте индивидуального задания значениями исходных данных. 2. выводит в файл out.txt исходные данные и результаты вычислений. Примечания: a) две числовых формулы эквивалентны, если для всех возможных значений переменных их математические значения равны; b) программируя, нельзя заменять формулы индивидуального задания (кроме sec x) эквивалентными значениями, но рекомендуется вводить вспомогательные (промежуточные) переменные. Содержание отчета 1. Название работы и номер варианта индивидуального задания. 2. Фамилия, имя, отчество и номер группы студента. 3. Текст задания, формулы в том виде, как они приведены в варианте индивидуального задания. 4. Области допустимых значений (ОДЗ) переменных для y1, y2. 5. Математическая запись формул вычисления промежуточных переменных (если они используются в программе). 6. Распечатки текста программы и результатов работы программы с тремя комплектами исходных данных. При подготовке к защите ответить на контрольные вопросы. Справочная информация 1. Порядок выполнения операций в соответствии их старшинством (приоритетом) показан в таблице. Операции
Знаки операций
Старшинство
Вычисление функций
Ссылки на функции
1
Возведение в степень
**
2
Умножение, деление
*, /
3
Сложение, вычитание
+, –
4
Примечание: Для изменения порядка выполнения операций используются скобки (только круглые).
Практикум по современному Фортрану
6 2. Реализация некоторых математических выражений средствами Фортрана показана в таблице. В формуле
В Фортране
В формуле
В Фортране
tg х
Tan(x)
2
Sqrt(2.)
Cos(x)
ctg х
Cotan(x)
x
Sqrt(x)
1/Сos(х)
arcsin x
Аsin(x)
В Фортране
В формуле
sin х
Sin(x)
cos х sec х
n
│b│
Abs(b)
π
2*Аsin(1.)
x
при х>0 x**(1./n) при х 1); b) если операнды вещественные,в результате получается вещественное число (например, 7./4. => 1.75); c) если операнды разных типов (например, целого и вещественного), перед выполнением операции они приводятся к типу, имеющему наибольший диапазон значений (в примере 7./4 => 7./4. – к вещественному); затем выполняется операция для этого типа с соответствующим результатом: (7./4 => 7./4. => 1.75). b 4. Возведение в степень a выполняется следующим образом: a) возведение в целую степень b выполняется путем b-кратного умножения основания a; b) возведение в вещественную степень b выполняется по формуле
e b⋅ln a . Внимание! Отрицательные и нулевые значения нельзя возводить в вещественную степень. Комментарии к заданию 1. Имена переменных предпочтительно выбирать со смыслом (например, длина окружности С=2πR : Circle=2*Pi*Radius). 2. Громоздкие формулы рекомендуется упрощать, вводя промежуточные переменные для частей формулы: повторяющиеся части формулы, числители и знаменатели дробей и так далее.
Практикум по современному Фортрану
7 3. Поиск ошибок облегчится, если по выражению, написанному в программе, восстановить исходную формулу. Типичные ошибки Формула –Y
X
В программе Правильно x**(-y)
Неправильно
Пояснения
x**-y
Синтаксическая ошибка. Знаки операции записывать подряд не разрешается. Синтаксическая ошибка. В неправильной записи cos воспринимается компилятором как переменная, а не функция. В правильной записи после имени функции – аргумент в скобках, а не операция. Сначала вычисляется функция, затем результат возводится в степень.
cos2x
cos(x)**2
cos**2(x)
2x+b
2*x+b
2x+b
Синтаксическая ошибка. Знак операции опускать нельзя.
a bc
a/(b*c)
a/bc
В неправильной записи из-за пропущенного знака умножения вместо переменных b и c используется переменная bc
cos x2
cos(x**2)
cos(x)**2
В неправильной записи порядок операций соответствует формуле cos2x.
а/((b+c)*d)
а/(b+c)*d
В неправильной записи порядок операций соответствует формуле a ⋅d b+c
X**(2*y)
x**2*y
В неправильной записи порядок операций соответствует формуле X2Y.
4./7.
4/7
В неправильной записи операнды – целые числа, результат – целая часть частного, для 4/7 это 0. Для получения вещественного результата (в примере 0.5714…) хотя бы один из операндов должен быть вещественным.
x**(1./3.) при x>0
x**(1/3)
В неправильной записи результат деления 1/3 равен 0 и общий ответ X0=1.
a (b + c )d
2Y
X
Дробь 4 7
3
x
Практикум по современному Фортрану
8 Формула
3
3
В программе Правильно x**(1./3.) при x>0
x
− 27
Пояснения
Неправильно
В неправильной записи порядок операций соответствует формуле
x**1./3.
x1 . 3
-27**(1./3.) (-27)**(1./3.)
В неправильной записи в вещественную степень возводится отрицательное число.
Пример Исходное значение аргумента: x=3.3 x 2 + 2 x − 3 + ( x + 1) x 2 − 9 y1 = ; y2 = x 2 − 2 x − 3 + ( x − 1) x 2 − 9
x+3 x−3
Область допустимых значений (ОДЗ) x>3 Промежуточные переменные Повторяющаяся часть формулы: s1 = x 2 − 9 yd = x 2 − 2 x − 3 + ( x − 1) * s1 Знаменатель формулы y1: Программа Program Formula ! вычисления по формулам ! студент (фамилия, имя) группа № работа № вариант № Implicit None ! отменяет умолчание при определении типа переменных ! все переменные должны быть объявлены Real :: x=3.3 ! инициализация переменной x (дано в задании для отладки) Real y1, y2, YD, s1 ! потом z1,z2-объявить здесь же !------------- далее – исполняемые операторы программы Open(6,file=’result.txt’)! если закомментировать «open», то ! вывод – на экран (по умолчанию устройство №6 – экран монитора) ! диалог для ввода данных: пригласить к вводу Write(*,*)’х=?’ и читать Read(*,*) x Write(6,*) ’При х=’,x s1 = Sqrt(x**2-9) ! повторяющаяся часть формулы yd = x**2 - 2*x - 3 + (x-1)*s1 ! знаменатель y1 y1 = (x**2 + 2*x - 3 + (x+1)*s1) / yd; y2 = Sqrt(x+3) / Sqrt(x-3); Write(6,*) ’y1=’, y1, ’y2=’, y2 Write(6,*) ’|y2-y1|=’, Abs(y2-y1)!в y1 и y2 совпали 6 – 7 значащих цифр !------------- далее – добавить вычисление z1,z2 End Program Formula
Практикум по современному Фортрану
9 Последовательность работы над программой 1. Отладить программу с исходными данными, указанными в задании. Отладка считается завершенной, если значения y1 и y2 и значения z1 и z2 попарно совпадают с точностью 6 – 7 значащих цифр. 2. Определить область допустимых значений (ОДЗ) исходных данных. 3. Организовать диалог для ввода исходных данных. Для этого нужно добавить в программу: a) приглашение к вводу данных: оператор Write(*,*) с указанием имен данных и ОДЗ; b) ввод данных с консоли: оператор Read(*,*)). Получить результирующие значения y1 и y2, z1 и z2 4. Для обработки трех комплектов данных следует подготовить файл In.txt с тремя комплектами данных в соответствии с ОДЗ. Изменить программу так, чтобы она получала данные автоматически из файла (диалог закомментировать): a) открыть файл In.txt для чтения данных (оператор Open); b) используя цикл, получить три комплекта результатов do k=1,3 − ввести один комплект данных из файла In.txt; − вычислить y1 и y2, z1 и z2; − вывести результаты с указанием имен переменных; enddo Контрольные вопросы к защите работы 1. Что называется программой на алгоритмическом языке? а) файл на диске; б) файл, внутри которого есть слово program; в) дайте свой вариант ответа. Примечание. Вы просматриваете на экране текстовый файл. Можете ли Вы утверждать, что это файл с программой? 2. Вы работаете с интегрированной средой IDE. Что должно обязательно присутствовать в имени файла с программой на Фортране 90: а) хотя бы одна буква; б) слово fortran; в) свой вариант ответа – приведите примеры имен файлов с программами на Фортране 90. 3. Как записать комментарий в программе? а) начать его с красной строки; б) начать его с «//» ; в) дайте свой вариант ответа. Приведите примеры комментариев. 4. Какие числовые типы данных используют в Фортране? Приведите примеры числовых констант.
Практикум по современному Фортрану
10 5. Можно ли вещественную константу 6420 записать на Фортране без десятичной точки? Если можно, то как это сделать? 6. Как записать на Фортране комплексное число 19+4i ? 7. Какие имена переменных в программе записаны верно, а какие нет? а) F1 б) Y(X) в) X_1 г) Б5 д) Z.8 е) 3J ж) β4 8. Как правильно вызвать функцию sinx ? а) sinX б) sinx в) sin(x) 9. Определите значение переменной M в результате вычисления: integer:: N=1 integer:: M M = 1/((2*N+1)*(2*N+2))
10. В каком порядке выполняются операции в числовом выражении? а) со скобками; б) без скобок. Разъясните оба случая. 11. Определите значение переменной В в результате вычисления: real:: А=2.0 real:: B B = -A**2
12. Исправьте ошибки: 4 записан как sqrt(4); a) b) комплексный корень − 4 c) комплексный корень − 4 d) комплексный корень − 4 e) вещественный корень 4
записан как sqrt(-4); записан как sqrt(-4.0); записан как sqrt(-4,0); записан как sqrt(4,0).
13. Почему на Фортране нельзя возводить отрицательное число в вещественную степень? 14. Записать в Фортране известные величины: дюжина, число π, число e, скорость света c = 3.108 а) в виде констант; б) как значения, точные для компьютера. 15. Определите значения переменных В и C в результате вычисления: real:: А=2.0 real:: B, C B = 1/2*A;
16. Как формулу
3
C = 1/(2*A)
− 1 / 8 записать в Фортране?
Указание. Правильность ответов на вопросы: (9), (11), (15), (16) проверьте на компьютере. Пример контрольного задания 1. Расположите константы в порядке возрастания (представить в одинаковой форме): 24.0; 2.4Е+2; 0.24Е-3 . 2. b - вещественная переменная, равная 4.0. Что получим в результате вычисления: 1/2*b; 1/(2*b); b**(1/2); 1/b*2 . Практикум по современному Фортрану
11 3. Формула
3
x была записана как x**1/3 – исправьте ошибки. −5
4. Запишите на Фортране формулу
3 sin x + 4 cos 2 x 2 −
1 2x
5. Чему будут равны значения переменных m, n, k, c, c1 после выполнения программы? В ответах учесть тип переменных. integer:: m, n, k real:: a=7.2, b=1.8, c, c1 m = a n = b c = a/b+b c1 = m/n+b k = a/b+b end
Варианты индивидуальных заданий № Данные
1
a=8.6 b=1.3 c=3.3 α=0.75
a=3.5 2
b=-2.1 α=0.1
Формулы
(
)
y1 = a 2 − b 2 − c 2 + 2bc :
a+b−c ; a+b+c
y 2 = (a + c ) − b 2 ; 2
z1 = 2 sin 2 (3π − 2α ) ⋅ cos 2 (5π +2α ) ; z 2 =
1 1 ⎛5 ⎞ − sin⎜ π − 8α ⎟ 4 4 ⎝2 ⎠
a 2 − b 2 a 3 − b3 y1 = − 2 2 ; a-b a -b cos2α z1 = 2 ; ctg α − tg 2 α
ab ; a+b 1 z 2 = sin 2 2α 4
y2 =
2
a=3.5 3
b=0.72 α=0.62
⎛ a2 + a a2 − b2 − a2 − a a2 − b2 ⎞ ⎟ ⎜ ⎠ ⎝ y1 = ; y2 = ⎛ a ⎞ b 3 + − 2 ⎟⎟ 2 a b ⎜⎜ b a ⎝ ⎠
1 z1 = 1 − sin 2 2α + cos2α ; 4 y1 =
4
a=4.3 α=0.43
( − 4 + (a
) − 4)
2
a+ b a −b
)
2
;
z 2 = cos 2 α +cos 4 α
a 3 − 3a 2 + 4 + a 2 − 4 a 2 − 1 a 3 + 3a 2
(
a2 −1
;
y2 =
(a − 2) (a + 2)
a +1 a −1
;
z1 = cosα + cos2α + cos6α + cos7α ; α 5 z 2 = 4cos ⋅ cos α ⋅ cos4α 2 2 Практикум по современному Фортрану
12 № Данные m=0.4 5
n=2.1 α=0.43
6
7
a=15.1 α=1.23
a=12.3 α=0.43
Формулы
y1 =
(m-1)
m − (n − 1) n
m 3 n + mn + m 2 − m tgα − secα z1 = ; cosα − ctgα
z 2 = tgα ⋅secα
⎛ 1+ a + a2 1-a + a 2 +2− y1 = ⎜⎜ 2 + 2 a a 2a-a 2 ⎝
⎞ ⎟⎟ ⎠
−1
(5 − 2a ) ;
8
y=0.8 α=0.81
x=1.4 9
⎛π ⎞ z1 =cos α + sin α + cos 3α + sin3α ; z 2 = 2 2 cos α ⋅ sin⎜ + 2α ⎟ ⎝4 ⎠
⎛a+2 y1 = ⎜⎜ − ⎝ 2a
z1 =
a 2a + 2
+
β=0.82
sin 2α + sin 5α − sin 3α ; cosα + 1 − 2sin 2 2α
z 2 = 2sin α
y2 =
1 ; x+ y
α⎞ α⎞ ⎛ 11 ⎛3 z1 = cos 2 ⎜ π − ⎟ − cos 2 ⎜ π + ⎟ ; 4⎠ 4⎠ ⎝8 ⎝8
z2 =
2 α sin 2 2
y1 =
10
α=0.75
2 3
x + 2 ⋅ 3 xy + 4 y
(x 3
4
)
2 3
− 8 y ⋅ 3 x : 3 xy
1
y2 =
;
3
; x −2 y
z 1 = (cosα − cosβ) − (sinα − sinβ) ; α −β z 2 = −4sin 2 ⋅ cos(α + β) 2 2
y1 = a=2.3
1 ; a+ 2
⎞ a− 2 ⎟⎟ ⋅ ; y2 = a + 2 a − 2a ⎠ 2
y( x − y ) x y1 = 2 − ; x + y2 x4 − y4
y=2.8 α=0.66
4 − a2 y2 = ; 2
2
2
x=3.2,
m− n ; m
y2 =
;
2
(2a + 1)3 + (2a − 1)3 4a + 2 4 a − 1 2
⎛π ⎞ sin⎜ + 3α ⎟ ⎝2 ⎠ z1 = ; 1 − sin (3α − π)
;
y2 =4a − 4a 2 − 1 ;
3 ⎞ ⎛5 z 2 = ctg⎜ π + α ⎟ 2 ⎠ ⎝4
Практикум по современному Фортрану
13 № Данные a=0.7 11
x=0.44 y=0.82
12
a=5.1 α=0.1
a=5.3 13
b=2.1 α=0.75
a=1.7 14
m=1.8
x=5.3 α=0.3 β=0.1
17
(
b=4.8 α=0.23
) (
y2 =
)
-1 ; a2 + a +1
1 z1 = cos 4 x + sin 2 y + sin 2 2 x − 1 ; z 2 = sin ( y + x ) ⋅ sin ( y − x ) 4
y1 = z1 =
y1 =
a +1
1
:
a a +a+ a
a 2- a
y2 = a − 1 ;
;
sin α − sin3α + sin5α ; cos α − cos3α + cos5α
(a 3
)(
− b2 ⋅
2
3
z 2 = tg3α
)
a −3 b
y2 = a − b ;
;
a 4 + 3 ab 3 − 3 a 3 b − 3 b 4
z 2 = cos 2α − 2 cos 2 α
z1 = cos4α − sin 4α ⋅ctg2α ; 1 2
a + ab −1
y1 = a
−
1 3
−a
−
1 6
b
1 3
−
+b
−
2 3
−
a 3
b
5 6
y2 = a ;
;
z2 =
z1 = cos4α ⋅ tg2α − sin 4α ;
y1 =
α=0.43 β=0.58
16
a2 + 2 1 1 y1 = + − ; 1− a3 2 1 + a 2 1- a
b=2.8 α=0.22
15
Формулы
z1 =
y1 =
(
4m m + m 2 − 1
(m +
)
4
)
2
m2 −1 −1
y2 =
;
tg2α + ctg3β ; ctg2α + tg3β x + x 2 − 4x x − x − 4x 2
z2 =
−
x − x 2 − 4x x + x − 4x 2
;
2tgα tg 2 α − 1
1 m2 −1
;
tg2α tg3β
y2 = x 2 − 4 x ;
z1 =sin (α + β) ⋅sin (α − β) ⋅ sec 2 α ⋅sec 2 β ; z 2 = tg 2 α − tg 2 β y1 =
z1 =
b 2 − 3b − (b − 1) b 2 − 4 + 2 b 2 + 3b − (b + 1) b 2 − 4 + 2
cos4α + 1 ; ctg α − tg α
⋅
b+2 ; b−2
y2 =
1-b ; 1+ b
1 z 2 = sin 4α 2 Практикум по современному Фортрану
14 № Данные
Формулы
2x − 3 5 4 1 1 1 1 = = y y + −1 − 2 + + + ; ; 2 3 x 4x 4 x −1 4 x 2 2 x 2 x Примечание. При x ≤4 y1 ∼ y2 ; при x>4 y1 ∼ y3 y1 =
18
x1=2.8 x2=4.8 α=0.97
x=1.4 19
⎛7 ⎞ ⎛9 ⎞ z1 = sin 2 ⎜ π − 2α ⎟ − sin 2 ⎜ π − 2α ⎟ ; ⎝8 ⎠ ⎝8 ⎠
x 3 + xy 2 − x 2 y − y 3
y1 =
β=0.34
y + 4 x y − 4 xy − x 5
4
y=2.8 α=0.5
z2 =
4
4
4
5
(
cos 2 α − cos 2β z2 = sin 2 α ⋅ sin 2β
2
2
20
a=5.1 α=0.3
2
⎛1+ a 1+a ⎞ ⎛ 1 − a 1+a ⎞ ⎟ −⎜ ⎟ y1 =⎜⎜ − − ⎟ ⎜ 1+a 1 − a ⎟ ; 1 +a 1 + a ⎝ ⎠ ⎝ ⎠
y2 =
16a a ; 1 − a 2 ⋅ (a − 1)
(
)
z1 =(1 + sec2α + tg 2α ) ⋅ (1 − sec2α + tg 2α ) ;
(
21
x=0.3 α=0.77
)
⎛ 1 ⎞ y1 = 1 − x 2 + 1 : ⎜⎜ + 1 − x ⎟⎟ ; ⎝ 1+x ⎠ cos(3π − 2α ) z1 = ⎛5 ⎞; 2 sin 2 ⎜ π + α ⎟ ⎝4 ⎠ 2
22
a=12.3 α=0.24
a=2.3 23
b=1.89 α=0.23
)
y2 = − 4 x + 4 y ;
;
z1 = ctg α − ctg β ; 2
sin 4α 2
⎛ a 1 ⎞⎟ ⎛ a − 1 ⎜ y1 = ⎜⎜ − ⎜ a +1 − ⎟ 2 a 2 ⎝ ⎠ ⎝ sin 2α −sin3α +sin 4α z1 = ; cos 2α − cos 3α + cos 4α y1
a +1⎞ ⎟; a − 1 ⎟⎠
z 2 = 2 tg 2α
y2 = 1 + x ; 5 ⎞ ⎛ z 2 = tg⎜ α − π ⎟ 4 ⎠ ⎝
y2 =
1-a ; a
z 2 = tg3α
2 ( 2a − b ) +2b 2 -3ab 4a 2 − 3ab = :
y 2 = a-b ; ; 2a -1 + b 2 2 + ab 2 1 ⎛α⎞ ⎛α⎞ z1 = sin 6 ⎜ ⎟ − cos 6 ⎜ ⎟ ; z 2 = sin 2 α − 4 cos α 4 ⎝2⎠ ⎝2⎠
(
)
Практикум по современному Фортрану
15 № Данные
24
25
b=3.8 α=0.28
p=0.7 α=0.54
Формулы
2b + 2 b 2 − 4
y1 =
b2 − 4 + b + 2
⎛ 17 ⎞ ⎛ 15 ⎞ z1 = sin 2 ⎜ π − 2α ⎟ − cos 2 ⎜ π − 2α ⎟ ; ⎝8 ⎠ ⎝8 ⎠
⎛ y1 = ⎜⎜ 1 − p 2 ⎝
(
x=4.3 α=1.23
m=2.3 28
a=6.3 29
)
−
1 2
2
(
2 m−
y1 =
cosα + sinα ; cosα − sinα
2
1 2
1-a + 4a − 4a
α=0.1 β=0.7
z1 =
2 ; 1− p4
(
)
y3 =
m y1 ∼ y3
при m > 1.5
⎛3 ⎞ z 2 = ctg⎜ π − α ⎟ ⎝2 ⎠
m 2 + m − 6 − (m − 3) m 2 − 4
3 4
; y2 =
y2 = x 2 + x + 1 ;
m 2 − m − 6 − (m + 3) m 2 − 4
1+2a − a
1 2
z 2 = tg 2α + sec 2α
1 2
+
y2 =
;
z1 =(cos α − cos β) + (sin α − sin β)
y1 =
−
;
− cos4α 2
m
При m ≤ 1.5 y1 ∼ y2 ;
1 4
)
b+2
8cos 2 2α z2 = sin 6α
y2 = − m ;
;
3
z2 =
⎞ ⎟⎟ + 2 1 − p 4 ⎠
x4 − x3 − x + 1 y1 = 3 2 x −3 ; x -5 x +7 x-3 sin 4α cos2α z1 = ⋅ ; 1 + cos4α 1 + cos2α
α=0.23 β=1.2
− 1+ p
2
(2m + 3)2 − 24m
Примечание.
z1 =
27
(
1 2
z1 =tgα + ctgα + tg3α + ctg3α ;
y1 = m1=0.47 m 2=2.47 26 α=0.1
)
−
1
y2 =
;
2
;
− m+2 m-2
z 2 = 4sin 2
1 4
a −2 ⎞ ⎛ ⎜ a − 1⎟ ⎟ ⎜ ⎠ ⎝
sin α + cos(2β − α ) ; cos α − sin(2β − α )
1 4
2
;
y2 =
z2 =
4
;
α -β 2
1 ; a −1
1 + sin 2β cos 2β
Практикум по современному Фортрану
16 № Данные
Формулы
y1 = m1=0.65 m 2=1.65 30 α=1.43
m 5 + m 4 ⋅ 3 2 + 3 4m 9 m3 − 1 − 1
m3 y2 = m− 2 Примечание.
1 − 2 sin 2 α z1 = ; 1 + sin 2α
;
(
)
y 3 = − m 2 + m3 2 + 3 4 ; При m>1 y1 ∼ y2 ;
при m ≤1
z2 =
y1 ∼ y3
1 − tgα 1 + tgα
1.2. Вычисление логических выражений Задание 1. Представить графически каждое из трех неравенств А, В и С из варианта индивидуального задания в виде заштрихованных областей плоскости, а затем записать соответствующие им отношения на Фортране. 2. Составить три системы неравенств, записать соответствующие им логические выражения и показать графическую интерпретацию выражений, каждого на своем рисунке: a) объединение областей – логическое сложение неравенств A+B+C; b) пересечение областей – логическое умножение неравенств A٠B٠C; c) дополнительная логическая формула, указанная в правой колонке таблицы с вариантами индивидуальных заданий. 3. На каждом из трех рисунков указать координаты двух контрольных точек (всего шесть точек) так, чтоб одна точка попала в заштрихованную область (истина), а другая нет (ложь). 4. Написать программу, которая для каждой из выбранных точек: a) вводит координаты точки и прогноз – словесное предсказание о нахождении точки в области (точка попала или точка не попала); b) вычисляет значение соответствующего логического выражения; c) выводит в файл out.txt координаты точки, прогноз, значение логического выражения. Содержание отчета 1. Название работы и номер варианта индивидуального задания. 2. Фамилия, имя, отчество и номер группы студента.
Практикум по современному Фортрану
17 3. Текст задания; неравенства и формула в том виде, как они приведены в варианте индивидуального задания. 4. Графическая интерпретация исходных неравенств (рисунки 1а, 1b, 1с из примера). 5. Три системы неравенств в математической символике и их графическая интерпретация – рисунки 2a, 2b, 2c из примера. На каждом из рисунков 2a, 2b, 2c должны быть нанесены две контрольные точки с указанием их координат. 6. Распечатка программы и результатов из соответствующих файлов. При подготовке к защите ответить на контрольные вопросы. Справочная информация Порядок выполнения операций в логических выражениях определяется их старшинством (приоритетом). В таблице, приведенной ниже: − L1, L2 – логические выражения; − a, b – численные или строковые выражения. В отношениях можно сравнивать не только числа, но и строки – они сравниваются в соответствии с алфавитом. Операция
Логические операции
Операции отношения
Вычисление значений a,b
Фортран-77
Фортран-90
Числовые или символьные операции.
Старшинство 1
Больше чем
a.GT.b
a>b
2
Больше или равно
а.GE.b
a >= b
2
Меньше чем
а.LT.b
a 0 (В) y ≥ x (C) Неравенства А, В, С входят в логические формулы А+В+С, А ⋅ В ⋅ С, общие для всех вариантов, и в дополнительную логическую формулу, например, A ⋅ B + C . Подготовка проходит в три этапа: 1. графическая интерпретация исходных неравенств и запись на Фортране соответствующих отношений (в строгих неравенствах границы не входят в заштрихованную область, и их на рисунке следует показать пунктиром вместо сплошных линий.) x>0
y>0
y≥x
Рис.1а
Рис.1b
Рис.1c
x>0
y>0
y>=x
2. системы неравенств, их графическая интерпретация, логические выражения, соответствующие системам неравенств
Логическое сложение
Система неравенств
Графическая интерпретация
A+ B+C
⎡x > 0 ⎢y > 0 ⎢ ⎢⎣ y ≥ x
Контрольные точки
Логическое выражение
TRUE (-1, 1); FALSE (-0.5, -1)
x>0. .OR. y>0. .OR. y>=x Истина для точек в I или II или IV квадрантах или выше прямой y=x
Рис.2а
Практикум по современному Фортрану
19
Дополнительная формула
Логическое умножение
Система неравенств
Графическая интерпретация
Контрольные точки
Логическое выражение
A⋅ B ⋅C
⎧x > 0 ⎪ ⎨y > 0 ⎪y ≥ x ⎩
TRUE (0.5, 1); FALSE (1, -1)
Рис.2b
AB + C
⎡⎧ x > 0 ⎢⎨ ⎢⎩ y > 0 ⎢y ≥ x ⎣
x>0. .AND. y>0. .AND.y>=x Истина для точек в I квадранте и выше прямой y = x
TRUE (-1.5, -1); FALSE (1.5, 1)
.NOT. (x>0. .AND. y>0.) .OR. y>=x Истина для всех точек во II, III или IV квадрантах или выше прямой y=x
Рис.2c
3. исходные данные программы вводятся оператором Read(1,*) x, y, prognos
! координаты точки и прогноз
Данные подготовить в файле In.txt (прогноз – в апострофах): –1, 1, ’внутри ’ -0.5, –1, ’вне’ далее аналогично для остальных контрольных точек. Программа ! Пример программы для одной контрольной точки: Program Logical_expressions ! логические выражения ! студент (фамилия, имя) группа № работа № вариант № Implicit None ! все переменные должны быть объявлены Logical A, B, C, ILI ! ILI – результат для операции OR ! (не забудьте добавлять описания новых переменных) Real x, y ! координаты точек Character*6 prognos ! строка длиной 6 символов Open(1, file=’In.txt’) ! файл с исходными данными Open(6, file=’Out.txt’) ! файл результатов !***** ! операция OR: для объединения областей Read(1,*) x, y, prognos ! вводятся координаты одной точки и прогноз ! логические операторы присваивания: A = x>0; B = y>0; C = y>x ! операции отношения ILI = A .OR. B .OR. C ! логическая операция Write(6,*)’для OR ’, prognos, ’ (’, x, ’,’, y, ’) ответ ’, ILI !***** ! Для каждой из остальных пяти контрольных точек добавить операторы, ! аналогичные части программы от «!*****» до «!*****» ! Не забудьте добавить описания типов дополнительных переменных. End Program Logical_expressions
Практикум по современному Фортрану
20 Контрольные вопросы к защите работы 1. Что называется логическим выражением, бывает ли оно смешанным? Могут ли в него входить числа? 2. Приведите три основные и две дополнительные логические операции с таблицами истинности и примерами. 3. Шесть операций отношения с примерами. 4. Логические константы. 5. Как логическую константу “истина” задать с именем ON? 6. В каком порядке выполняются операции в логической формуле? а) со скобками; б) без скобок. Разъясните оба случая. 7. Даны вещественные A=-3, B=4; строки wef=‘fifty’ и Bref=‘first’. Опишите все переменные с указанными значениями и вычислите: A /= B/2-5; -27.**(1./3) == -A; -27**(1/3) == A; .not.wef > Bref; Wef(1:2) == Bref(1:2).or.A 4 cos x 2 8. Запишите систему неравенств ⎨ в виде логического ⎩x < 2 выражения на Фортране. 9. Исправьте ошибки в логических выражениях: a) sinx>2..and..4.cos2x; b) -27.**(1./3) =-3; c) 2..ne.8..or..not..3=0 .
Пример контрольного задания 1. Объявите тип переменной L1 (оператор Фортрана) и вычислите ее значение real:: A=21.0 integer:: M=21 L1 = A/5==M/5
2. Даны неравенства для вычисления значений логических переменA = x0; B = y0
y≤0
x2 + y2 < 1
AB + C
3
x>0
y>0
y2 −3 ≤ x 3
AB + C
4
x≤0
y>0
x2 + y2 ≤ 1
AB + C
5
x≤0
y>0
y > x2 – 2
AB + C
6
x≤0
y>0
y > - x2 + 2
AB + C
7
x≤0
y>0
x2 + y2 ≤ 1 4
AB + C
8
x>0
y>0
x2 +
y2 ≤1 4
AB + C
9
x≤0
y>0
y2 ≤ x +1 2
AB + C
10
x>0
y>0
y ≤ x2 – 2
AB + C
11
x≤0
y≤0
y ≤ - x2 + 2
CA+ B
y≤0
x2 + y2 ≤ 1 4
CA+ B CA+ B
12
x>0
13
x>0
y≤0
y2 x + >1 4
14
x>0
y>0
y2 > x +1 2
CA+ B
15
x≤0
y≤0
x2 + y2 > 1
CA+ B
2
Практикум по современному Фортрану
22 №
Неравенство A
Неравенство B
Неравенство C
Дополнительная логическая формула
16
x>0
y>0
y > x2 – 2
A+ B +C A+ B +C
17
x≤0
y≤0
x2 y ≤ − +3 3
18
x>0
y>0
y > – x2 + 2
A+ B +C
19
x>0
y≤0
y2 −3 ≤ x 3
A+ B +C
20
x>0
y>0
x2 + y2 > 1
A+ B +C
21
x>0
y≤0
y > x2 – 2
A+ B +C
22
x>0
y>0
y ≤ - x2 + 2
BA+ C
23
x>0
y>0
x2 + y2 >1 4
BA+ C
24
x≤0
y≤0
x2 +
y2 ≤1 4
BA+ C
25
x>0
y≤0
y2 ≤ x +1 2
BA+ C
26
x>0
y≤0
y ≤ x2 – 2
BA+ C
27
x>0
y≤0
y > - x2 + 2
BA+ C
28
x≤0
y≤0
x2 + y2 >1 4
BA+ C
29
x≤0
y>0
x2 +
y2 >1 4
A + CB
30
x≤0
y≤0
y2 > x +1 2
A + CB
Практикум по современному Фортрану
23 1.3. Построение графиков функций Задание 1. Для каждого участка графика определить границы и составить уравнение y = fi(x). 2. Написать программу табуляции функции по участкам fi(x). Строки записать в файлы Fi с расширением .txt. Для контроля и отчета создать файл Out.txt, в котором для каждого участка линии выведен заголовок и координаты не более чем 10 точек. 3. Используя приложение Advanced Grapher (далее AGrapher), вывести на экран разноцветные графики функций fi(x) из соответствующих файлов, подготовленных программой. 4. График, созданный в AGrapher, предъявить преподавателю. Содержание отчета 1. Название работы и номер варианта индивидуального задания. 2. Фамилия, имя, отчество и номер группы студента. 3. Текст задания и график функции в том виде, как он приведен в варианте индивидуального задания. 4. Таблица участков графика (смотрите пример), в которой для каждого участка указаны границы, уравнения, шаг табуляции, количество выполнений цикла. 5. Блок – схема программы. 6. Распечатки программы и контрольного файла Out.txt. При подготовке к защите ответить на контрольные вопросы. Комментарии к заданию 1. Приложение Advanced GRAPHER распространяется бесплатно, адрес сайта http://www.alentum.com/agrapher/. Рекомендации по работе с AGrapher смотрите в разделе 7.2. 2. Таблицу основных уравнений смотрите в разделе 7.3. 3. После разбиения графика на участки следует выбрать шаг табуляции каждого участка. Для прямолинейных участков шаг выбирается из расчета 2-5 точек на участок. На криволинейном участке с целью улучшения изображения в AGrapher шаг выбирается более мелкий, до 50 точек. Для прямой, параллельной оси Х выводятся две точки (без цикла). 4. Для табуляции каждого участка использовать оператор цикла DO x=xn,xk,step ... enddo Практикум по современному Фортрану
24 Здесь х – переменная цикла; xn, xk – начальное и конечное значения x, step - шаг изменения х. 5. Количество повторений цикла рассчитывается по формуле: ⎛ ⎛ xk − xn + step ⎞ ⎞ ⎟⎟ ⎟⎟ или M = Max ⎜⎜ 0, Int ⎜⎜ step ⎝ ⎠⎠ ⎝
⎛ ⎛ xk − xn ⎞ ⎞ M = Max ⎜⎜ 0, Int ⎜⎜ + 1⎟⎟ ⎟⎟ ⎝ step ⎠⎠ ⎝
Из-за применения в расчетах функции Int (преобразование в целый тип) при вещественных значениях xn, xk, step можно потерять конечное значение переменной цикла. Возможные варианты предотвращения этой ошибки: a) при вещественных значениях xn, xk или step конечное значение в операторе цикла всегда записывать в виде xk + step/2.0; b) построить цикл не по вещественной переменной x, а по целой I (do I=1,M). Здесь М – количество повторений цикла, рассчитанное вручную при написании программы. При этом в цикле придется пересчитывать целочисленную переменную I в вещественную переменную x оператором х=xn+step*(I-1). В этом случае ошибка вычислений не накапливается; c) выражать угол alpha в целых градусах, а не в радианах, и при этом использовать функции sind, cosd; d) координаты последней точки участка вывести после цикла. Пример Функция задана графически на интервале [-2, 3]
Уравнения участков графика №
Границы участка
Уравнение
Шаг цикла
Количество точек
Примечание
1
[-2, 0]
y =x/2 +1
1
3
Прямая пересекает оси в точках (-2,0) и (0,1). Уравнение прямой в отрезках.
2
[0, 1] α∈[0, 90▫]
x = cos α y = sin α
3
31
Параметрические уравнения окружности радиуса R=1 с центром в начале координат.
3
[1, 3]
y = -1
нет
2
Горизонтальная прямая (параллельна оси Х)
Практикум по современному Фортрану
25 Программа Program Function_graph ! Табуляция функции ! студент (фамилия, имя) группа № работа № вариант № Implicit None Real x, y, alpha Integer,parameter :: tabl=6 ! имени tabl присвоен номер устройства 6 Integer k ! номер точки криволинейного участка ! участки для AGrapher Open(1,File=’L3_F1.txt’)! 1 – координаты точек прямой Open(2,File=’L3_F2.txt’)! 2 – координаты точек дуги окружности Open(3,File=’L3_F3.txt’)! 3 – горизонталь (координаты граничных точек) Open(tabl,File=’Out.txt’)! контрольный текстовый файл Write(tabl,*)’прямая’ Do x= -2, 0, 1 y = 0.5*x+1 Write(1,*)x,y; Write(tabl,*)’(x,y)=’,x,y Enddo Write(tabl,*)’дуга окружности’ k=0 ! начальная установка счетчика точек на дуге окружности Do alpha=0,90,3 ! аргумент функций Sind, Cosd - в градусах, шаг цикла - целый x=Cosd(alpha) y=Sind(alpha) Write(2,*)x,y k=k+1 ! в tabl печатается каждая 5-я точка, Mod(k,5) – остаток от деления k на 5 if(Mod(k,5)==1) Write(tabl,*)’(x,y)=’, x,y Enddo Write(tabl,*)’Горизонталь - две точки без цикла’ Write(tabl,*) ’(1,-1) ==> (3,-1,)’ Write(3,*) 1,-1; Write(3,*) 3,-1 End Program Function_graph
Контрольные вопросы к защите работы 1. Что такое цикл? 2. Назовите три вида циклов. 3. Приведите блок-схему и пример бесконечного цикла. 4. Приведите блок-схему и пример итеративного цикла. 5. Приведите блок-схему и пример цикла по переменной. 6. Объясните формулу для числа повторений цикла по переменной. 7. Приведите подробную блок-схему цикла по переменной. 8. Как предотвратить возможную потерю последнего выполнения тела цикла по вещественной переменной? Варианты решения с объяснениями.
Практикум по современному Фортрану
26 9. Подсчитайте количество повторений циклов: a) do alpha=0,90,2 ; b) do alpha=90,0,2 ; c) do alpha=90,0,-2 ; d) do alpha=0,9 ; e) do alpha=9,0 ; f) do alpha=1.57, 3.14, 0.3 . 10. Поясните на блок-схемах роль оператора Enddo в каждом из трех видов циклов. 11. Поясните на блок-схемах роль оператора Exit в каждом из трех видов циклов. 12. Поясните на блок-схемах роль оператора Сycle в каждом из трех видов циклов. Пример контрольного задания 1. Рассчитайте количество повторений цикла do x=3.15, 2.12, 1.3 2. Напишите оператор цикла по переменной для вывода на экран значений x и tg x, если x изменяется от –100о до –200о, шаг выберите сами. Приведите блок-схему этого оператора. 3. Для фрагмента программы x = 0.0 Do k = 2, 8, 2 x = x + 0.8 if (x3) then y = x*2 + 1.0/k else exit endif write(1, *) x, y enddo ! выполните следующее:
a) приведите блок-схему; b) опишите типы всех переменных; c) напишите, какие и сколько значений x и y будут выведены на устройство 1 в результате работы цикла. 4. Напишите оператор цикла Do while для вывода на экран значений x и y = sin2x + cos2x, если x изменяется от –π/4 до 1,5π с шагом π/10. Приведите блок-схему этого оператора.
Практикум по современному Фортрану
27 Варианты индивидуальных заданий №
Графики
1
2
3
4
5
Практикум по современному Фортрану
28 №
Графики
6
7
8
9
10
11
Практикум по современному Фортрану
29 №
Графики
12
13
14
15
16
17
Практикум по современному Фортрану
30 №
Графики
18
19
20
21
22
23
Практикум по современному Фортрану
31 №
Графики
24
25
26
27
28
29
Практикум по современному Фортрану
32 №
Графики
30
1.4. Попадание точки в заданную область плоскости Задание 1. Область заштрихована и ограничена линиями контура. 2. Определить графики линий контура: a) для каждой i-ой линии контура задать область определения и уравнение y = fi(x) – проверить уравнения в Agrapher; b) написать программу табулирования fi(x), полученные таблицы импортировать в Agrapher, настроив линии – красным цветом, точки удалить – график должен повторять рисунок индивидуального задания; c) сохранить график в файле area.agr (этот график используется в дальнейшем). 3. Описать математически систему неравенств, обеспечивающую попадание произвольной точки в заштрихованную область – проверить правильность системы неравенств в AGrapher. 4. Рисунок индивидуального задания накрыть прямоугольной сеткой, в узлах которой находятся точки для проверки системы неравенств: a) прямоугольник должен на 10-20% перекрывать заданный контур с каждой из четырех сторон; b) рекомендуемое число узлов сетки – 20-40 по каждой оси. Определить параметры сетки: начальное и конечное значения x и y, шаг изменения x и y. 5. Дополнить программу из пункта 2: a) сгенерировать узлы сетки, используя ее параметры; b) проверить соответствие координат каждой точки сетки системе неравенств, используя для этого единственный оператор IF; c) записать координаты точки (x, y) в один из двух файлов: если точка в пределах заштрихованной области – в файл in.txt, если точка за пределами заштрихованной области – в файл out.txt. 6. Дополнить график в Agrapher: a) прочитать график контурных линий из файла area.agr ; b) импортировать таблицы из файлов in.txt и out.txt ; c) установить для точек из in.txt и out.txt разные цвета и удалить линии, соединяющие точки; Практикум по современному Фортрану
33 d) предъявить преподавателю результат на экране. Содержание отчета 1. Название работы, номер варианта индивидуального задания. 2. Фамилия, имя, отчество и номер группы студента. 3. Рисунок в том виде, как он приведен в варианте задания. 4. Уравнения всех линий, ограничивающих заштрихованную область. 5. Система неравенств координат всех точек заштрихованной области. 6. Блок – схема и распечатка текста программы. При подготовке к защите ответить на контрольные вопросы. Комментарии к заданию 1. В системе неравенств показать объединение квадратной скобкой, пересечение – фигурной скобкой. 2. Таблицу основных уравнений смотрите в разделе 7.3. 3. При составлении системы неравенств рекомендуется рассматривать область по отдельным фрагментам, что поможет в решении задачи. Система неравенств в этом случае представляется объединением групп неравенств, соответствующих этим фрагментам. 4. Рекомендуется воспользоваться симметрией заданной области, иногда это помогает уменьшить количество неравенств. 5. Генерируя точки – узлы сетки, воспользуйтесь вложенными циклами для задания координат x,y для точек. Пример На рисунке показана заштрихованная область и ограничивающий ее пунктирный прямоугольник. Точка находится в пределах заданной области, если она принадлежит хотя бы одному из двух фрагментов В или A, причем из-за |x|= 2) и (y =2 .and. y eps», аварийный выход из цикла при N > Nmax.
Начало F= sinx; N= 0; An = x; Sum=An Вывод для графиков зависимости An, Sum, F от N(N= 0) Конец цикла
N=N+1(An нумеруются с "0")
пока | An | > eps
− x⋅x ; (2 N + 2 ) ⋅ (2 N + 3 ) Sn = Sn + An ; N = N +1 An = An ⋅
Результаты: x, F, Sum, N, |F-Sum|
Вывод для графиков зависимости An, Sum, F от N
Конец
да
N > Nmax
нет
Аварийноесообщение Stop
Практикум по современному Фортрану
44 Программа суммирования ряда для одного значения аргумента Program Pro1 ! суммирование ряда – первая версия – для одного х ! студент (фамилия, имя) группа № работа № вариант № Implicit None Real:: x = 1.1 ! рекомендованный x0 Real:: eps = 1E-04 ! методическая погрешность Integer:: N ! номер члена ряда Integer:: Nmax=100 ! максимально допустимое значение члена ряда Real An, Sn, F ! член ряда, сумма, функция Real Delta ! модуль разности между Sn и F ! список переменных, выводимых при достижении заданной точности: Namelist /result/ x, F, Sn, n, Delta ! список переменных, выводимых при аварийном предупреждении: Namelist /avaria/ x, An, Sn, F, N, Nmax !-------------начало выполнения программы Open(1, file = ’Out.txt’) ! файл с результатами Open(2, file = ’An.txt’) ! файл для AGrapher – зависимость An от N Open(3, file = ’Sn.txt’) ! файл для AGrapher – зависимость Sn от N Open(4, file = ’F.txt’) ! файл для AGrapher – F (одинаково при всех N) Write(1, *) ’Точность вычисления ’, eps ! ***** Суммирование ряда выполнить по блок-схеме, приведенной выше; внести изменения с учетом индивидуального задания. Для вывода аварийного сообщения используйте оператор Write(1,avaria) ! ***** ! РАСЧЕТ ЗАКОНЧЕН Delta = ABS(F–Sn) !модуль разности между частичной суммой Sn и функцией F Write(1,result) !вывод результатов End Program Pro1
Результаты работы Pro1 1. Файл Out.txt, в который выведены исходные данные (eps и x) и вычисленные значения F, Sn, n, Delta = ABS(F – Sn). Если Delta < eps, то результаты удовлетворительны. Соотношение Delta > eps означает, что ряд сходится, но не к ожидаемому значению. В этом случае следует проверить: − достижима ли задаваемая погрешность вычислений ε при использовании вещественных переменных типа Real. Возможно, следует использовать переменные типа Real*8; − рекуррентную формулу, алгоритм и программу. 2. Файлы An.txt, Sn.txt, F.txt с данными для графиков. Построив графики с помощью пакета AGrapher, убедитесь, что lim An = 0 , lim S n = sin(x) . n→∞ n →∞
Практикум по современному Фортрану
45 Программа Pro2, дополненная циклом по значениям аргумента х Для программы Pro2 создать проект, скопировать в него текст Pro1 для дальнейших изменений, которые следует проводить в два этапа. 1. Повторить суммирование для 10 – 15 значений x из [xm , xk] с шагом xh и вывести неформатированные результаты для каждого x Program Pro2 ! суммирование ряда для различных значений x . . . Real:: xm=-1.6, xk=1.6, xh=0.2 ! границы и шаг изменения х !!! Исключить открытие файлов для AGrapher и вывод в них Do x = xm, xk+xh/2, xh ! добавить цикл ! ***** Суммирование ряда для x выполнить как в Pro1 ! РАСЧЕТ ЗАКОНЧЕН Write(1,*) ’x=’, x, ’ F=’, F, ’ Sn=’, Sn, & ’n=’, n, ’ |F-Sn|=’, Delta ! вывод строки таблицы EndDo End Program Pro2
Проанализировать результаты, сравнив Delta и eps; если они удовлетворительны для всех значений x, перейти к следующему этапу. 2. Окончательная редакция программы с форматным выводом a) добавить операторы Format 5 Format(’Точность вычисления ряда ’,E7.1) 12 Format & (’|’,F6.1, 2(’ |’, F7.4), ’ |’, I7, 4x, ’ |’, e9.2, ’ |’)
b) провести вычисления, используя форматный вывод Write(1, 5) eps ! вывод значения методической погрешности Write(1,12)x, F, Sum, N, Delta ! вывод строки таблицы
c) «шапку» и «донышко» таблицы можно “нарисовать” в файле Out.txt, когда результаты уже выведены по формату из (a), а затем использовать их при составлении форматов Write(1,10) ! перед циклом по х вывод «шапки» таблицы Write(1,11) ! после цикла по х вывод «донышка» таблицы 10 Format& ! «шапка» таблицы (’+-------+---------+---------+-----------+----------+’/& ’| x | станд | Тейлор |Членов ряда| Разница |’/& ’+-------+---------+---------+-----------+----------+’) 11 Format& ! «донышко» таблицы (’+-------+---------+---------+-----------+----------+’)
Примечание. Выбор формата для вывода значений функции f(x) и суммы ряда определяется значением точности ε; например, при ε = 10–3 достаточно выводить эти значения с точностью до третьего десятичного знака, при ε = 10–5 – с точностью до пятого знака и т.д.
Практикум по современному Фортрану
46 Контрольные вопросы к защите работы 1. Что такое сходящийся ряд? Условие сходимости ряда (предел). Покажите на графике для своего задания. 2. При каком условии прекращается суммирование ряда в выбранном алгоритме? 3. Зачем в алгоритм введено ограничение количества членов ряда? Каковы возможные причины нарушения этого ограничения? Значения каких переменных помогут понять его причину? 4. Зачем нужна рекуррентная формула? 5. Зачем нужна проверка вычислений? Проверьте коэффициент рекурсии для своего варианта работы на примере элемента a11. 6. Что можно сказать о значении функции, вычисленном по стандартной программе, будет ли оно точным? Значения каких переменных вычисляются точно? 7. С какой целью в программах используют цикл do while? 8. С какой целью в программах используют оператор exit? 9. Напишите операторы, соответствующие выводу строки (символ «˜» означает пробел): «при˜х˜=˜0.05˜sin(x)˜=˜˜.85E-05» 10. Сократите запись формата Format (’|’, F12.7, ’|’, F12.7, ’|’, F12.7, ’|’)
11. Исправьте ошибку Real:: f integer:: n write (1, 7) f, n 7 Format (I6, 5x, ’|’, e11.4)
12. Как в программе Pro1 заменить цикл do while бесконечным циклом do? Приведите блок-схему и фрагмент программы. 13. Что меняется в результатах программы Pro2 при изменении значения точности ε, покажите на своих результатах. Объясните, почему. Пример контрольного задания 1.
Пример вывода формулы коэффициента рекурсии с проверкой для двух членов ряда (задача, аналогичная вариантам индивидуальных заданий).
2. Составьте блок-схему и напишите оператор do while для вывода в файл Out.txt значений a и b = a 2 − 2 , если начальное значение a = 8 и каждое следующее a равно половине предыдущего с противоположным знаком. Выполнение цикла прекратить при недопустимом значении a. a) a и b выводить по формату “E9.3” с названиями переменных. Практикум по современному Фортрану
47 b) Показать все выводимые строки с пробелами. c) Чему равно значение a после выхода из цикла?
3. Как будут выглядеть выведенные строки (покажите с пробелами)? На каком устройстве? Real:: f=2700000, z=-0.00017 write (*, 4) f, z write (*, 5) f, z 4 Format (F7.1) 5 Format (2E9.2)
4. Напишите оператор Format, соответствующий выводу строки (символ «˜» означает пробел): ˜:˜˜.68E-04˜:˜˜.75E-02˜:˜˜.13E-03˜: Варианты индивидуальных заданий Значения a0 и x0 рекомендуются для программы Pro1 Разложение функции в степенной ряд
№
1
⎛ nπ ⎞ n x cos ⎜a + ⎟ ∞ x 2 cos a 2⎠ ⎝ = cos a − x ⋅sin a− +K cos(x + a) = ∑ 2 ! n ! n =0
π⎞ ⎛ cos ⎜ α + ⎟ = − sin α 2⎠ ⎝
Примечание
3
4
x 2n x2 x4 x6 Ch x = ∑ =1+ + + +K 2! 4! 6! n = 0 ( 2 n)! ∞
ln e
∞ x +1 1 1 1 ⎛1 ⎞ 2 K = 2∑ = + + + ⎜ ⎟ 2 n +1 x −1 ⎝ x 3x 3 5 x 5 ⎠ n = 0 ( 2n + 1 )x
−x
x