Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Решить задачи на pascal

влад фролов Знаток (273), открыт 3 часа назад
Помогите решить 8 задача на pascal
1 ответ
Андрей Высший разум (461524) 2 часа назад
 program p;
const dots = 10000000;
var i, cnt: longint;
x, y, r: real;
begin
randomize;
for i := 1 to dots do begin
x := random * 3 - 1.5;
y := random * 3 - 1.5;
if (sqr(x) + sqr(y) <= 2.25) and (sqr(x - 2) + sqr(y) >= 2.25) then
inc(cnt)
end;
write(18 * cnt / dots)
end.
Берём половину фигуры (в данном случае, правую).
Помещаем её в квадрат 3 * 3 (со сдвигом центра круга в начало координат - для удобства).
Раскидываем по квадрату случайные точки (в данном случае, 10 миллионов точек).
Считаем, сколько всего точек попало в фигуру.
Умножаем отношение попавших точек к общему кол-ву точек на двойную (половина фигуры) площадь квадрата.

P.S. Код проверен в компиляторе FreePascal: https://onlinegdb.com/C1ZVyoTWb . В других диалектах Pascal название типа "длинные целые числа" (необходимого для столь большого кол-ва итераций) может быть иным.

P.P.S. И да, я знаю, что в коде методологическая ошибка, вызванная особенностями ГСЧ в Pascal, но для учебной задачи, показывающей понимание метода Монте-Карло, сойдёт.
Похожие вопросы