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

Лекция 4. Программирование разветвлений.

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

Очень часто последовательность шагов алгоритма различна для разных исходных данных, возможных в решаемой задаче. Такие алгоритмы называются разветвляющимися. В обычном смысле разветвление предполагает наличие альтернатив (вариантов или ветвей). При выполнении алгоритма происходит выбор одной или нескольких последовательностей шагов алгоритма – ветвей при выполнении некоторого условия. Чаще всего ветвление предусматривает два варианта. В блок-схемах эта ситуация описывается следующим образом:

а) разделение алгоритма на две ветви, каждая из которых предусматривает выполнение некоторых шагов

ЕСЛИ…………ТО………..ИНАЧЕ……

б) разветвление, при котором в одной ветви не предусмотрено никаких шагов (обход)

ЕСЛИ………ТО………

Да

(ТО)

Да

(ТО)

Проверка условия, записанного после слова ЕСЛИ, предполагает два варианта ответа:

ДА (условие выполнено), НЕТ (условие не выполнено).

В зависимости от варианта ответа и выбирается вариант выполнения алгоритма, или, как говорят, выполняется ветвь.

Пример 1. Составить алгоритм нахождения действительных корней квадратного уравнения общего вида ax2+bx+c=0, a≠0, b≠0. В случае, если нет действительных корней, написать «нет действительных корней».

Блок-схема алгоритма

Условные операторы

Для программирования разветвляющейся структуры на Фортране предусмотрено несколько видов условных операторов: условный логический оператор, условный блочный оператор, условный структурный оператор. В записи алгоритма эти операторы заменяют шаг ЕСЛИ в блок-схемах. В этих операторах условие записывается в виде логического выражения, которое может принимать лишь два значения: .TRUE. (истина) или .FALSE. (ложь).

Определение. Логическое выражение (ЛВ) представляет собой неравенство (или отношение), т.е. сравнение переменных или арифметических выражений. Напомним, как логические операции записываются на Фортране.

Операции сравнения (отношения):

Название операции

Символ операции

(Фортран-90 и Фортран -77)

Больше

> и .GT.

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

>= и .GE.

Не равно

/= и .NE.

Меньше

< и .LT.

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

<= и .LE.

Равно

== и .EQ.

Логические операции:

Название операции

Символ операции

Логическое отрицание НЕ

.NOT.

Логическое пересечение И

.AND.

Логическое объединение ИЛИ

.OR.

Логическая эквивалентность

.EQV.

Логическая неэквивалентность

.NEQV.

Примеры логических выражений:

Обычная запись

Фортран

Значение ЛВ

abs(sin(x)) .LE. 1

истина (для любых x)

N кратно 5?

N / 5 * 5 = = N

истина, если N делится на 5 и ложь, если не делится на 5

M **3 / = 64

ложь для M = 4, истина для всех других случаев

(x >= -1) .AND. (x < 2)

Истина, если x принадлежит промежутку

Условный логический оператор

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

IF (ЛВ) оператор S,

где S – любой выполняемый оператор, кроме оператора цикла и другого условного оператора.

Порядок выполнения условного логического оператора:

  1. Вычисляется значение логического выражения (ЛВ), т.е. проверяется истинно оно или ложно.

  2. Если ЛВ истинно, то выполняется оператор S. После него выполняется оператор, следующий за условным оператором.

  3. Если ЛВ ложно, то оператор S не выполняется и управление передается оператору, следующему за условным логическим оператором.

Пример 2. Найти максимальное из двух произвольных не равных друг другу чисел.

Код программы на Фортране:

PRINT *, “Vvedite dva chisla”

READ *, A, B

IF (A = = B) PRINT *, “Chisla ravny: A = B !”

IF (A > B) max=A

IF (A < B) max=B

PRINT *, ‘max=’, max

END

Рассмотрим выполнение программы «по шагам», т.е. проследим выполнение каждого оператора компьютером. Известно, что компьютер выполняет все команды (строки программы) последовательно с первой строки до последней. Сначала компьютер выполнит оператор первой строки, т.е. напечатает на экране текст: Vvedite dva chisla, что означает подсказку для пользователя ввести два числа с клавиатуры. Затем будет выполняться оператор, стоящий во второй строке программы, т.е. пользователь должен ввести два числа: для определенности возьмем, например, A=3.5 и B=7.

Далее выполняется 3 строка, т.е. происходит сравнение двух чисел A и B, и если они равны, то на экране пользователь увидит текст: Chisla ravny: A = B !. Это означает, что вы сделали ошибку и ввели два одинаковых числа, что не соответствует условию задачи. Но так как наши значения переменных A и B не равны, условный логический оператор передаст управление на следующую строку, и, значит, оператор PRINT *, “ A = B !” не будет выполняться.

В 4 строке стоит условный логический оператор, и, в соответствии с порядком его выполнения, если логическое выражение A > B - истина, а в данном случае это не так, следовательно, управление будет передано на следующую строку. Переходим к 5 строке, опять проверяем работу следующего условного логического оператора. Если условие A<B – истина, что соответствует нашему случаю, следовательно, выполняется стоящий за логическим выражением оператор, т.е. переменной max присваивается значение переменной B, в результате переменная max принимает значение равное 7. В следующей строке записан оператор вывода на экран, это значит, что на экране мы увидим текст: max= 7. Программа заканчивается оператором конца программы END.

Пример 3. Найти минимальное из трех произвольных вещественных чисел x1, x2, x3, не равных между собой.

Заметим, что такой алгоритм часто используется в программировании. Опишем его. Допустим, что значение переменной x1 является минимальным. Сохраним это значение в переменной Xmin. Тогда, сравнивая Xmin с другими переменными x2 и x3, в случае, если оказывается, что Xmin больше x2, то переменной Xmin присваиваем значение переменной x2. Затем также сравниваем переменную x3 и Xmin. Если оказывается, что Xmin больше x3, то переменной Xmin присваиваем значение переменной x3.

Реализуем этот алгоритм. Код программы на Фортране:

PROGRAM MINIMUM

print *, “Vvod x1, x2, x3”

read *, x1, x2, x3

Xmin = x1

if (Xmin > x2) Xmin = x2

if (Xmin > x3) Xmin = x3

print *, “Xmin =”, Xmin

END

Попробуйте самостоятельно изменить код программ в примерах 2 и 3, если в условиях задач надо найти минимум в примере 2 и максимум – в примере 3.

Заметим, что в примере 3 программа написана с использованием строчных букв. Вспомните, что в Фортране можно использовать прописные (большие) и строчные (маленькие) буквы латинского алфавита, при этом не делается разницы между ними, т.е. буква B и b воспринимается компилятором Фортрана как одна и та же буква.

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

Соседние файлы в папке Лекции_фортран_текст