Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Вычисление числа p методом Монте-Карло



Задача: с помощью датчика случайных чисел вычислить координаты N точек, равномерно распределенных внутри квадрата со стороной 2. Подсчитать число точек N1 точек попавших внутрь круга, вписанного в этот квадрат. Считая, что числа N и N1 пропорциональны площади квадрата и круга соответственно, вычислить приближенное значение числа pпо формуле p » 4×N1/ N.

На рис.37 показана экранная форма с графическим окном PictureBox, в которое выводятся точки красного цвета, если они попадают внутрь круга и синим, если вне его. В левое текстовое окно вводится число N, а в правое – результат вычислений, приближенное значение числа p. Текст программы на рис.38.

 

 

 


Рис. 37. Экранная форма проекта «Метод Монте-Карло»

 
 


Private Sub Command1_Click()

Picture1.Scale (-1, 1)-(1, -1) ‘ масштабирование окна

Picture1.Line (-1, 1)-(1, -1), vbWhite, BF ‘ закрашивание окна

N = Val(Text1.Text) ‘ N – количество точек

N1 = 0 ‘ N1 – счетчик попаданий в круг

Randomize ' инициализация датчика случайных чисел

For i = 1 To N ‘ цикл вычисления координат точек

XT = 2 * Rnd - 1

YT = 2 * Rnd - 1

If XT * XT + YT * YT < 1 Then ‘ если точка попадает в круг

N1 = N1 + 1 ‘ счетчик увеличивается на единицу

Picture1.PSet (XT, YT), vbRed ‘ рисуется точка красного цвета

Else ‘ в противном случае

Picture1.PSet (XT, YT), vbBlue ‘ рисуется точка синего цвета

End If

ProgressBar1.Value = i / N ‘ обновляется индикатор

Next i

PI = 4 * N1 / N ‘ вычисляется число пи

Text2.Text = Str(PI)

End Sub

 

Рис.38. Программа вычисления числа вода точек графика функции

 

Поскольку при больших значениях N расчеты могут занять несколько секунд, на форме размещен индикатор выполнения программы, элемент ProgressBar (полоска, в которой количество закрашенных прямоугольников пропорционально количеству выполненных шагов цикла, а не закрашенных – количеству оставшихся шагов. Элемент ProgressBar изначально отсутствует в панели инструментов Visual Basic, для того, чтобы разместить его на форме, необходимо предварительно выбрать компонент CommonDiaalg 6 (см. раздел 12). В окне свойств элемента ProgressBar нужно задать свойства min=0 и max=1, а в программе изменять значение свойства Value с помощью выражения

ProgressBar1.Value = i / N

где i – параметр цикла типа пересчета, N – конечное значение параметра цикла.

Проект «Часы».

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

На рис.39 показана экранная форма, а на рис.40 – программный код.

 
 

 

 

 


Рис.39. Экранная форма проекта «Часы»


Private Sub Timer1_Timer()

Dim h As Integer

Dim m As Integer

Dim s As Integer

Dim n As Integer

h = Hour(Now) ‘ текущий час

m = Minute(Now) ‘ текущая минута

s = Second(Now) ‘ текущая секунда

n = Int(m / 12)

Text1.Text = Format(Now, "hh:mm:ss") ‘ вывод текущего времени

Picture1.Scale (-5, 5)-(5, -5)

Picture1.Cls ‘ очистка графического окна

Picture1.BackColor = vbCyan

Tsiferblat ‘ вызов процедуры вычерчивания циферблата

Picture1.DrawWidth = 1 ‘ вычерчивание секундной стрелки

Picture1.Line (0, 0)-(4 * Sin(6 * s * 3.14 / 180), 4 * Cos(6 * s * 3.14 / 180)), vbRed

Picture1.DrawWidth = 2 ‘ вычерчивание минутной стрелки

Picture1.Line (0, 0)-(3.5 * Sin(6 * m * 3.14 / 180), 3.5 * Cos(6 * m * 3.14 / 180)), vbBlack

Picture1.DrawWidth = 3 ‘ вычерчивание часовой стрелки

Picture1.Line (0, 0)-(3 * Sin((30 * h + 6 * n) * 3.14 / 180), 3 * Cos((30 * h + 6 * n) * 3.14 / 180)), vbBlack

End Sub

 

Рис.40. Текст процедуры Timer1_Timer()

 

Задача решается с помощью использования объекта Timer (см. раздел 10) . Экземпляру этого объекта, размещенному на форме присвоено имя Timer1.

Свойству Interval этого объекта задано значение 1000 мс (то есть одна секунда). Процедура Timer1_Timer() запускается через каждую секунду. Текст ее представлен на рис.40.

Текст процедуры Tsiferblatпредставлен на рис.41. С помощью этой процедуры прорисовывается элементы циферблата. Толстыми желтыми точками по окружности радиуса 4 показаны 12 часовых меток, между ними – четыре черные точки. Рядом с желтыми точками выведены числа от 1 до 12.

 
 


Sub Tsiferblat()

Dim i As Byte

For i = 0 To 60

If i Mod 5 = 0 Then

Picture1.DrawWidth = 5 ‘

Picture1.PSet (4 * Sin(6 * i * 3.14 / 180), 4 * Cos(6 * i * 3.14 / 180)), vbYellow

Else

Picture1.DrawWidth = 3

Picture1.PSet (4 * Sin(6 * i * 3.14 / 180), 4 * Cos(6 * i * 3.14 / 180)), vbBlack

End If

Next i

Picture1.DrawWidth = 1

Picture1.FontSize = 16

For i = 1 To 12

fi = (60 + i * 30) * 3.14 / 180

X = 4.5 * Cos(fi) - 0.3

Y = 4.5 * Sin(fi) + 0.3

If i < 4 Then

X = X - 0.2

End If

Picture1.PSet (X, Y), vbCyan

Picture1.Print 13 - i

Next i

End Sub

 

Рис.41. Текст процедуры Tsiferblat

 

Примечание. Рассмотренные в этом разделе проекты были выполнены студентами при изучении курса «Программирование и начала алгоритмизации». Следует отметить, что эти и другие задачи можно решить многими способами. Приведенные программные коды являются возможными вариантами решений и не претендуют на оптимальность в каком-либо смысле.

 

Рекомендуемая литература

 

1. Агеев В.Н. Информационное обеспечение систем управлении: учебное пособие / В.Н.Агеев.– М., 2009.– 162 с.

2. Курилович В. Visual Basic / В. Курилович.– М., 2006.– 284 с.

3. Сайлер Б., Споттс Дж.Использование Visual Basic 6 / Б. Сайлер, Дж.Споттс.– М., 2008.– 830 с.

4. Программирование и основы алгоритмизации: лабораторные работы.– М.: МГУП, 2009.– 38 с

 







Читайте также:

Последнее изменение этой страницы: 2016-03-17; Просмотров: 110; Нарушение авторского права страницы


lektsia.com 2007 - 2017 год. Все права принадлежат их авторам! (0.016 с.) Главная | Обратная связь