Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
40
Добавлен:
24.04.2015
Размер:
412.67 Кб
Скачать

Лабораторная работа 4. Использование VBA

Задание 1. В Microsoft Excel разработать игру для угадывания четырехзначного числа (рис. 1).

Суть данной игры заключается в следующем: компьютер загадывает четырехзначное число, а пользователь пытается его отгадать, при этом каждая цифра данного числа (от 0 до 9) угадывается по отдельности. Если цифра угадано правильно, для пользователя выдается сообщение «П» - правильно, если цифра угадана неправильно, то значения в ячейках могут быть «М» - данная цифра присутствует в данном числе, но она находится на другом месте, «Н» - данной цифры в этом числе нет.

Например, при нажатии на кнопку «Загадать» компьютер загадывает число.

При попытке пользователя отгадать данное число (нажать на кнопку «Проверить») выдаются следующие результаты: «Н – такого числа нет» (следовательно, в данном числе нет цифр 1, 3, 4), но имеется цифра 2, однако она стоит на другом месте (рис. 2), а также сообщение «Попробуй еще!».

При следующей попытке отгадать число выводится следующий результат (рис. 3).

На заключительном этапе, когда пользователь отгадал число, выдается сообщение (рис. 4).

Задания для студентов

  1. Создать и оформить в M. Excel поле для данной игры (см. рис. 1).

  2. Выставить ленту «Разработчик».

  1. На вкладке «Вставить» ленты «Разработчик» выставить 2 кнопки.

  2. Для кнопки «Загадать» в редакторе VB написать программу для загадывания числа

Sub макрос 1()

r = 0

For i = 1 To 4

a(i) = Int(Rnd() * 10)

Sheets("Лист2").Cells(3, i + 1) = a(i)

Next

End Sub

Согласно данной программе компьютер загадывает каждую цифру числа от 0 до 9 и выводит на лист 2, где

Sheets("Лист2").Cells(3, i + 1) = a(i)

Соответственно первая цифра числа, загаданное ПК будет находится на листе 2, в ячейке с номером строки 3 и номером столбца 2 (В), вторая цифра числа в ячейке С3 и т.д.

Так как мы загадываем каждую цифру числа, то необходимо описать переменную a(i) и переменную цикла r:

Dim a(4) As Integer

Dim r As Integer

Назначьте кнопке «Загадать» - макрос 1 и проверьте как работает программа.

  1. Для работы кнопки «Проверить» напишем программу для угадывания цифр данного числа

Sub Макрос2 ()

For i = 1 To 4

If Sheets("Лист1").Cells(2, i + 1) = a(i) Then

Sheets("Лист").Cells(4, i + 1) = "П"

Else

t = 0

For j = 1 To 4

If Sheets("Лист1").Cells(2, i + 1) = a(j) Then

t = 1

End If

Next

If t > 0 Then

Sheets("Лист1").Cells(4, i + 1) = "М"

Else

Sheets("Лист1").Cells(4, i + 1) = "Н"

End If

End If

Next

For i = 1 To 4

If Sheets("Лист1").Cells(4, i + 1) = "П" Then

f = f + 1

End If

Next

If f < 4 Then

MsgBox "Попробуй еще", 64, "Выводы"

End If

End Sub

  1. Самостоятельно дополните данную программу: рассчитайте количество шагов, за которое пользователь отгадывает данное число, и выведите правильное число (см. рис. 4). Указание: правильное число компьютер выводит при F=4, в противном случает, надпись «попробуй еще». Для расчета количества шагов введите дополнительный счетчик.

  2. Создайте кнопку для очистки цифр данного числа и напишите примечания, что обозначают буквы «П», «М», «Н» (рис. 5).

  1. Создайте дополнительно кнопку «Инструкция», при нажатии на которую создаётся окно с пояснениями для действий пользователя (рис. 6).

Создание пользовательских функций, процедур и их использование

  1. Создайте следующую таблицу

Создадим пользовательские функции для расчета Уральского коэффициента и подоходного налога. Для этого запишите их в модуле книги:

Если вы все сделали верно, то ваши пользовательские функции появятся в стандартном модуле функций (Вставка/Функция/Функции, определенные пользователем).

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

  1. Самостоятельно создайте функцию для расчета «На руки».

  2. Используя процедуру, смены цвета создайте макрос позволяющий менять на красный цвет итоговые отрицательные суммы и на зеленый итоговые суммы более 10000р.

Проект «Эпидемия гриппа»

  1. Создайте на первом листе «Эпидемия» клеточный автомат размером 25*25 клеток. Подготовьте область ввода исходных данных и область наблюдения за текущими результатами. Добавьте также три командные кнопки «Расставить случайно», «Один такт» и «20 тактов» (см. рис).

  1. На втором листе подготовить область размером 25*25 для хранения информации с первого листа. Назовите данный лист «Копия» (см. рис).

  1. Ввести программный код на кнопку «Расставить случайно»

Dim r As Range, rc As Range

