Компьютерные модели, построенные с использованием метода Монте-Карло, на языке Pascal
Разработаем на языке Pascal компьютерную модель, позволяющую методом Монте-Карло определять площадь круга и число п.
Проект "Методом Монте-Карло" на языке Pascal.
1. Поместить на форму:
• графическое поле Image1, в котором будет отображаться процесс случайной генерации точек;
• два текстовых поля: Editl — для ввода радиуса окружности и Edit2 — для ввода количества генерируемых точек;
• надпись Labe11 для вывода значения площади круга;
• надпись Label2 для вывода числа п.
2. Установить размер графического поля: с помощью окна Object Inspector присвоить свойству Size значение 2 0 0; 2 0 0.
3. Ввести в начало программного кода в оператор uses модуль Math, который обеспечивает подключение математических функций (Cos (), Tan () и т. д.).
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Math;
4. Поместить на форму кнопку Buttonl и создать для нее событийную процедуру TForml. ButtonlClick (), которая обеспечивает:
• стирание результатов предыдущего опыта;
• ввод значения радиуса окружности в переменную R;
• ввод количества генерируемых точек и присваивание его переменной N;
• генерацию случайных координат точек;
• рисование в графическом поле квадрата со стороной 2*R и окружности радиуса R;
• подсчет в переменной М количества точек, попавших внутрь круга;
• вычисление и вывод значений площади круга и числа п на надписи.
var R: integer; //радиус N: integer; //количество "брошенных" точек X: real; //координата точек X Y: real; //координата точек Y М: integer; //количество точек, попавших //в круг I: integer; //счетчик цикла procedure TForml.ButtonlClick(Sender: TObject); begin //Стирание Imagel.Canvas.Brush.Color := clWhite; Imagel.Canvas.Rectangle(100-R,100-R,100+R,100+R); Imagel.Canvas.FillRect(Rect(100-R, 100-R, 100+R, 100+R)); M:=0; //Ввод значений R:=StrToInt(Editl.Text); N:=StrToInt(Edit2.Text); //Рисование квадрата и круга Imagel.Canvas.Rectangle(100-R,100-R,100+R,100+R); Imagel.Canvas.Ellipse(100-R, 100-R,100+R, 100+R); //Генерация точек Randomize; For I:=l To N do begin X:=Random(2*R)-R; Y:=Random(2*R)-R; Imagel.Canvas.Pixels[Round(X)+100, Round(Y)+100]:=clBlack; If Sqr(X)+Sqr(Y)<=Sqr(R) Then M:=M+1 end; //ПлощадьLabell.Caption:=FloatToStr(4*Sqr(R)*M/N); //Число PI Label2.Caption:=FloatToStr(4*M/N); end; end.
5. Ввести радиус окружности и количество генерируемых точек. После щелчка по кнопке Пуск в графическом поле будет отображен процесс генерации случайных точек, а на надписи будут выведены значение площади круга и число п (см. рис. ниже).
Использованная литература :
Н.Д. Угринович Информатика и ИКТ 11 Класс
Автор статьи Деманин Роман 11 "A"