Алгоритмы с ветвлением примеры в бейсике. Алгоритмическая структура ветвления (Visual Basic). Ветвление в алгоритмах и программах

Алгоритмы с ветвлением примеры в бейсике. Алгоритмическая структура ветвления (Visual Basic). Ветвление в алгоритмах и программах
Алгоритмы с ветвлением примеры в бейсике. Алгоритмическая структура ветвления (Visual Basic). Ветвление в алгоритмах и программах

В этом параграфе мы покажем, как оформляются на языке Бейсик разветвляющиеся программы. Простейшей командой, изменяющей естественный порядок выполнения программы, является команда GOTO (GO TO - "перейти к..."). Эта команда имеет вид

где N - номер строки программы. По этой команде ЭВМ переходит к выполнению команды с номером N.

Вы знакомы с двумя способами записи ветвлений - неполной и полной. Ветвление в неполной форме записывалось так:

Если Q, то: Р Конец ветвления

(здесь Q - условие, а Р - последовательность команд, которую надо выполнять в случае, когда условие верно).

Можно по-разному перевести на язык Бейсик эту форму записи. Если Р состоит из одного действия, то перевод такой:

IF Q THEN P

(слово IF означает "если", а слово THEN - "то"). Например:

10 IF X>0 THEN Y = LOG (X) 20 ...

Если значение переменной х>0, то ЭВМ вычислит ln x и присвоит результат переменной у, а затем будет выполняться команда с номером 20. Если же значение x не превосходит нуля, то сразу будет выполняться команда с номером 20.

Допустим теперь, что последовательность Р состоит из нескольких действий. Тогда сокращенная форма ветвления будет записываться сложнее. Пусть, например, в Р содержится 6 действий P 1 , ..., Р 6 , ветвление должно начинаться со 120-й строки, а следующая после ветвления команда имеет номер 150. Это означает, что в случае невыполнения условия Q надо перейти к команде 150. Поэтому запись будет такой:

120 IF NOT (Q) THEN GOTO 150

. . . . . . . . . .

Здесь NOT (Q) означает отрицание условия Q (NOT - "не"). Например, NOT (X = Y, a NOT (X = Y) означает XY.

Отметим еще, что в строках вида

IF ... THEN GOTO К

где К - номер строки, одно из слов, GOTO или THEN, можно не писать, т. е. три команды

IF ... THEN К IF ... GOTO К IF ... THEN GOTO К

означают одно и то же.

Например, алгоритм нахождения максимума из двух чисел:

Запросить А, В. Присвоить М значение А. Если М

На языке Бейсик можно записать так:

10 INPUT А,В 20 М = А 30 IF M

Тот же алгоритм можно перевести на язык Бейсик и иначе:

10 INPUT А,В 20 М = А 30 IF N0T(M

Покажем теперь, как записать на языке Бейсик команду ветвления в полной форме:

Если Q, то: Р Иначе: Т Конец ветвления.

Аналогично предыдущему, если Р и Т состоят из одного действия, то удобно переводить так:

IF Q THEN P ELSE T

(ELSE - иначе).

Если же Р или Т состоят из нескольких действий, то удобнее переводить следующим образом (для примера: пусть Р состоит из трех, Т - из четырех команд, ветвление начинается с 530-й строки, следующая за ветвлением строка имеет номер 600):

530 IF Q THEN 536 531 T 1 532 Т 2 533 Т 3 534 Т 4 535 GOTO 600 536 P 1 537 Р 2 538 Р 3 600 ...

Проверьте, что, исполняя этот фрагмент, ЭВМ выполнит команды P 1 , Р 2 , Р 3 , если условие Q выполняется, и команды Т 1 , T 2 , Т 3 , Т 4 , если Q не имеет места. А затем, после выполнения соответствующей серии команд, ЭВМ перейдет к выполнению команды, записанной в строке 600.

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

10 INPUT X 20 IF Х>=2 THEN Y=SQR(X) ELSE Y=ABS(X) 30 PRINT"Y="Y 40 END

Можно было эту программу записать и так:

10 INPUT X 20 IF X>=2 THEN 50 30 Y=ABS(X) 40 GOTO 60 50 Y=SQR(X) 60 END

Составим теперь математическую модель и программу решения следующей "артиллерийской" задачи.

Задача. На заданном расстоянии от пушки находится стена. Известен угол наклона пушки и начальная скорость снаряда. Попадет ли снаряд в стену?

Сначала, как обычно, выскажем упрощающие предположения. Снаряд считаем материальной точкой, сопротивлением воздуха и размерами пушки пренебрегаем. Разумеется, мы считаем также, что выполняются законы Ньютона. Из условия задачи видно, каковы в ней исходные данные: это угол а, начальная скорость v, расстояние до стены S и высота стены h. Результатом является одно из сообщений "попал" или "не попал". Начальные данные подчиняются естественным ограничениям: 00, h>0, 0

Значит, нам надо вывести формулу для определения L. Как вы знаете из курса физики, перемещения снаряда по горизонтали и вертикали за время t равны, соответственно:

x = (v cos α) t; y = (v sin α) t-gt 2 /2,

где g - ускорение свободного падения (9,8 м/с 2). Определим, сколько времени понадобится снаряду, чтобы преодолеть расстояние S:

t = S/(v cos α).

Подставив это значение t в выражение для у, получим значение L:


Конечно, значение L, вычисленное по этой формуле, может оказаться и отрицательным. Это означает, что снаряд до стены не долетит. Если же L окажется больше h, то снаряд перелетит через стену. Вот математическая модель и построена.

Составим алгоритм для ВЫЧИСЛИТЕЛЯ:

Сообщить "Введите начальную скорость снаряда, расстояние до стены, высоту стены". Запросить v, S, h. Сообщить "Введите угол наклона ствола пушки". Запросить А. Если Vν≤0, то: Сообщить "Скорость должна быть положительной". Стоп. Конец ветвления. Если vν≥1000, то: Сообщить "Скорость слишком велика". Стоп. Конец ветвления. Если S≥0, то: Сообщить "Расстояние должно быть положительным". Стоп. Конец ветвления. Если h≤0, то: Сообщить "Высота стены должна быть положительной". Стоп. Конец ветвления. Если A≤0, то: Сообщить "Пушка не должна стрелять в землю". Стоп. Конец ветвления. Если А≥3,14/2, то: Сообщить "Пушка направлена не в сторону стены". Стоп. Конец ветвления. Присвоить L значение Если L>h, то: Сообщить "Снаряд не попал в стену...". Стоп. Конец ветвления. Если L

А теперь переведите этот алгоритм на язык Бейсик (мы и так сделали большую часть работы).

Вопросы

1. По какой команде можно заставить ЭВМ, не проверяя никаких условий, изменить порядок выполнения действий?

2. Как в языке Бейсик оформляется ветвление:

а) в неполной форме;

б) в полной форме?

3. Для чего нужны первые 28 строк в алгоритме решения "артиллерийской" задачи?

Задания для самостоятельного выполнения

1. Переведите на Бейсик алгоритмы решения задач 5-7 из § 8 и 1-7 из § 9.

2. Найдите и исправьте ошибки в следующей программе нахождения квадратного корня из числа:

10 INPUT X 20 IF X> = 0 THEN 30 30 PRINT SQR(X) 40 GOTO 60 50 PRINT. "Корень вычислить невозможно" 60 END

3. Злоумышленник стер команду 100 в следующей программе нахождения корней квадратного уравнения:

10 INPUT А,Б,С 20 IF А 0 THEN 50 30 PRINT "Это уравнение не квадратное" 40 STOP 50 D=B^2 - 4∗A∗C 60 IF D

4. Составьте математическую модель, алгоритм и программу на Бейсике решения следующей задачи.

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

Оператор ветвления

Оператор ветвления (условного перехода) позволяет выполнять определенные команды программы в зависимости от логических условий. В языке Visual Basic оператор ветвления может использоваться в двух видах: строчном и блочном.

интернет-биржа студенческих работ">

Пример 1

Например, If a > b Then max = a Else max = b.

При необходимости выполнения нескольких операторов они разделяются двоеточиями.

Пример 2

Например, If a > 0 Then b = a + 1: c = a\2.

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

Блочный синтаксис:

Условие – логическое выражение, которое может принимать значение True (истина), False (ложь) или Null , которое приравнивается к False . При выполнении блочного оператора ветвления проверяется условие, и, если оно истинно, выполняется оператор, следующий за Then . Если условие не истинно, проверяется условие2 , идущее за ElseIf . Когда истинное значение найдено, выполняется оператор_при_истинномусловии2, который следует за Then , после чего программа выходит за EndIf (т.е. последующие ElseIf , если они есть, не проверяются). Если истинные условия для ElseIf не найдены, выполняется операторпри_ложном_условии.

Рисунок 3. Пример блочного синтаксиса. Автор24 - интернет-биржа студенческих работ

Оператор выбора

Оператор выбора Case выполняет определенные операторы в зависимости от множества значений проверяемого выражения или переменной. Синтаксис оператора выбора:

Рисунок 4. Синтаксис оператора выбора. Автор24 - интернет-биржа студенческих работ

Значение – переменная или выражение, которое проверяется по одному или нескольким условиям. Список значений задается через запятую, диапазон значений задается с помощью служебного слова To (например, 5 To 9).

