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

Farionova_Fortran

.pdf
Скачиваний:
18
Добавлен:
15.02.2015
Размер:
2.71 Mб
Скачать

Тема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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]