Farionova_Fortran
.pdfТема1. Алгоритмиегосвойства ...
1.3.1. Арифметические выражения
Доступные математические операции и порядок их выполнения приведены в табл. 1.3.
Таблица1.3. Приоритетоперацийварифметическихвыражениях
Операция |
Название |
Уровень |
Порядок |
Пример |
выполнения |
||||
Функция (х) |
См. прил. А |
1 |
Сначала действия |
Sin(x+1) |
|
|
|
в скобках |
|
** |
Возведение в степень |
2 |
Справа налево |
X**3 |
* |
Умножение |
3 |
Слева направо |
X*y |
/ |
Деление |
3 |
Слева направо |
Х/y |
+ |
Сложение |
4 |
Слева направо |
X+y |
– |
Вычитание |
4 |
Слева направо |
Х–y |
– |
Смена знака |
4 |
Слева направо |
–Х |
Вычисления в арифметических выражениях выполняют слева направо, согласноприоритетуоперации(см. табл. 1.3). Дляизменения порядкадействийиспользуютсякруглыескобки. Верхниеинижниеиндексывзаписиарифметическихвыраженийнедопустимы. Привозведении в степень действия выполняются справа налево. Все переменные, используемые в выражении, должны быть к моменту вычисления выраженияопределены.
Операции с целыми операндами имеют особенности:
результат деления двух целых чисел определен как целая часть частного;
любое ненулевое целое, не равное 1 или –1, возведенное в отрицательную степень, будет равно нулю. Это связано с тем, что I**(–J) интерпретируется как 1/I**J и предполагает деление двух целых чисел.
Особенности возведения в степень:
при вещественном показателе степени real x операция a**x выполняется как ax = elna x = еx lnа, откуда следует ограничение на основание a > 0;
прицеломпоказателестепени integer n операцияa**n выполняет-
ся как n-кратное умножение a*a*a* ...*a.
1.3.2. Логические выражения
Результатом операций отношения могут быть только два значения: True – истина и False – ложь. В логическом выражении можно ис-
12
1.3. Арифметические и логические выражения
пользоватьотношения(табл. 1.4) илогическиеоперации(табл. 1.5, 1.6). Отношения в логических выражениях используют для сравнения либо двух числовых, либо двух символьных выражений. Результат вычисления отношения имеет логический тип – это либо .true. – "истина", либо
.false.– "ложь".
Знаки отношений записываются между числовыми либо символьными операндами. Отношения вычисляются после вычисления их операндов.
Таблица1.4. ОперацииотношенияязыкаФортран
Отношения |
Фортран 90 |
Пример |
|
Меньше чем |
.LT. |
< |
a.LT.b |
Меньше или равно |
.LE. |
<= |
a.LE.b |
Равно |
.EQ. |
== |
k.EQ.m |
Не равно |
.NE. |
/= |
k.NE.m |
Больше или равно |
.GE. |
>= |
a.GE.b |
Больше чем |
.GT. |
> |
a.GT.b |
Таблица1.5. ЛогическиеоперацииязыкаФортран
|
|
|
Операция |
|
Обозначение |
Старшинство |
Пример |
|
||||||
|
|
Отрицание |
|
|
.NOT. |
1 |
|
.NOT.a |
|
|||||
|
|
Конъюнкция |
|
|
.AND. |
2 |
|
a.AND.b |
|
|||||
|
|
Дизъюнкция |
|
|
|
.OR. |
3 |
|
a.OR.b |
|
||||
|
|
Эквивалентность |
|
|
.EQV. |
4 |
|
a.EQV.b |
|
|||||
|
|
Неэквивалентность |
|
.NEQV. |
4 |
|
a.NEQV.b |
|
||||||
Таблица1.6. Таблицаистинностилогическихопераций |
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
x |
y |
x.and.y |
|
x.or.y |
|
.not.x |
x.xor.y |
x.eqv.y |
x.neqv.y |
|
||
|
|
И |
И |
И |
|
И |
|
Л |
Л |
И |
|
Л |
|
|
|
|
И |
Л |
Л |
|
И |
|
Л |
И |
Л |
|
И |
|
|
|
|
Л |
И |
Л |
|
И |
|
И |
И |
Л |
|
И |
|
|
|
|
Л |
Л |
Л |
|
Л |
|
И |
Л |
И |
|
Л |
|
Операция .NOT. является унарной и пишется перед операндом, остальные знаки логических операций всегда записываются между операндами. Две логические операции могут следовать в выражении непосредственно друг за другом, если второй операцией является операция отрицания. Например: a .and. .not. b.
13
Тема1. Алгоритмиегосвойства ...
Приоритетоперацийвлогическомвыражении:
1– вычислениязначенийфункций;
2– арифметические операции;
3– операцииотношения;
4– логическиеоперации.
Примеры
На математическом языке a < x < b = > x > a x < b.
На Фортране x>a.and.x<b.
Так, если a = 2, b = 4, то выражение истинно при x = 3 и ложно при x = 1 или x = 5.
На математическом языке –∞ < x < +∞ = > x > a x < b.
На Фортране x>a.or.x<b.
Так, если a = 2, b = 4, то выражение истинно при любом x.
На математическом языке х < a или x > b = > x > a x < b.
На Фортране x<a.or.x>b.
Так, если a = 2, b = 4, то выражение ложно при x = 3 и истинно при x = 1 или x = 5.
1.4. СтруктурапрограммыязыкаФортран.
Основныеоператорыпрограммыслинейнойструктурой
Программа на Фортране состоит из главной программы и возможного некоторого числа подпрограмм. Первым оператором главной программы является ее заголовок PROGRAM. За ним следует имя программы:
PROGRAM ИМЯ_ПРОГРАММЫ
14
1.4. Структура программы языка Фортран. Основные операторы ...
Имя программы обязательно начинается с буквы, затем могут идти буквы, цифрыисимвол"подчеркивания", например:
PROGRAM SUMMATION
PROGRAM QUADRATIC_EQUATION_SOLVER45
Максимальная длина любого имени в программах на Фортране – 31 символ. Заключительный оператор главной программы имеет следующийвид:
END PROGRAM ИМЯ_ПРОГРАММЫ
ИМЯ_ПРОГРАММЫ является необязательной частью оператора. После заголовка следуют описания переменных, констант, меток, подпрограмм и других объектов, используемых в программе. Эта ее часть называется разделом описаний (или неисполняемых операторов). После раздела описаний следует раздел исполняемых операто-
ров. Процесс создания проекта приведен в прил. Б.
При обработке информации программой выполняются три основныхблока:
1)ввод исходных данных;
2)обработка данных согласно алгоритму;
3)вывод результата из программы.
Пример:
Program itit
Integer :: a=10, b=20 End program init
Оператор Program задает имя программы. Оператор End обозначает окочание программы.
Вторая строка в программе означает, что переменные целого типа a и b содержат значения 10 и 20.
Пример. Программа сложения двух целых чисел:
Program sum Integer a,b,c A=100
B=20
C=a+b
End program sum
В программе описаны три переменные целого типа. Чтобы поместить в переменные определенные значения, используется оператор присваивания, который записывается как знак =. Его следует отличать
15
Тема1. Алгоритмиегосвойства ...
от математического знака "равно", который в Фортране используется как логический оператор для сравнения двух величин и обозначается = =. В данном случае a=100 означает, что переменной а присвоили значение 100. Таким образом, в переменных a и b будут храниться числа 100 и 20. Далее переменной с присваивается сумма значений переменных a и b, т. е. в с будет значение 120.
Для ввода данных в программу извне, а также для вывода результатов за пределы программы из ячеек памяти используются операторы ввода/вывода.
Оператор ввода – read (читать)
Integer a Read (*,*), a
При выполнении этого фрагмента программы на черном экране будет мигать курсор в ожидании ввода с клавиатуры целого числа. После ввода число будет записано в переменную a. При попытке ввода значения другого типа компилятор сообщит об ошибке.
Операторы вывода Print (печатать) и Write(писать)
служат для вывода на экран информации.
В приведенном ниже примере оба оператора выводят на экран приветствие Hello!. Заключение приветствия в одинарные кавычки показывает, что выводится значение символьного типа. Внутри кавычек могут быть любые символы, которые в точности будут выведены на экран:
Print*, 'Hello!'
Write(*,*),'Hello!'
Можно улучшить вывод, если воспользоваться средствами форматирования. Для этого вместо звездочки в операторе Print и вместо второй звездочки в операторе Write указывается спецификация формата вывода. Спецификация формата – это набор дескрипторов преобразования, заключенных в '( )'.
Основные дескрипторы:
А – вывод символов; $ – запрет перехода на следующую строку;
/ – переход на следующую строку; // – пропуск строки;
Nx – вывод n пробелов;
In – выделение n позиций для вывода целого числа;
16
1.4. Структура программы языка Фортран. Основные операторы ...
Fk.n – выделение k позиций для вывода вещественного числа, из которых n отводится на количество знаков после запятой;
An – выделение n позиций для вывода строки символов; Ka – вывод k строк;
L – вывод логического значения T (true – истина), F (false – ложь). Если при выводе числовой информации отвести меньшее количество символов, то будут выведены звездочки. Символьная информация в этом случае будет обрезана до указанного размера. В случае выделения большего места, чем необходимо, оставшееся место будет запол-
ненопробелами. Например:
Write(*,'(a3)'), 'Hello!'
На экране: Hello!
Write(*,'(a10)'), 'Hello!'
На экране (^ – обозначен пробел):
^^^^ Hello!
Write(*,'(L)'), 5>3
На экране:
T
Если спецификация формата часто повторяется, то ее рекомендуется записывать отдельно при помощи оператора format (формат). Ссылканаформатосуществляетсяприпомощичисловойметки, например:
Write(*,100), 'Hello!' 100 format(a10)
17
Тема 2. Базовая управляющая структура "ветвление".
ОператорыязыкаФортрандляпрограммнойреализации разветвляющегося вычислительного процесса. Оператор перехода
Вычислительный процесс называют разветвляющимся, если в зависимостиотвыполнениянекоторыхусловийонреализуетсяпоодному из нескольких, заранее заданных, направлений. Каждое отдельное направление называют ветвью вычислительного процесса.
ДляреализациипрограммсразветвленнойструктуройвязыкеФортран используются условный оператор if и оператор выбора case.
2.1. Оператор условного перехода if
Оператор условного перехода – это такой оператор передачи управления в программе, который позволяет перейти из одного места программы в другое, т. е. передать управление и изменить порядок выполнения операторов в программе. Передача управления осуществляется в результате выполнения условия (т. е. в зависимости от значения логического выражения).
а) Полная форма оператора условного перехода if
Такая конструкция if позволяет выбрать для выполнения один из двух блоков операторов. Под блоком в Фортране понимают один или последовательностьизнесколькихвыполняемыхоператороввнутрисоставного оператора. Как принято в Фортране, блоки оформляются построчно, будучи обрамлены служебными строками. Безусловная передача управления извне внутрь блока запрещена. Конструкция if может быть записана в следующей общей форме:
IF (логическое_выражение ЛВ) THEN
блок_THEN
ELSE
блок_ELSE
ENDIF
18
2.1. Оператор условного перехода if
Три части конструкции, т. е. строки IF(..) THEN, ELSE и ENDIF, записывают как отдельные строки текста без символов продолжения. Конструкция IF выполняется следующим образом:
•вычисляетсязначениелогическоговыражения, котороеможетбыть либо"истинным", либо"ложным";
•если значение "истина", то выполняется блок_THEN;
•если значение "ложь", то выполняется блок_ELSE;
•всегда выполняется только один из блоков конструкции.
На рис. 2.1 представлена схема алгоритма реализации полной формы условного оператора if.
Рис. 2.1. Схемаалгоритмаполной |
– |
ЛВ |
+ |
|
|
|
|
формы условного оператора |
Блок_ELSE |
|
Блок_THEN |
|
|
Рассмотрим данную конструкцию на примере программы, определяющей, отрицательное или положительное число было введено с клавиатуры, и отображающее соответственное сообщение на экран:
Program number
Integer k !проверяемое число
Write(*,'(a,&)'), 'Enter a number ' Read(*,*), k
If (k>0) then Write(*,*),'k>0'
Else Write(*,*),'k<0'
End if end
Результаты работы программы:
1)Enter mumber 100 K<0
2)Enter mumber -50 K<0
19
Тема2. Базоваяуправляющаяструктура"ветвление" ...
б) Неполная форма оператора условного перехода if
Когда не предусмотрены действия в блоке_ELSE, конструкцию IF можно записать упрощенно в одноблочной форме:
IF (логическое_выражение ЛВ) THEN
блок_THEN
ENDIF
Еслизначениелогическоговыражения"истина", блок_THEN выполняется, если "ложь" – пропускается.
Блок-схема такого варианта представлена на рис. 2.2.
– |
ЛВ |
+ |
|
|
Рис. 2.2. Схемаалгоритманеполной
формы условного оператора
Блок_THEN
Пример. Необходимо вывести на экран квадрат вводимого числа, но если он больше 100, то результат разделить на 2.
Program sqr
Integer number ! исходное число real number2 ! результат вычислений
Write(*,'(a,$)'),'Enter a number ' Read(*,*), number
Number2 = number* number If(number2 > 100) then
number2 = number2/2 Endif
Write(*,'a,f5.1'),'result ', number2
Результат работы программы на экране:
Enter a number 20 Result 200.0
20
2.1. Оператор условного перехода if
в) Простая форма оператора условного перехода if
Когда в блоке_THEN единственный простой оператор, а блок_ELSE отсутствует, то используется простой логический if, записываемый в одну строку. Например:
if (x < 0) y=ABS(x)
Такая форма IFназывается безблочной.
г) Вложенная конструкция оператора if
Любой из блоков конструкции if может, в свою очередь, содержатьвложеннуюконструкциюif. Еслиблоксодержиттакуюконструкцию, тоонадолжнаполностьюнаходитьсявнутриэтогоблока. Пример: одноблочный if использован в качестве блока_THEN охватывающей конструкцииif:
IF (…) THEN if(…) then
…
endif ELSE
…
ENDIF
Рассмотрим в качестве примера использования такой структуры (рис. 2.3) программу для решения задачи: какое число было введено с клавиатуры – отрицательное илиположительное?
Print*, 'Enter k' |
|
Начало |
|
|
Ввод х |
|
|
Read(*,*), k |
|
|
|
If (k<0) then |
– |
x<=–2 |
+ |
Print*, 'k<0' |
|
|
|
else |
– x>4 |
+ |
у=–2 |
If (k>0) then |
|
|
|
Print*, 'k>0' |
у=х |
у=4 |
|
else |
|
|
|
Print*, 'k=0' |
|
|
|
End if |
|
Вывод у |
|
End if |
|
|
|
|
|
|
|
|
|
Конец |
|
Рис. 2.3. Схемаалгоритмавложеннойконструкцииусловногооператора
21