ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ
При программировании линейных алгоритмов могут быть использованы инструкции ввода и вывода данных, а также инструкции присваивания.
Пример 3.1. Вычислить значение функции ,
где x = 1-z и t = (x+1)2
Исходные и промежуточные данные, а также результаты вывести в окне сообщения.
Таблица соответствия переменных
Обозначение в задании | Имя переменной | Тип переменной | Комментарий |
y x a t z | y x a t z | вещественный вещественный вещественный вещественный вещественный | Результат вычисления Промежуточное данное Исходное данное |
Sub Pr3_1 ()
Dim y As Single, x As Single, a As Single
Dim t As Single, z As Single
a = InputBox("Введи значение а")
‘a = Range(“A2”).Value
'a = Cells(2,1).Value
z = InputBox("Введи значение z")
x = 1 - z
t = (x + 1) ^ 2
y = x + Abs (a + 2 * t)
MsgBox "Исходные данные:" & Chr(13) & _
"a=" & CStr(a) & " z=" & CStr(z) & Chr(13) & _
"Промежуточные данные:" & Chr(13) & _
"x=" & CStr(x) & " t=" & CStr(t) & Chr(13) & _
"Результат:" & Chr(13) & "y=" & CStr(y), , "Пример"
‘Range(“B2”).Value = y
‘Cells(“2,2”).Value = y
End Sub
Поскольку при вычислении как промежуточных значений x и t, так и значения результата y нет никаких ограничений на значения используемых в расчетах данных, то для проверки алгоритма и программы достаточен один тест с любыми исходными значениями.
Тесты:
№ п/п | Значение | ||||
a | z | x | t | y | |
1 2 3 | 1 2 -5 | 3 13 -8 | -2 -12 9 | 1 121 100 | 1 232 204 |
Результаты работы программы с данными первого теста представлены на рис.3.2.
4. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ
Для программирования разветвлений чаще всего используется оператор условного перехода (условный оператор) If. Он обеспечивает выполнение или невыполнение некоторого оператора, группы (блока) операторов в зависимости от заданного с помощью логического выражения некоторого условия.
В VBA существует несколько разновидностей условного оператора If:
1. Краткая форма условного оператора If <условие> Then
2. Полная форма условного оператора If с одним условием If <условие> Then … Else … EndIf
3. Проверка множественных условий If <условие> Then … ElseIf <условие> EndIf
4.1. Условный оператор If…Then
Используется для программирования краткой формы ветвления, т.е. позволяет выполнять один или несколько операторов, если логическое выражение в условии принимает значение True - Истина.
Можно использовать однострочный или блочный синтаксис.
Однострочный синтаксис:
If <условие> Then <оператор>
Например, следующие фрагменты графической схемы алгоритма программируются так:
If x>5 Then y=3*x+1.5
If c<=a+b*x-1.2 Then MsgBox “Значение С меньше”
Если необходимо выполнить не один, а несколько операторов в случае истинности логического выражения, то можно
1. расположить их в одну строку, разделив знаком двоеточие «:»;
2. использовать блочный синтаксис оператора If … Then .
Использование второго варианта предпочтительнее, т.к. он является более наглядным.
Блочный синтаксис:
If <условие> Then
<Блок операторов>
End If
Запрограммируем следующий фрагмент графической схемы алгоритма, используя однострочный и блочный синтаксис условного оператора If…Then:
If A>10 Then x=A+1: y=B+2
или
If A>10 Then
x=A+1
y =B+2
End If
4.2. Условный оператор If…Then…Else
Используется для программирования полной формы ветвления. Если логическое выражение принимает значение True – Истина,выполняется один блок операторов, в противном случае (значение логического выражения False – Ложь) – второй.Можно использовать однострочный или блочный синтаксис.
Однострочный синтаксис:
If <условие> Then <оператор> Else <оператор>
Блочный синтаксис:
If <условие> Then
<Блок операторов>
Else
<Блок операторов>
End If
Запрограммируем следующие фрагменты графической схемы алгоритма:
If a > 5 Then b = b + a Else b = b – a
или
If a > 5 Then
b = b + a
Else
b = b - a
End If
Первый вариант предпочтительнее.
If x>0 Then
y=x+1
f=1
Else
f=2
End if
или If x>0 Then y=x+1: f=1 Else f=2
Первый вариант предпочтительнее.
4.3. Условный оператор If…Then…ElseIf
Условный оператор может содержать другие условные операторы. В этом случае имеет место так называемое вложенное ветвление. Для его программирования могут использоваться операторы If … Then и If … Then … Else. Если первый блок ветки Else является вложенным ветвлением, то рациональнее использовать разновидность условного оператора If…Then…ElseIf.
Синтаксис:
if <условие_1> Then
<Блок операторов_1>
ElseIf <условие_2> Then
<Блок операторов_2>
ElseIf <условие_3> Then
<Блок операторов_3>
…
[Else
<Блок операторов>]
End If
Например:
If g > 10 Then
z=5
ElseIf g<5 Then
z=1
End If
If x > 5 Then
y = x + 2
f =1
Else
If x < -10 Then
y = 2 * x
f=2
Else
y = x - 5
f=3
EndIf
End If
Следующий фрагмент блок-схемы может быть запрограммирован только с помощью оператора If…Then…Else
4.4. Примеры использования оператора условного перехода If
Пример 4.1. Вычислить значение функции
y=
Результаты вычислений и номер формулы вывести в окне сообщений.
Таблица соответствия переменных
Обозначение в задании | Имя переменной | Тип переменной | Комментарий |
y x | y x f | Вещественный Вещественный Целый | Значение функции Исходное данное Номер формулы |
Анализ исходных данных:
Тесты:
№ теста | Значение | № формулы | Комментарий | |
x | y | |||
1. 2. 3. | 1 10 15 | 0 9 31 | 2 2 1 | x<10 x=10 x>10 |
Графическая схема алгоритма представлена на рис.4.1., результаты тестирования программы – на рис.4.2.
Sub Pr4_1()
Dim y As Single, x As Single
Dim f As Byte, s As String
'Ввод исходных данных
x= InputBox("Введи значение х")
'Выполнение расчетов и вывод результатов
If x > 10 Then
y = 2 * x + 1
f = 1
s = "При х=" & CStr(x) & Chr(13) & _
"Значение y =" & CStr(y) & Chr(13) & _
"Номер формулы вычисления - " & CStr(f), , "Пример"
Else
y = x – 1
f = 2
s = "При х=" & CStr(x) & Chr(13) & _
"Значение y =" & CStr(y) & Chr(13) & _
"Номер формулы вычисления - " & CStr(f), , "Пример"
EndIf
MsgBox s
End Sub
Пример 4.2.Проанализировать результаты сдачи учащимися экзаменов по физике, математике и русскому языку. Вывести сообщения:
если средний балл >4 – “отлично”
3<= ср. балл <=4 – “удовлетворительно”
средний балл <3 – “плохо”
Результат анализа вывести в окне сообщения.
Таблица соответствия переменных
Обозначение в задании | Имя переменной | Тип переменной | Комментарий |
Оценка по физике Оценка по математике Оценка по русскому языку Средний балл | fiz mat rus Sr S P | целый целый целый вещественный строковый Integer Int | Исходное данное Исходное данное Исходное данное Промежуточное значение Сообщение Рабочая переменная для вывода информационного значкая в окне сообщения |
Анализ исходных данных:
Имя переменной | Недопустимые значения | Ситуация, при которой переменная получает недопустимое значение |
fiz, mat, rus | <1 или>5 | ввод данных |
Анализ значений переменной Sr:
№ теста | Значение | Комментарий | |||||
fiz | mat | rus | Sr | ||||
1. 2. 3. 4. 5. 6. 7. 8. | 0 5 3 5 4 3 3 3 | 5 6 4 4 4 4 3 2 | 4 5 -1 5 4 4 3 3 | 4,7 4,0 3,7 3 2,7 | Введено некорректное значение Введено некорректное значение Введено некорректное значение Отлично Удовлетворительно Удовлетворительно Удовлетворительно Плохо | ||
Графическая схема алгоритма представлена на рис.4.3., а результаты тестирования – на рис.4.4.
Sub Pr4_2()
Dim fiz As Byte, mat As Byte, rus As Byte
Dim Sr As Single, S As String, P As Integer
'Ввод и проверка исходных данных
fiz = InputBox("Введи оценку по физике")
mat = InputBox("Введи оценку по математике")
rus = InputBox("Введи оценку по русскому языку")
If (fiz < 1 Or fiz > 5) Or (mat < 1 Or mat > 5) Or (rus < 1 Or rus > 5) Then
MsgBox "Введено некорректное значение" & Chr(13) & _
"оценка по физике - " & CStr(fiz) & Chr(13) & _
"оценка по математике - " & CStr(mat) & Chr(13) & _
"оценка по русскому языку - " & CStr(rus)
Else
'Выполнение расчетов
Sr = (fiz + mat + rus) / 3
If Sr > 4 Then ' P – значение константы для вывода
S = "Отлично": P = vbExclamation ' информ. значка в окне
ElseIf Sr < 3 Then ' сообщения
S = "Плохо": P = vbCritical
Else
S = "Удовлетворительно": P = vbQuestion
End If
'Вывод результатов. Для вывода среднего значения используется формат
MsgBox S & Chr(10) & "Средний балл = " & CStr(Sr) & _
Chr(13) & "Оценка по физике - " & CStr(fiz) & _
Chr(13) & "Оценка по математике - " & CStr(mat) & _
Chr(13) & "Оценка по русскому языку - " & CStr(rus), P
End If
End Sub
Дата добавления: 2015-11-10; просмотров: 973;