Задача 3. Найти минимальное из двухчисел, вводимых с клавиатуры.

Лабораторный практикум

Для того чтобы открыть редактор VBA, выберите команду, Сервис, Макрос Редактор Visual Basic или нажмите комбинацию клавиш < Alt >+< F 11>. Далее можно воспользоваться меню редактора: выбрать команды Insert , Module, еще раз войти в меню Insert и выбрать Procedure. Затем заполнить поле Name диалогового окна (ввести имя своей процедуры), и если программируется функция, то выбрать переключатель Function (рис. 2), нажать Ok.

Рис. 2. Вид окна Добавление процедуры

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

Public Sub ИмяПроцедуры()

End Sub

Между ними можно набрать код (инструкции) программы. Для запуска программы можно выбрать в меню Run команду Run Sub / UserForm или нажать кнопку на панели инструментов. Если в программе обнаружены ошибки, то компилятор выдает сообщение и отладчик отмечает строку с ошибкой желтым цветом. Чтобы снять это выделение, можно нажать кнопку на панели инструментов. После этого необходимо исправить ошибку и снова запустить программу на выполнение.

Лабораторная работа № 1. Линейные алгоритмы

Задача 1. Найти значения переменной y, заданные формулой y = x 2 + Öx - sin(x) для трех различных значений x.

Решение. Вход алгоритма: значение переменной x, выход: значение переменной y. Алгоритм состоит из трех шагов: 1) ввод значения x, 2) вычисление y для этого значения, 3) вывод полученного результата. Эти три шага следует также выполнить трижды – для каждого нового значения x. Блок-схема алгоритма для одного значения x:

Для иллюстрации возможных методов ввода будем задавать x разными способами: присваиванием, вводом с клавиатуры, вводом из ячейки листа Excel . Определяем переменные, участвующие в программе: их имена и типы. Пусть это будут x и y вещественного типа Single (целый тип Integer для y брать нельзя, т.к. операция извлечения корня и функция sin ( x) могут дать в качестве результата вещественные числа). В начале программы следует поста- вить описания этих переменных. Вывод реализуем оператором MsgBox. Его используем в двух режимах – просто вывод числа и вывод числа с текстом. Текст в этом случае нужно взять в двойные кавычки и соединить его с числом операцией & склейки строк. Аргумент оператора MsgBox имеет строковый тип ( String), при выводе числового значения происходит автоматическое преобразование типов (здесь – из Single в String).

В программе участвуют встроенные функции – извлечение корня и вычисление синуса. В VBA это Sqr(x) и Sin(x). Отметим, что извлечение корня из числа эквивалентно операции возведения этого числа в дробную степень (здесь –в степень 1/2).

Public Sub Task1()

Dim x As Single, y As Single ‘описываем переменные

x = 2.4 ‘вводим х присваиванием значения

y = x ^ 2 + Sqr(x) - Sin(x) ‘вычисляем у, используя функцию sqr

MsgBox y ‘выводим значение у без текста

x = InputBox("Vvedi x") ‘вводим х c клавиатуры

y = x ^ 2 + x ^ (1 / 2) - Sin(x) ‘используем возведение в дробную степень

y = x ^ 2 + x ^ (1 / 2) - Sin(x) ‘выводим значение у с текстом “y=”

MsgBox "y=" & y ‘вводим х из ячейки А1 листа Excel

x = Cells(1, 1)

y = x ^ 2 + Sqr(x) - Sin(x)

MsgBox "y=" & y

End Sub

 

Перед тем, как запустить эту программу на счет, необходимо ввести какое-нибудь значение в ячейку А1 активного листа, иначе оператор x=Cells(1,1)присвоит х значение 0. В этой программе есть недостаток: она не проверяет, что введенное значение положительно (х>0). Если пользователь программы введет отрицательное значение, то операции x^(1/2) и Sqr(x) приведут к ошибке, система выдаст сообщение о неверном аргументе этих операций. Программа будет гораздо технологичней, если после каждого ввода поставить защиту, например: проверку значения, выдачу сообщения и выход из процедуры:

if x < 0 Then

MsgBox ”введено отрицательное значение переменной х”

Exit Sub

End if

Задача 2. Обменять значения двух переменных. Решение. Пусть имена переменных х и у. Задача состоит в том, чтобы переменная х получила значение переменной у и наоборот: у получил значение переменной х. Типичное неправильное решение задач с обменом значений:

x = y ‘неверно!

y = x

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

rab = x

x = y

y = rab

Программа целиком:

Sub Обмен()

Dim x As Integer, y As Integer, rab As Integer

x = 10

y = 7

rab = x

x = y

y = rab

MsgBox (x)

MsgBox (y)

End Sub

Задачи для самостоятельной работы:

1. Найти значение переменной y при различных значениях А, B, С, вводимых с листа Excel, и значениях x, z, вводимых с клавиатуры:

a) ; b) ;

2. Задать длину ребра куба. Найти объем куба и площадь его поверхности.

3. Задать три действительных положительных числа. Найти среднее арифметическое и среднее геометрическое этих чисел.

4. Определить высоту треугольника, если его площадь равна S, а основание больше высоты на величину А.

 

Лабораторная работа № 2. Разветвляющиеся алгоритмы

