Ветвление в алгоритмах и программах.




Разветвляющий алгоритм – это алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая последовательность действий.

Во многих случаях требуется, чтобы при одних условиях выполнялась одна последовательность действий, а при других - другая.

 

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

 

Рассмотрим запись условного оператора на языке Basic.

Простая форма оператора выглядит следующим образом:

IF <УСЛОВИЕ> THEN <ОПЕРАТОР> или

IF <УСЛОВИЕ>

<ОПЕРАТОР 1>

<ОПЕРАТОР 2>

<ОПЕРАТОР N>

END IF

Если условие справедливо, то программа выполняет тот оператор, который стоит после ключевого слова THEN (или серию операторов от ключевого слова THEN до END IF), и дальше руководствуется обычным порядком действий. Если уловие не справедливо, то оператор, стоящий после THEN (или серия операторов от THEN до END IF) не выполняется, и программа сразу переходит к обычному порядку действий.

Конструкция IF...THEN позволяет в зависимости от справедливости условия либо выполнить оператор, либо пропустить этот оператор.

Конструкция IF...THEN...END IF позволяет в зависимости от справедливости условия либо выполнить группу операторов, либо пропустить эту группу операторов.

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

= равно

<> не равно

> больше

< меньше

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

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

Справа и слева от знака сравнения должны стоять величины, относящиеся к одному типу. В результате сравнения получается логическая величина, имеющее значение ИСТИНА (TRUE) или ЛОЖЬ (FALSE).

Пример:

5<7 - ИСТИНА;

8=12 -ЛОЖЬ (проверяем равно ли 8 12, именно проверяем, а не утверждаем, что 8=12);

Предыдущие конструкции позволяли обойти или выполнить серию оператор в зависимости от справедливости условия. Это еще не было ветвлением. Чтобы вычисления могли разветвляться по нескольким направлениям, служит конструкция IF...THEN...ELSE...END IF.

IF <УСЛОВИЕ> THEN

<ОПЕРАТОРЫ1>

ELSE

<ОПЕРАТОРЫ2>

END IF

Если условие справедливо (ИСТИНА), то выполняются <операторы 1> (стоящие между THEN и ELSE), а <операторы 2> (стоящие между ELSE и END IF) будут пропущены.

Если условие не справедливо (ЛОЖЬ), то <операторы 1> игнорируются и выполняются <операторы 2>.

IF - если, THEN - тогда, ELSE - иначе.

Если в комнате темно, тогда надо включить свет.

Если пойдет дождь, тогда надо взять зонтик,

иначе, зонтик не брать.

Пример: Проверить, равно ли введенное число некоторому значению, и в случае равенства выдать на экран сообщение о равенстве чисел.

REM сравнить число со каким-то значением

INPUT "Введите а", а

IF a=7 THEN PRINT "Числа равны"

END

После запуска программы проверяется равно ли введенное значение семи или нет. Если равно, то на экран выводится сообщение 'Числа равны'.

Пример: Определить большее из двух чисел, вывести его на экран, затем - увеличить его в двое и вывести результат на экран.

REM определить большее из двух чисел...

INPUT "Введите а", а

INPUT "Введите b", b

IF a>b THEN

PRINT "Большее число: ", a

с=2*a

ELSE

PRINT "Большее число: ", b

с=2*b

END IF

PRINT "результат: ", c

END

Сначала программа запрашивает оба числа, затем проверяет условие a>b. Если условие верно, то на экран выводится число a, затем это число удваивается. Иначе на на экран выводится число b, затем число b удваивается. В завершении на экран выводится удвоенное значение большего числа.

Обратите внимание: программа имеет один недостаток - не учитывается тот случай, когда введенные числа равны. Исправим это, использовав вложение одного условия в другое.

REM определить большее из двух чисел...

INPUT "Введите а", а

INPUT "Введите b", b

IF a=b TNEN

PRINT "Числа равны"

с=2*a

ELSE

IF a>b THEN

PRINT "Большее число: ", a

с=2*a

ELSE

PRINT "Большее число: ", b

с=2*b

END IF

END IF

PRINT "результат: ", c

END

В этой программе два условных оператора, первым проверяется условие равенства чисел и, в случае его выполнения, будет выдано сообщение о равенстве чисел, если числа не равны, то проверяется второе условие...

Пример: Решение квадратного уравнения.

Решение квадратного уравнения зависит от значения дискриминанта.

REM Решение квадратного уравнения

INPUT "Введите коэффициент a: ", а

INPUT "Введите коэффициент b: ", b

INPUT "Введите коэффициент c: ", c

d=b*b-4*a*c

IF d<0 THEN

PRINT "Корней нет"

ELSE

IF d=0 THEN

x=-b/(2*a)

PRINT "корень уравнения: ", x

ELSE

x1=(-b-SQR(d))/(2*a)

x2=(-b+SQR(d))/(2*a)

PRINT "корни уравнения: ", x1, x2

END IF

END IF

END

В субботу вечером вы смотрите телевизор. Время от времени поглядываете на часы и если время меньше полуночи, то продолжаете смотреть телевизор, если это не так, то вы прекращаете просмотр телепередач.

 

Циклы такого вида называют - циклы с предусловием.

На языке Basic они записываются следующим образом:

DO WHILE условие

Тело цикла

LOOP

В этом цикле проверяется условие и если оно выполняется (ИСТИНА), то выполняется тело цикла до ключевого слова LOOP, затем условие проверяется снова... и так до тех пор пока условие истино.

DO UNTIL условие

Тело цикла

LOOP

Этот цикл отличается от предыдущего только тем, что он выполняется до тех пор пока условие не истинно (т.е. совсем наоборот).

Пример: Вывести все натуральные числа меньше данного.

REM Вывод всех чисел меньше данного

a=0

chislo=10

DO WHILE a<chislo

PRINT a

a=a+1

LOOP

END

Стоит обратить внимание на то, что цикл может быть не выполнен ни разу (если условие первоначально не истинно, например, a=5, а chislo=4). И наоборот, если условие будет истинно при любых значениях переменный, то цикл будет выполнятся бесконечное число раз (произойдет зацикливание).

Пример цикла, который будет выполнятся бесконечное число раз:

REM зацикливание

DO WHILE a=a

PRINT "Это сообщение будет выводится на экран постоянно"

LOOP

PRINT "А это сообщение вы не увидите никогда"

END

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-19 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: