РАЗДЕЛ 1. ТЕОРЕТИЧЕСКИЙ РАЗДЕЛ. ЛЕКЦИОННЫЙ КУРС ПО
1.4 Выбор в программе, организация циклов
Выбор в программе выполняют условные операторы. Условные опера- торы помогают осуществить «ветвление» программы, т.е. передать управле- ние по условию, на ту или иную «ветку» - это может быть фрагмент текста, процедура, подпрограмма или даже другой модуль.
Виды условных операторов Visual Basic:
If ... Then ... Else ...
Select ... End Select
Ветвление If ... Then ... Else
31
Этот оператор обычно используется, когда проверяется одно или два условия в программе. Конструкцию If ... Then ... Else ...(Если ... Тогда ... Ина- че ...) можно записать в одном из двух форматов - блочном (в несколько строк) и линейном (в одной строке).
Линейный формат:
If логич_выражение Then блок_команд_1 [Else блок_команд_2]
Если логич_выражение принимает значение «истина», выполняется блок_команд_1, иначе выполняется блок_команд_2. Else можно опустить, в этом случае, , если логич_выражение ложно, блок_команд_1 просто пропус- кается (рис. 1.3).
Пример 1:
Если значение переменной А больше нуля, то вычислить А2, иначе - вычислить А3
If A>0 Then S= A^2 Else S=A^3 Пример 2:
Если значения переменных А и В равны между собой , то прервать выполнение процедуры
If A=B Then Exit Sub
Рисунок 1.3 - Блок-схема организации условного оператора
32
Блочный формат:
If логич_выражение_1 Then блок_команд_1
[ElseIf логич_выражение_2 Then блок_команд_2
...
[Else
блок_команд_n End If
Если логич_выражение_1 принимает значение «истина», выполняется блок_команд_1, иначе, если логич_выражение_2 истинно, выполняется блок_команд_2 и т.д. Если ни одно условие не удовлетворяется, то выполня- ется блок_команд_n, следующий за Else.
Пример 1:
Если значения переменных А и В положительны, то вывести их сумму и произведение, в противном случае - вывести сообщение об ошибке.
If A>0 And B>0 Then Print A+B
Print A*B Else
Print «ошибка»
End If Пример 2:
Если значение переменной В меньше 10, то увеличить его в 2 раза, если значение от 10 до 20, то увеличить в 3 раза, в остальных случаях - уменьшить в 10 раз.
If B<10 Then B=B*2
ElseIf B>=10 And B<=20 Then B=B*3
Else B=B/10 End If
Оператор множественного выбора Select Case
Используется при необходимости осуществить проверку более слож- ных условий.
Формат команды
Select Case арифм_выражение или симв_выражение
33
Case условие 1 блок команд 1 Case условие 2 блок команд 2 ...
Case Else блок команд n End Select
В поле операндов Select Case записывается произвольное арифметиче- ское выражение или символьное выражение, которое в процессе выполнения программы принимает то или иное числовое, логическое или символьное значение.
В поле операндов каждого оператора Case надо указать условие в од- ном из трех форматов:
1. Case константа_1, константа_2,...
2. Case Is знак_отношения константа
3. Case константа_1 To константа_2
Алгоритм множественного выбора заключается в следующем. Сначала вычисляется значение выражения, записанного в Select Case. Далее проверя- ется, удовлетворяет ли это значение одному из указанных в Case условий.
Если значение удовлетворяет какому-то условию, выполняется блок команд, следующий за данным Case. Если ни одно условие не удовлетворяется, вы- полняется блок команд, следующий за Case Else. При выполнении того или иного блока команд управление передается команде, следующей за End Se- lect.
Пример:
Input A
Select Case A Case 1,5
Print «А равно 1 или 5»
Case Is >5
Print «А больше 5»
Case -8 TO 2.5
Print «А не меньше -8, но не больше 2.5»
Case Else
Print «Ни одно условие не выполняется»
End Select
Цикл - это многократно повторяемая часть программы.
В языке Visual Basic предусмотрено два основных способа организации циклов:
− повторение блока команд заданное количество раз (цикл со счетчи- ком);
34
− циклическое повторение блока команд, пока выполняется (или не выполняется) некоторое условие.
Цикл со счетчиком For ...Next (Для ... Следующий)
Цикл For ... Next - это цикл с заранее заданным количеством повторе- ний.
For переменная_цикла=нач_значение To конеч_значение [Step шаг]
блок_команд
Next переменная_цикла
В поле операндов оператора For указываются:
− числовая переменная, которая называется счетчиком или перемен- ной цикла.
− начальное и конечное значение счетчика.
Если необходимо, укажите шаг изменения счетчика по окончании каж- дого цикла (по умолчанию этот шаг равен 1).
Конструкция завершается оператором Next.
Принцип работы оператора:
Переменной цикла присваивается начальное значение, после этого пер- вый раз выполняется блок команд (тело цикла). Оператор NEXT увеличивает текущее значение переменной цикла на величину шага , и, если новое значе- ние переменной цикла не превышает заданное конечное значение, в очеред- ной раз выполняется блок команд.
Пример 1:Вывести 10 раз текст «привет»
For I=1 To 10 Print «привет»
Next I
Пример 2: Вывести все четные натуральные числа от 10 до 20.
For K=10 To 20 Step 2 Print K
Next K
Можно выйти из цикла не дожидаясь выполнения всех повторений при помощи оператора Exit For. Управление будет передано на оператор, стоя- щий после Next.
С помощью For ... Next можно организовывать вложенные циклы - каждый со своим For, Next и счетчиком.
Универсальный цикл Do ...Loop (Делать ... Цикл)
Наиболее гибкий и универсальный способ организации цикла по усло- вию обеспечивает конструкция Do ...Loop. Конструкция имеет четыре фор- мата:
35
Циклы с предусловием.
1. Do While логич_выражение блок_команд
Loop (рис.1.4)
Рисунок 1.4 – Блок-схема алгоритма с предусловием
2. Do Until логич_выражение блок_команд
Loop
Циклы с постусловием
При первом входе условие не проверяется, поэтому блок_команд будет выполнен хотя бы один раз (рис. 1.5).
3 . Do блок_команд
Loop While логич_выражение
Блок_команд выполняется до тех пор, пока значение ло- гич_выражения истинно.
Блок_команд выполняется до тех пор, пока значение логич_выражения ис- тинно.
36
Рисунок 1.5 – Блок-схема алгоритма с постусловием 4. .Do
блок_команд
Loop Until логич_выражение
Можно выйти из цикла не дожидаясь выполнения всех повторений при помощи оператора Exit Do. Управление будет передано на оператор, стоя- щий после Loop.
Решение нелинейного уравнения методом половинного деления
Целью данной работы является приобретение навыков решения задач итерационными методами, в частности решение нелинейных уравне- ний
методом половинного деления, используя конструкцию DO WHILE…LOOP.
Метод половинного деления (или дихотомии)
При решении нелинейного уравнения методом половинного деления задаются интервал [a,b], на котором существует только одно решение, и же- лаемая точность ε (рис. 1.6).
Постановка задачи.
Пусть функция y=f(x) определена и непрерывна на отрезке [a; b].
f(a)*f(b)<0
Требуется найти корень на отрезке [a; b] с точностью 0,00001 . Последовательность решения задачи.
Для реализации алгоритма дихотомии отрезок [a; b] делится пополам точкой c = (a + b)/2 (рис. 1).
Если f(c) не равно 0, то возможны два случая:
а) f(x) меняет знак на отрезке [a; c];
б) f(x) меняет знак на отрезке [c; b].
Выбираем тот отрезок, на котором функция меняет знак. Если f(x)
Блок_команд выполняется до тех пор, пока значение логич_выражения лож- но.
37
меняет знак на отрезке [a; c], то b=c; если f(x) меняет знак на отрезке [c;b], то a=c.
Деление отрезка пополам продолжается пока |b-a|>ε . Корень уравнения: x = (a + b)/2
Рисунок 1.6 – Блок-схема алгоритма решения нелинейного уравнения методом половинного деления
38
Алгоритм решения нелинейного уравнения методом половинного деления
Результат решения нелинейного уравнения методом половинного деле- ния отображен на форме и представлен на рисунке 1.7.
39
Рисунок 1. 7 - Результат решения нелинейного уравнения методом по- ловинного деления