Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obschy_kurs / Fortran / Metod_Lr3_Fortran.doc
Скачиваний:
53
Добавлен:
21.02.2016
Размер:
188.93 Кб
Скачать

Лабораторная работа № 3

Программирование задач разветвляющейся структуры.

Цель работы:

  1. Научиться разрабатывать схемы алгоритмов простейших вычислительных процессов с разветвлением.

  2. Изучить операторы условного перехода и выбора по ключу.

  3. Освоить приемы перехода от схемы алгоритма к программе.

Порядок выполнения работы

  1. Изучить базовые структуры: "ЕСЛИ" и "ОБХОД".

  2. Изучить правила разработки схем алгоритмов вычислительных процессов с разветвлением.

  3. Изучить операторы условного перехода и выбора по ключу.

  4. Изучить приемы перехода от схемы алгоритма к программе.

  5. Разработать математические описания, схемы алгоритмов и программы для задач, выданных преподавателем.

Краткие теоретические сведения.

  1. Алгоритм разветвляющейся структуры

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

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

Разветвляющийся вычислительный процесс основывается на двух базовых структурах: "ЕСЛИ" (рис.1, а) и ОБХОД" (рис.1, б).

а)

б)

Рис. 1. Базовые структуры

а) "ЕСЛИ"; б) "ОБХОД"

Проверяемое условие задается в блоке "решение". Результатом проверки условия, может быть один из двух ответов: "Да" – условие выполняется; "Нет" – условие не выполняется.

Структура "ЕСЛИ" применяется в тех случаях, когда в зависимости от заданного условия необходимо выполнить действия либо одной, либо другой ветви. Т.е. выполнение действий ветви "Да" исключает выполнение действий ветви "Нет" и наоборот.

Структура "ОБХОД" является частным случаем структуры "ЕСЛИ", когда одна из ветвей не содержит действий. На приведенном рис.2,б действий не содержит ветвь "Нет".

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

1. блок "решение" всегда имеет одну входящую линию потока и, как минимум, две исходящие;

2. в схеме алгоритма должны быть учтены все возможные направления вычислений;

3. в зависимости от выполнения заданного условия вычисление осуществляется по одной из ветвей, исключая при этом, вычисления по другим ветвям;

4. действия в каждой из ветвей "Да" или "Нет" могут включать в себя любые другие структуры, в том числе и разветвляющиеся;

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

  1. Условие

Условие – это логическое выражение, результатом которого может быть только одно из двух значений: ИСТИНА (если условие выполнено) или ЛОЖЬ (если условие не выполнено). В качестве результата ИСТИНА принимается единица, а результата ЛОЖЬ – нуль.

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

Условия могут быть простыми и сложными. Простое условие записывается с помощью операторов отношений в виде:

<Операнд1> <Операция отношения > <Операнд2>,

где

<Операнд1> , <Операнд2> - арифметические или символьные выражения;

<Операция отношения > - одна из шести операций отношения.

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

Операции отношения упорядочены по приоритету выполнения таким образом: (<, <=, >, >=), (==, /=).

Операции отношения, заключенные в скобки имеют одинаковый приоритет. Действия отношений с одинаковым приоритетом выполняются слева направо.

Таблица 1. Операции отношения

Операция отношения

Запись на Фортране

Пример записи простого условия

Результат

меньше

.LT. или <

A < B

ИСТИНА, если А меньше В

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

.LE. или <=

A <= B

ИСТИНА, если А меньше или равно В

больше

.GT. или >

A > B

ИСТИНА, если А больше В

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

.GE. или >=

A >= B

ИСТИНА, если А больше или равно В

равно

.EQ. или ==

A == B

ИСТИНА, если А равно В

не равно

.NE. или /=

A /= B

ИСТИНА, если А не равно В

Внимание!

  1. Операция логического равенства, если не используется форма .EQ. записывается двумя знаками равно.

  2. Пробелы в записи операций не допускаются. Записи вида:

< =, = =, .LT ., . GE . ошибочны.

Сложные условия строятся из простых с помощью логических операторов. Запись сложного условия имеет следующий вид:

<Условие1> <Логический оператор> < Условие2>,

где

< Условие1> , < Условие2> - простые условия,

< Логический оператор > - один из логических операторов: логическое "НЕ", логическое "И", логическое "ИЛИ", эквивалентность и неэквивалентность .

Логический оператор ”НЕ” работает с одним операндом, а остальные - с двумя.

Основные логические операторы в порядке убывания их приоритета и таблица истинности результатов приведены в таблице 2.

Внимание! Если в логическом выражении присутствуют арифметические действия, операции отношения и логические операторы, то приоритет их выполнения следующий:

1 – арифметические действия;

2 – операции отношения;

3 – логические операции ,

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

Таблица 2. Логические операторы в порядке убывания приоритета и таблица истинности результатов

Логический оператор

Запись на Фортране

Пример использования

Таблица результатов

логическое отрицание, ”НЕ”

.NOT.

.NOT. A

А

.NOT. A

ИСТИНА

ЛОЖЬ

ЛОЖЬ

ИСТИНА

логическое умножение, ”И”

.AND.

A .AND. В

А

В

ИСТИНА

ЛОЖЬ

ИСТИНА

ИСТИНА

ЛОЖЬ

ЛОЖЬ

ЛОЖЬ

ЛОЖЬ

логическое сложение, ”ИЛИ”

.OR.

A .OR. B

А

В

ИСТИНА

ЛОЖЬ

ИСТИНА

ИСТИНА

ИСТИНА

ЛОЖЬ

ИСТИНА

ЛОЖЬ

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

Например, a*d + c <= 25 .OR. k**2 < 50

При а=2, d=3, c=5, k=10 это логическое выражение принимает значение ИСТИНА.

Приведем порядок выполнения операций в заданном выражении:

а) вычисление значений арифметических выражений

a*d + c (= 11) и k**2 (=100)

б) вычисление значений истинности отношений

11 <= 25 (=ИСТИНА) и 100 < 50 (=ЛОЖЬ)

в) вычисление истинности выражения

ИСТИНА .OR. ЛОЖЬ.

Результатом последнего логического выражения будет значение ИСТИНА.

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

Пример.

implicit none

logical :: a=.true., b=.false., c, d, e, f

real :: x=2.5, y=1.5

c=.NOT. a

d=a .OR. b

e= x>0 .AND. y == x

f=x /= y

В результате присвоений логические переменные получат значения:

с – ЛОЖЬ;

d – ИСТИНА;

e – ЛОЖЬ;

f – ИСТИНА.

Соседние файлы в папке Fortran