
- •Введение
- •Инструкции для работы вIdeStudio
- •Инструкция по работе в DevStudio,fps4.0
- •Инструкция по работе вVisualStudio
- •Инструкция по работе вPlatoIdeStudio
- •Лабораторные работы
- •Вычисления по формулам Задание
- •Содержание отчета
- •Справочная информация
- •Комментарии к заданию
- •Контрольные вопросы к защите работы
- •Пример контрольного задания
- •Варианты индивидуальных заданий «Формулы»
- •ВетвленияIfи циклыDo Задание
- •Последовательность выполнения работы
- •Содержание отчета
- •Справочная информация
- •Комментарии к заданию
- •Контрольные вопросы
- •Примеры задач контрольного задания
- •Варианты индивидуальных заданий «Ветвления и циклы»
- •Сумма степенного ряда - приближенное вычисление функции Задание
- •Содержание отчета
- •Справочная информация
- •Комментарии к заданию
- •Implicit None
- •Контрольные вопросы к защите работы
- •Пример контрольного задания
- •Варианты индивидуальных заданий «Сумма степенного ряда»
- •Решение задач с одномерными массивами Задание
- •Комментарии к заданию
- •Содержание отчета
- •Справочная информация
- •Implicit None
- •Контрольные вопросы
- •Пример контрольного задания
- •Варианты индивидуальных заданий «Одномерные массивы»
- •Решение задач с двумерными массивами Задание
- •Содержание отчета
- •Комментарии к заданию
- •Справочная информация
- •Ввод и вывод двумерного массива
- •Динамические массивы.
- •Контрольные вопросы
- •Пример контрольного задания
- •Варианты индивидуальных заданий «Двумерные массивы»
- •Решение задач с использованием процедур Задание
- •Содержание отчета
- •Справочная информация
- •Комментарии к заданию
- •Пример 1 (функция)
- •Implicit None
- •Interface
- •Пример 2 (подпрограмма)
- •Implicit none
- •Implicit none
- •Implicit none
- •Контрольные вопросы
- •Примеры задач контрольного задания
- •Integer I
- •Варианты индивидуального задания «Процедуры»
- •Механизмы присоединения данных Задание
- •Содержание отчета.
- •Комментарии к заданию
- •Implicit none
- •Implicit none
- •Implicit none
- •Implicit none
- •Контрольные вопросы к защите работы
- •Пример контрольного задания
- •Варианты индивидуальных заданий
- •Элементы языка программирования Фортран
- •Текст программы на Фортране
- •Синтаксис языка Фортран, выражения
- •Имена и ключевые слова
- •Константы и переменные встроенных типов
- •Выражения
- •Оператор присваивания
- •ВетвленияIfи циклыDo Ветвления – конструкции If
- •Циклы – конструкции do
- •Параллельные конструкцииwhereиforall
- •Оператор и конструкция where
- •Оператор и конструкция forall
- •Различие скалярных и векторных конструкций
- •Парафлоид – один оператор вместо двадцати
- •Implicit none
- •Implicit none
- •Ввод и вывод в Фортране
- •Форматный вывод
- •Дескрипторы данных
- •Взаимодействие операторовwriteиformat
- •Массивы
- •Характеристики массива
- •Размещение массива в памяти компьютера
- •Секции массивов и неявный цикл в списках ввода/вывода
- •Ввод-вывод на матрице Integer,dimension(1:3,1:4)::m
- •Программы, модули и механизмы обмена данными
- •Двухуровневая структура программ
- •Трёхуровневая структура модуля
- •Вызов процедур и использование модулей
- •Оператор Interface
- •Interface
- •Операторы End, Stop, Return
- •Обмен данными в проекте
- •Присоединение данных носителя
- •Присоединение данных модуля
- •Встроенные функции Фортрана
- •Числовые функции
- •Функции редукции массивов
- •Редукция одномерных массивов
- •Редукция двумерных массивов
- •Справочные материалы Редакторы простых текстов для набора программ
- •Традиции оформления текста на Фортране
- •Пакет Agrapher для построения графиков
- •Справочник простейших функций для заданий
- •Типичные ошибкив арифметических выражениях
- •Типичные недочеты и ошибки в работе с массивами
- •Перевод ключевых слов, операторов и терминов Фортрана
- •Литература
Редукция одномерных массивов
Все ответы в примерах, приведенных ниже, получены для одномерного вещественного массива:
Real,dimension(1:7):: Ar
Таблица 38.Вещественный массив для редукции одномерных массивов
МассивAr=[ 2.1, -0.7, 0.0, 17., -12., 0.4, -35.5] Номера элементов 1 2 3 4 5 6 7 |
Итоговые функции с редукцией массивов Sum,Product, MinVal,MaxVal
Здесь и далее в описаниях функций аргументы, указанные в квадратных скобках, необязательны(могут отсутствовать при конкретном вызове). Так, для одномерного массива аргумент №2dimможно опускать или указыватьdim=1 –для одномерного массива результат редукции – всегда скаляр, как итог по всему массиву. Аргумент dimпочти во всех примерах отсутствует, поскольку для одномерного массива он не влияет на форму результата. Итоговые числовые функцииперенимают тип у массива:
Real,dimension(1:5):: Ar; Real Value
Value = Sum(array[, dim][, mask]) ! сумма
Value = Product(array[,dim][,mask]) ! произведение
Value = MinVal(array[,dim] [,mask]) ! минимум
Value = MaxVal(array[, dim][,mask]) ! максимум
Примеры
Найти значение минимального положительного элемента массива Ar
Real Zmin Два варианта задания аргументов при вызове функции MinVal:
Zmin=MinVal(Ar,1,Ar>0) – имена аргументов не пишут, поскольку все они указаны по порядку на своих местах;
Zmin=MinVal(Ar,mask=Ar>0) – пропущен аргумент №2dim и из-за этого необходимо указать имяmaskдля аргумента №3, этого будем придерживаться в последующих примерах для одномерного массива.
В результате: Zmin= 0.4
Найти значение максимального элемента Arиз интервала [0.1, 17.6]
Real Zmax; Zmax=MaxVal(Ar, mask=0.1<=Ar.and.Ar<=17.6)
В результате: Zmax = 17.0
Найти сумму квадратов положительных элементов секции Ar(1:7:3)
Real SumQu; SumQu=Sum(Ar(1:7:3)**2, mask=Ar(1:7:3)>0)
В результате: SumQu=Ar(1)2 +Ar(4)2= 2.12+ 172= 293.41
Найти произведение модулей ненулевых элементов секции Ar(3:7)
Real Prod; Prod=Product(abs(Ar(3:7)),mask=Ar(3:7)/=0)
В результате:
Prod=Ar(4) *Ar(5) *Ar(6)*Ar(7) = 17.0*12.0*0.4*35.5 = 2896.8
Внимание, типичная ошибка, когда, используя секцию массива, забывают эту секцию указать для маскиMask, и тогда size(Array)≠size(Mask):
ошибка, которая выявится при компиляции
Su=Sum(Array =Ar(1:3),mask=Ar>0)
– Su=Sum(Array=Ar(1:N), mask=Ar>0)- нет ошибок при компиляции
при N=7 ошибки действительно нет
при неизвестном N<7ошибка есть
правильно так: Su=Sum(Array =Ar(1:N), mask=Ar(1:N)>0)
Any,all– итоговые логические функции с редукцией формы массива
Итоговые логические функции возвращают логическое значение:
Any(mask) – результат «true», если в массиве есть элементы со свойствомmask; иначе говоря, это логическое ИЛИ элементов маски;
All(mask) – результат «true», если все элементы массива обладают свойствомmask; иначе говоря, это логическое И элементов маски.
Примеры
Есть ли в массиве Arэлементы, по модулю большие 30 ?
Logical L1; L1=Any(abs(Ar)>30)
В результате: L1 = .true. так как |-35.5|>30
Другой пример
if(Any(abs(Ar)>30))print *,’ Ar > 30 presents’
Все ли элементы с пятого по седьмой отрицательны?
Logical L2
L2 = All(Ar(5:7)<0) ! В результате: L2=.false.
Другой пример:
if(.not.All(Ar(5:7)<0))print *,’not all Аr(5:7)< 0’
Итоговый счетчик Count
Возвращается целое число – количество элементов, со свойством mask
int=count(mask)–сколько элементов удовлетворяетmask.
Пример
Найти количество элементов массива Аr, по модулю больших 11.
Integer K11; K11 = Count(abs(Ar)>11)
В результате: K11=3 – три элемента: |Ar(4)|>11, |Ar(5)|>11, |Ar(7)|>11
Внимание:
аргумент Mask задают в виде логического выражения от числового массива, в то время как самого числового массива нет среди аргументов функцийall, any, count;
аргумент dimпочти во всех примерах отсутствует, поскольку для одномерного массива он не влияет на форму результата.
Положение экстремума – MaxLocMinLoc
Функции MaxLoc, MinLocэтой группы являются справочными и не редуцируют исходный массив.
Integer,dimension(1:1):: Num
Num=MaxLoc(array[,mask])! Num(1)- номер максимального элемента
Num=MinLoc(array[,mask])! Num(1)-номер минимального элемента
Для одномерного массива функции MaxLoc, MinLocвозвращают целочисленный однокомпонентный вектор с номером минимального (MinLoc) или максимального (MaxLoc)элемента для массива Array = Ar.
Примеры
Найти номер максимального элемента одномерного массива Ar.
Integer,dimension(1:1):: Num; Integer N
Num=MaxLoc(Ar); N = Num(1)
Можно к однокомпонентному вектору MaxLoc(Ar)применить любую из четырехчисловых функций редукции, тогда получим скаляр:N=Sum(MaxLoc(Ar))
В результате: N= 4 – для максимального элементаAr(4) = 17.0
Найти номер минимального положительного элемента массива Ar.
Integer,dimension(1:1)::Num; Integer N
Num=MinLoc(Ar,mask=Ar>0); N=Num(1)
или N=Sum(MinLoc(Ar,mask=Ar>0)) или N=Sum(MinLoc(Ar,1,Ar>0))
В результате: N=6 для минимального положительного элементаAr(6)=0.4