1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ニフティグループAdvent Calendar 2018

Day 12

Google Blocklyを使って円周率を求める

Last updated at Posted at 2018-12-17

この記事はニフティグループ Advent Calendar 2018の12日目の記事です。

先日社内の新入社員研修で、プログラミング教育教材について企画・プレゼンを行いました。
その過程で知ったGoogle Blocklyで円周率を求めてみます。

#Google Blocklyについて
Google Blocklyとは、Googleが提供しているGUI操作でプログラミングを行えるOSSです。
図のようにマウス操作で図形を組み合わせることによってプログラミングが行えます。
プログラミングの知識がなくてもアルゴリズムを作ることができ、とても教育に役立ちそうです。

スクリーンショット 2018-12-17 21.21.34.png

#円周率の計算について
円周率を求める方法は以下のとおりです。

  1. 面積が1の正方形内のランダムな位置にM回点を打つ
  2. 原点からの距離が1以下になった回数をNとする
  3. 最終的に $ \frac{4N}{M} $ が求める円周率になる

細かい理論は割愛しますが、四分円の面積と正方形の面積の比が、四分円の内外に打たれる点の数の比と一致することを利用しています。
試行回数は多ければ多いほど精度は向上します。ちなみに、このように乱数を使って近似値を求める手法をモンテカルロ法と言います。

#実践
以下の様にブロックを組みました。
スクリーンショット 2018-12-17 21.34.42.png

試行回数 $M$ は100万回としています。
右上の実行ボタンを押して結果を見てみましょう。

スクリーンショット 2018-12-17 21.36.56.png

$\pi = 3.14264$ と計算できましたね。100万回の試行ではこの程度の精度になるようです。

ちなみに、組み合わせた図形を実際のプログラミング言語に変換することもできます。
Pythonの場合、以下のように出力されました。

import random

m = None
n = None
x = None
y = None


m = 1000000
n = 0
for count in range(int(m)):
  x = random.random()
  y = random.random()
  if x * x + y * y < 1:
    n = n + 1
print((n / m) * 4)

#最後に
Google Blocklyを初めて使ってみましたが、想像よりもだいぶすんなりと実装することができました。
実際にコーディングをしなくても、アルゴリズムやプログラミング的な考え方の学習は可能だと思います。
オープンソースなのでこれを使って何か作ってみたいですね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?