Пример 3

По номеру месяца в году вывести сообщение о том, к какому времени года относится указанный месяц.

Занятие 3

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

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

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

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

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

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

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

IF <УСЛОВИЕ> <ОПЕРАТОР 1>[:<ОПЕРАТОР 2>:…:<ОПЕРАТОР N>]

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

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

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

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

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

5<7 - ИСТИНА;

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

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

IF <УСЛОВИЕ> THEN <ОПЕРАТОРЫ 1>ELSE<ОПЕРАТОРЫ 2>
Если условие справедливо (ИСТИНА), то выполняются <операторы 1> (стоящие между THEN и ELSE ), а <операторы 2> (стоящие после ELSE ) будут пропущены.
Если условие не справедливо (ЛОЖЬ), то <операторы 1> игнорируются и выполняются <операторы 2>.

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

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

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

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

REM сравнить число со каким-то значением
INPUT "Введите а", а
IF a=7 THEN PRINT "Числа равны"
END

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

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


INPUT "Введите а", а
INPUT "Введите b", b
IF a>b THEN PRINT "Большее число: ", a:с=2*a
ELSE PRINT "Большее число: ", b:с=2*b
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
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

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

AND и

OR или

NOT не

Вычислить

Задача 1 .

Определить является треугольник со сторонами A , B , C равнобедренным.

INPUT “Введите размеры сторон треугольника А, В, С “; A ,B ,C

Основные операторы языка VBA

Комментарии (0)

3.1. Правила записи операторов

При записи операторов необходимо придерживаться следующих правил:

Каждый новый оператор записывается с новой строки.

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

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

3.2. Оператор присваивания

Оператор присваивания используется, если какой-то переменной нужно присвоить новое значение. Он имеет следующий синтаксис:

ИМЯ_ПЕРЕМЕННОЙ = ВЫРАЖЕНИЕ

Сначала вычисляется выражение в правой части, а затем результат присваивается переменной, стоящей в левой части.

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

На VВА это выражение можно записать в виде следующего оператора:

Y = a^(1/3)+(a^2+Exp(-b))/(Sin(a)^2-Log(b))

3 .3. Операторы ввода-вывода

3 .3.1. Оператор и функция MsgBox

Оператор MsgBox осуществляет вывод информации в диалоговом окне и устанавливает режим ожидания нажатия кнопки пользователем.

Он имеет следующий синтаксис:

MsgBox Сообщение[,Кнопки][, Заголовок]

Аргументы:

Сообщение - обязательный аргумент, задающий в окне выводимое информационное сообщение. Может состоять из нескольких текстовых строк, объединенных знаком & . Использование в этом аргументе Chr(13) приводит к переходу на новую строку при выводе информации.

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

Заголовок - задает заголовок окна.

Функция MsgBox возвращает значение типа Integer, указывающее, какая кнопка была нажата в диалоговом окне.

Таблица 3.1. Допустимые значения переменной кнопки

Отображение

Аргумент

Кнопка ОК

Кнопки ОК и Отмена

Кнопки Да и Нет

Кнопки Да, Нет и Отмена

Кнопки Прекратить, Повторить и Игнорировать

VbAbortRetryIgnore

Кнопки Повторить и Отмена.

Информационный знак

Знак вопроса

Знак восклицания

Например . Вывести сообщение о текущей дате.

MsgBox "Сегодня на календаре" & Date , "Внимание"

В результате будет выведено следующее окно (рис.3.1).

После щелчка по кнопке ОК окно сообщения закроется, и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом MsgBox.

3.3.2. Функция InputBox

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

Имя_Переменной = InputBox(Сообщение[, Заголовок ] )

Аргументы:

Сообщение - обязательный аргумент. Задает в окне информационное сообщение, обычно поясняющее смысл вводимой величины

Заголовок - задает заголовок окна.

Например , Ввести значение переменной N с клавиатуры, предусмотрев значение по умолчанию равное 10.

Для этого можно использовать следующий оператор:

N = InputBox("Введите N", "Ввод исходных данных",10)

В результате будет выведено следующее окно для ввода значения переменной N (рис.3.2).

Если значение по умолчанию подходит пользователю, то после щелчка кнопки ОК окно ввода закроется, переменной N присвоится значение 10 и выполнение программы возобновится с оператора, стоящего непосредственно за вызовом InputBox .

Если же значение по умолчанию не подходит пользователю, то перед щелчком по кнопке ОК необходимо ввести нужное значение переменной N.

3 .4. Условный оператор IF

Для реализации разветвляющегося вычислительного процесса в VBA используется оператор If…Then…Else, который представляет собой простейшую форму проверки условий. Он имеет следующий синтаксис:

