Главная страница «Первого сентября»Главная страница журнала «Информатика»Содержание №6/2008


В мир информатики
Моделирование

Моделирование бросания игральной кости в электронной таблице Microsoft Excel

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

Общий вид листа показан на рис. 1.

Рис.1

Прежде всего оформим лист надлежащим образом.

Объединим ячейки В2 и С2, а также и ячейки диапазона F4:G6. Для этого необходимо выделить соот-
ветствующие ячейки и выбрать в меню пункт Формат, подпункт Ячейки и на вкладке Выравнивание, в разделе Отображение поставить “галочку” (v) в переключателе с надписью объединение ячеек, после чего щелкнуть на кнопке ОК.

Введем текст в ячейки В2, В3, С3, D3, F3 и числа в диапазон ячеек В4:В9.

В ячейке В2 будет выводиться число, которое выпало на кубике, в ячейках С4:С9 — общее количество выпадений того или иного числа, в ячейке D2 — общее количество “бросаний”. В ячейках D4:D9 будем подсчитывать долю (в %) значений из диапазона С4:С9. Необходимые для расчета формулы введите самостоятельно. При этом имейте в виду, что, когда значение в ячейке D2 равно нулю, в ячейках D4:D9 будет выводиться значение #ДЕЛ/0! (Деление на 0). Устраните этот недостаток, используя функцию ЕСЛИ.

Установим в ячейках необходимые параметры:

— характер выравнивания текста по горизонтали и вертикали — по центру (используя кнопки на панели инструментов Форматирование и меню, пункт Формат, подпункт Ячейки, вкладка Выравнивание);

— формат данных в ячейках D4:D9 установим Процентный.

Разместим на листе три кнопки. Для этого вызовем панель инструментов Элементы управления (Вид | Панели инструментов) и войдем в режим конструктора, нажав на кнопку . Выбрав на панели элемент-кнопку, “нарисуем” мышью три кнопки соответствующего размера в нужных местах листа. Изменить надпись на каждой из кнопок можно двумя способами:

1) вызвав окно свойств (с помощью кнопки на панели инструментов Элементы управления) и присвоив свойству Caption нужное значение;

2) вызвав контекстное меню и выбрав в нем пункт Объект CommandButton >Edit.

Целесообразно также изменить значения свойства Name кнопок на “русскоязычные”. Это сделает код, о котором будет рассказано ниже, понятнее. Например, можно присвоить такие значения свойства Name нашим кнопкам: Бросить_1_раз, Бросить 1000_раз и Очистка.

Как видно из рис. 1, на листе имеется диаграмма, показывающая общее количество выпадений чисел 1–6 на грани игральной кости. Автор надеется, что читатель сможет создать такую диаграмму. Единственная особенность — для того чтобы при очередном бросании на диаграмме автоматически не менялось минимальное значе-ние по оси Y, надо вызвать окно свойств этой оси и убрать “галочку” у соответствующего параметра (рис. 2).

Рис. 2

Ну и, конечно, кубик! В конце концов он будет у нас вращаться, прежде чем “упадет” на одну из граней. Но пока разместите на листе (Вставка | Рисунок > Из файла) его “простое”, статическое, изображение, которое создайте сами или найдите готовое.

Теперь о коде, связанном с кнопками. Речь идет о действиях, которые должны выполняться при щелчке на той или иной кнопке. Эти действия называют “процедурой обработки события Щелчок по кнопке (Сlick)”. Чтобы вызвать окно редактора кода для записи необходимых действий, следует дважды щелкнуть на соответствующей кнопке.

Процедура обработки события Сlick для кнопки с надписью Бросить кость 1 раз выглядит так:

Private Sub Бросить_1_раз_Click()
DIM Выпало As integer
'Переменная Выпало – "выпавшее" на кубике число
Randomize
'Моделируем бросание кубика
Выпало = Int(Rnd(1) * 6) + 1
'Записываем "выпавшее" число в ячейку F4
Range("F4").Select
ActiveCell.Value = Выпало
'Увеличиваем на 1 общее количество выпадений числа Выпало
Select Case Выпало
'Делаем это в одной из ячеек диапазона С4:С9
Case 1
Range("C4").Select
Case 2
Range("C5").Select
Case 3
Range("C6").Select
Case 4
Range("C7").Select
Case 5
Range("C8").Select
Case 6
Range("C9").Select
End Select
ActiveCell.Value = ActiveCell.Value + 1
'Увеличиваем общее количество бросаний 'в ячейке D2
Range("D2").Select
ActiveCell.Value = ActiveCell.Value + 1
End Sub

Прокомментируем ее.

Оператор Randomize необходим для генерации новой последовательности случайных чисел. Он как бы встряхивает коробку с шарами, на которых записаны числа.

Моделирование бросания игрального кубика можно провести с помощью функции, возвращающей случайное число. Чтобы получить случайное значение величины Выпало в диапазоне от 1 до 6 включительно, используется выражение Int (Rnd (1) * 6) + 1.

Объект Range (в переводе с английского — диапазон) и свойство Select позволяют выбрать ячейку таблицы, а запись ActiveCell.Value соответствует значению в активной (выбранной) ячейке.

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

Select Case Выпало
Case 1

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

Чтобы узнать, как часто будут выпадать на кубике числа 1, 2, …, 6, надо провести много испытаний. Для этого применим кнопку Бросить кость 1000 раз подряд. В соответствующем ей коде можно использовать (вызывать) как вспомогательную созданную до этого процедуру Бросить_1_раз_Click.

Private Sub Бросить_1000_раз _Click()
DIM i As integer
For i = 1 To 1000
Бросить_1_раз_Click
Next
End
Sub

В ходе проведения “испытаний” будут меняться данные на листе и на диаграмме (проверьте!).

Действия, выполняемые по щелчку на кнопке с надписью “Очистить”, запрограммируйте самостоятельно.

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

А.. В.. Диков,
г. Пенза

TopList