Dim kz, n, nimm, nbol, pb, day

Private Sub CommandButton1_Click()

Rem n-общее число людей, kz-коэффициент заражения,nimm-число людей с иммунитетом

Rem nbolчисло больных на текущий момент, pb-всего переболело на текущий момент времени

kz = Cells(2, 29): n = Cells(3, 29): If n > 625 Then n = 625

nimm = Cells(4, 29): nbol = Cells(5, 29): pb = nbol

Cells(8, 29) = nbol: Cells(9, 29) = pb: Cells(10, 29) = n - nimm - pb

Set r = Range("B2:Z26")

Rem очистка клеточного автомата

For y = 1 To 25: For x = 1 To 25

r.Cells(y, x) = "": r.Cells(y, x).Interior.ColorIndex = 0

Next x, y

Rem занесение в автомат здоровых людей

For i = 1 To n - nimm - nbol

x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1

While r.Cells(y, x) <> "": x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1: Wend

r.Cells(y, x) = 0: r.Cells(y, x).Interior.ColorIndex = 6

Next i

Rem занесение в автомат людей с иммунитетом, привитых

For i = 1 To nimm

x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1

While r.Cells(y, x) <> "": x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1: Wend

r.Cells(y, x) = 8: r.Cells(y, x).Interior.ColorIndex = 12

Next i

Rem занесение в автомат больных людей

For i = 1 To nbol

x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1

While r.Cells(y, x) <> "": x = Int(Rnd * 25) + 1: y = Int(Rnd * 25) + 1: Wend

r.Cells(y, x) = 1: r.Cells(y, x).Interior.ColorIndex = 5

Next i

End Sub

Проверьте работоспособность данной кнопки, при этом у нас имеются следующие обозначения

«» - нет человека.

«0» - здоровый человек без иммунитета;

«1» … «7» - больной человек, число соответствует номеру дня болезни.

«8» - человек с иммунитетом.

  1. Напишем программный код на кнопку «Один такт», которая соответствует одному дню развития эпидемии.

Private Sub CommandButton2_Click()

kz = Cells(2, 29): n = Cells(3, 29)

nimm = Cells(4, 29): nbol = Cells(8, 29): pb = Cells(9, 29)

Set r = Range("B2:Z26")

Set rc = Worksheets("Копия").Range("B2:Z26")

Rem Копируем данные на лист «копия»

r.Copy Destination:=Worksheets("Копия").Range("B2")

Rem B цикле просматривается содержимое копии

For y = 1 To 25: For x = 1 To 25

If rc.Cells(y, x) <> "" Then

d = rc.Cells(y, x)

Rem если в клетке больной человек, то увеличиваем на единицу (прошел день)

If d > 0 And d < 7 Then

r.Cells(y, x) = r.Cells(y, x) + 1

Rem если в клетке выздоравливающий (проболел 7 дней), то переводим Rem его в разряд с иммунитетом

ElseIf d = 7 Then

r.Cells(y, x) = 8: r.Cells(y, x).Interior.ColorIndex = 12

nbol = nbol - 1: Cells(8, 29) = nbol

Rem если в клетке здоровый человек без иммунитета, а рядом больной

Rem то он заболевает соответственно коэффициенту заражения и числу

Rem больных соседей

ElseIf d = 0 Then

b = False: p = Rnd

If rc.Cells(y, x + 1) > 0 And rc.Cells(y, x + 1) < 8 And p < kz Then b = True

If rc.Cells(y, x - 1) > 0 And rc.Cells(y, x - 1) < 8 And p < kz Then b = True

If rc.Cells(y + 1, x) > 0 And rc.Cells(y + 1, x) < 8 And p < kz Then b = True

If rc.Cells(y - 1, x) > 0 And rc.Cells(y - 1, x) < 8 And p < kz Then b = True

If b = True Then

r.Cells(y, x) = 1: r.Cells(y, x).Interior.ColorIndex = 5

nbol = nbol + 1: pb = pb + 1: Cells(8, 29) = nbol: Cells(9, 29) = pb

Cells(10, 29) = n - nimm - pb

End If

End If

End If

Next x, y

End Sub

  1. На кнопку «20 тактов» напишите следующий программный код

  1. Построим график для исследования динамики численности больных от номера дня. Добавим код для кнопки 1 в конец программы

Для кнопки 2

Указание: на первом листе мы выделили диапазон данных, на которых будет строиться график А31:В181. На командной кнопке «Расставить случайно» мы добавили код для очистки области данных для графика, а на кнопке2 добавили код для заполнения этой области необходимыми данными.

  1. Постройте самостоятельно график соответственно диапазону А31:В181.

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

  1. Исследуйте как меняется картина протекания эпидемии при низкой плотности населения (300 человек).

  2. Исследуйте, как меняется картина при низком коэффициенте заражения.

  3. Измените проект, чтобы в исходных данных появилась строка «длительность болезни».

Соседние файлы в папке Лабораторные_работы