If УСЛОВИЕ Then ОПЕРАТОР_1 E lse ОПЕРАТОР_2

ОПЕРАТОР_1 выполняется, если УСЛОВИЕ истинно, в противном случае выполняется ОПЕРАТОР_2 . При этом оператор If…Then…Else записывается в одну строку.

УСЛОВИЕ - это выражение логического типа. Результат выражения всегда имеет булевский тип. Выражение может быть простым и сложным. При записи простых условий могут использоваться все возможные операции отношения, указанные в табл. 3.2.

Таблица 3 .2. Логические отношения

Операция

Название

Выражение

Результат

True, если А равно В

True, если А не равно В

True, если А,больше В

True, если А меньше В

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

True, если А больше или равно В

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

True, если А меньше или равно В

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

Таблица 3 .3. Логические операции

Название

Выражение

Результат

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

Логическое И

Логическое ИЛИ

В условном операторе допустимо использование блока операторов вместо любого из операторов. В этом случае условный оператор имеет вид:

If УСЛОВИЕ Then

БЛОК_ОПЕРАТОРОВ_1

БЛОК_ОПЕРАТОРОВ_2

End I f

В условном операторе может проверяться несколько условий. В этом случае условный оператор имеет вид:

If УСЛОВИЕ_1 Then

БЛОК_ОПЕРАТОРОВ_1

ElseIf УСЛОВИЕ_2 Then

БЛОК_ОПЕРАТОРОВ_2

Else

End If

Пример 1 . Написать часть программы для алгоритма на рис. 3.3.

Пример 2. Написать часть программы для алгоритма на рис. 3.4.

3.5. Оператор выбора Select Case

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

Select Case ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ

Case ЗНАЧЕНИЯ_1

ОПЕРАТОРЫ_1

Case ЗНАЧЕНИЯ _ 2

ОПЕРАТОРЫ _ 2

. . .

Case ЗНАЧЕНИЯ_N

ОПЕРАТОРЫ _N

[ Case Else

ИНАЧЕ _ ОПЕРАТОРЫ]

End Select

ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ может иметь любой скалярный тип, кроме вещественного. ЗНАЧЕНИЯ состоят из произвольного количества значений или диапазонов, отделенных друг от друга запятыми.

Тип ЗНАЧЕНИЙ должен совпадать с типом ПРОВЕРЯЕМОГО_ВЫРАЖЕНИЯ .

Сначала вычисляется ПРОВЕРЯЕМОЕ_ВЫРАЖЕНИЕ . Если его значение совпадает с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ОПЕРАТОРЫ_I End Select . Если его значение не совпадает ни с одним из значений ЗНАЧЕНИЯ_I , то выполнятся ИНАЧЕ_ОПЕРАТОРЫ и управление передается оператору, стоящему после End Select

Например. Написать часть программы для алгоритма на рис. 3.5, определяющего значение переменной S в зависимости от значения переменной n.

3.6. Операторы цикла

Для реализации циклического вычислительного процесса, т. е. многократного выполнения одного или нескольких операторов, служит оператор цикла For…Next , который имеет следующий синтаксис:

For СЧЕТЧИК=НАЧ_ЗНАЧЕНИЕ Т o КОН_ЗНАЧЕНИЕ Step ШАГ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next СЧЕТЧИК

Цикл For…Next перебирает значения переменной СЧЕТЧИК , которая является параметром цикла, от начального до конечного значения с указанным шагом изменения. При этом обеспечивается выполнение блока операторов тела цикла при каждом новом значении счетчика. Если Step ШАГ в конструкции отсутствует, то по умолчанию считается, что шаг равен 1. По оператору Exit For можно выйти из оператора цикла до того, как СЧЕТЧИК достигнет последнего значения.*

Для перебора объектов из группы подобных объектов, например, ячеек из диапазона или элементов массива, удобно использовать оператор цикла For… Each…Next .

For Each Элемент In Группа

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Next Элемент

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

циклы с предусловием - Do While Loop ,

Do Until Loop ;

циклы с постусловием - Do Loop While ,

Do Loop Until .

Ниже приведен синтаксис этих операторов цикла:

" Цикл с предусловием Do While Loop

Do While УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с предусловием Do Until Loop

Do Until УСЛОВИЕ

БЛОК_ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

" Цикл с постусловием Do Loop While

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop While УСЛОВИЕ

" Цикл с постусловием Do Loop Until

БЛОК _ ОПЕРАТОРОВ

БЛОК_ОПЕРАТОРОВ

Loop Until УСЛОВИЕ

Оператор Do W hile…Loop обеспечивает многократное повторение блока операторов до тех пор, пока УСЛОВИЕ соблюдается, а оператор



Другие новости