Задача 3. Найти минимальное из двухчисел, вводимых с клавиатуры.

Решение. Вход алгоритма: два неравных числа, назовем их a и b. Выход – число, меньшее другого числа. Алгоритм: сравнить значения a и b: если a>b, то вывести в качестве результата значение a, иначе - значение b. Блок-схема алгоритма:

 

 

Определим тип переменных a и b. Для простоты используем целые числа, т.е. тип – Integer. По условию задачи значения этих переменных вводятся с клавиатуры, поэтому используем функцию InputBox с текстовым аргументом. Для вывода используем функцию MsgBox.

 

Public Sub min2()

Dim a As Integer, b As Integer

a = InputBox("Vvedi a")

b = InputBox("Vvedi b")

If a > b Then

MsgBox "min = " & b

Else

MsgBox "min = " & a

End If

End Sub

Задача 4. Найти максимальное из трех чисел, вводимых с клавиатуры.

Решение. Вход алгоритма: три произвольных числа, назовем их a, b, c. Выход: наибольшее из них. Алгоритм состоит в попарном сравнении этих чисел и выборе максимального в паре. Программа иллюстрирует применение вложенных операторов If… Then… Else… , причем новые If… появляются как в части Then, так и в части Else. Блок-схема алгоритма:

В программе тип всех переменных для простоты выбран Integer. Для сокращения двустрочной записи:

Else

Max = c

использована однострочная Else: Max = c, допустимая в VBA.

 

Public Sub max3()

Dim a As Integer, b As Integer, c As Integer, Max As Integer

a = InputBox ("Vvedi a")

b = InputBox ("Vvedi b")

c = InputBox ("Vvedi c")

If a > b Then

If a > c Then ‘вложенный условный оператор If…

Max = a

Else: Max = c

End If ‘конец вложенного If…

Else

If b > c Then ‘вложенный условный оператор If…

Max = b

Else: Max = c

End If ‘конец вложенного If…

End If

MsgBox Max

End Sub

Задачи для самостоятельной работы:

1. Вывести на печать переменные А, В, С в порядке их возрастания. Зна- чения переменных: а) ввести с клавиатуры; б) взять из диапазона В2:В4 листа Excel; с) задать оператором присваивания.

2. Даны значения x, y, z. Определить, могут ли они быть сторонами: а) обычного треугольника; б) равнобедренного треугольника.

3. Список доходов клиентов расположен в диапазоне А2:А11 листа Excel. Определить налог конкретного клиента (его номер в списке ввести с клавиатуры), если налоговое начисление составляет 13% от дохода при доходе меньшем 5000 руб., 20% от дохода, если он находится в промежутке от 5000 до 40000 руб. и 30%, если доход превышает 40000 руб.

4. Даны действительные числа x, y, z. Получить минимальное из них по модулю.

 

Лабораторная работа № 3. Циклические алгоритмы

Задача 5. Найти среднее арифметическое четных чисел из N чисел, вводимых с клавиатуры. Решение. Среднее арифметическое – это значение суммы чисел, деленной на их количество. Поэтому для решения задачи потребуются переменные для накопления суммы и количества четных чисел. Пусть это будут S и k, для простоты – целого типа. Кроме того, в программе нужно ввести N или задать его с помощью присваивания. Для проверки на четность можно использовать функцию Mod, дающую целочисленный остаток от деления ее левого операнда на правый: результат операции x Mod y равен целому числу - остатку от деления x на y; так он будет 0, если x делится на y. Если x или y не целые числа, то они предварительно будут округлены до целого. Основу алгоритма составит циклическая процедура: ввести число, проверить: если оно четное, то добавить его к сумме S и увеличить счетчик четных чисел k на 1. Эти операторы нужно повторить N раз. На выходе из цикла сумма четных чисел и их количество будут посчитаны, останется только разделить S на k и запомнить результат. Для хранения результата возьмем переменную r, ее тип – Single –действительное число, т.к. искомое среднее – результат деления – не всегда будет целым числом:

 

Sub Среднее()

Dim S As Integer, r As Single, k As Integer, a As Integer

N = InputBox("Введите N – количество чисел")

S = 0

k = 0

For i = 1 To N

a = InputBox("Введите число")

If a Mod 2 = 0 Then

S = S + a

k = k + 1

End If

Next r = S / k

MsgBox (r)

End Sub

Обратите внимание, что переменные S и k предварительно обнуляются («чистятся»), причем до начала цикла. Чистку необходимо делать, т.к. при переводе программы на машинный язык под переменные отводится память, в ко- торой может что-нибудь уже находиться, какая-либо старая информация. Если убрать оператор S = 0, то в последующем присваивании S = S + a при вычислении правой части к значению a будет добавлено неизвестное значение S и результат будет неверный. Типичная ошибка, когда операции обнуления помещают в тело цикла, после заголовка:

 

For i = 1 To N S = 0 ‘неверно!

k = 0 ‘неверно!

a = InputBox("Введите число")

If a Mod 2 = 0 Then

S = S + a

k = k + 1

End If

Next

 

Тогда чистка происходит на каждом шаге исполнения цикла, поэтому после завершения цикла в S окажется лишь последнее введенное четное a, и k будет равен 1.