Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Вычисление числа p методом Монте-Карло⇐ ПредыдущаяСтр 12 из 12
Задача: с помощью датчика случайных чисел вычислить координаты 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; Просмотров: 1342; Нарушение авторского права страницы