ニンジンのつりあい    作品例:ニンジンのつり合い.mwx
てんびんのつり合いは、「うでの長さ × 重り」の計算でつり合いがわかりました。
ニンジンのつり合いを考えるときは、どうしたらよいかプログラミングで考えよう。
<学習内容>
・手順の構造化を考える
・手順(関数)を使う効率の良さを考える
・くりかえしを関数で使う考え方
・テキストボックスを変数として使う考え方
  を左クリックすると ニンジンがつり合うまで、が移動します。
<考え方>
・うでのある位置の重りの重さは、ニンジンの場合は、その位置の断面積(だんめんせき)になります。
・ニンジンの断面(だんめん)の直径が2倍になると、面積は2×2なので、4倍になります。


<プログラミング> ニンジンのつり合いのもとを 左クリックしてはじめましょう。 


1.つり合いのプログラムの流れを構造的に考える
どのようにして、つり合いを調べるか、流れを考えます。全体のプログラムを手順に分け、【初期設定】【メインルーチン】【サブルーチン】として全体の構造を考えます。
(ア)最初は、中央に支点を置く。 → 支点とするカメを「0 0」に置き、横の位置をGTとする。  【初期設定】
(イ)  支点の位置を移動する。 → 移動する前の支点の位置をGTbkとし、その前の支点の位置をGTbk2とする。   【メインルーチン】
左回転と右回転が同じ力になったら終了する。 → 支点の位置がGTbk2と同じになったら stopall する。 
(ウ)支点から左側の左回転しようとする力を考える。 → mL という手順(関数)にすることにする。 【サブルーチン】 
(エ)支点から右側の右回転しようとする力を考える。 → mR という手順(関数)にすることにする。 【サブルーチン】 
それぞれの流れを手順(関数)として、仕上げていきます。このように手順(関数)に分けて作ってから、全体を組み立てるという作業を構造的に考えることでプログラミングの効率が上がり、大きなプログラムを作ることができます。
2.つり合いのプログラムを考える
(1)GOで始める(ア)の流れをプログラミングする。
 英語  日本語
to GO
everyone[setpos [0 0]]
setGT 0
setGTbk 0
setGTbk2 0
GG
end
手順は GO
全部「位置は「0 0」」
GTは 0
GTbkは 0
GTbk2は 0
GG
終わり
(2)(イ)の流れをプログラミングする。 
 英語  日本語
to GG
g, setx GT
setmL2 0 mL LL + GT
setmR2 0 mR LL - GT
ifelse mL2 - mR2 > 0 [setGT GT - 1][setGT GT + 1]
if GTbk2 = GT [stopall]
setGTbk2 GTbk
setGTbk GT
GG
end
手順は GG
g、 横の位置は GT
mL2は 0 mL LL + GT
mR2は 0 mR LL + GT
もしどちらかを mL2 - mR2 > 0 「GTは GT - 1」「GTは GT + 1」
GTbk2は GTbk
GTbkは GT
GG
終わり
(3)(ウ)の流れをプログラミングする。 
 英語  日本語
to mL :mm
k, setx GT
dotimes [i :mm ]
[
setmL1 0
setx xcor - 1
 repeat HH
 [
 fd 1
 if colorunder > 1 [setmL1 mL1 + 1]
 ]
sety 0
if mL1 < 1 [stop]
setmL2 mL2 + mL1 * (:i + 1) * mL1 * (:i + 1)
]
end
手順は mL :mm
k、 xは GT
それぞれの数字をやる 「i :mm」

mL1は 0
xは 横の位置 - 1
 くりかえす HH
 「
 前へ 1
 もし 下の色 > 1 「mL1は mL1 + 1」
 」
yは 0
もし mL1 < 1 「止まる」
mL2は mL2 + mL1 × (:i + 1) × (:i + 1)
」終わり
 
(4)(エ)の流れをプログラミングする。  
 英語  日本語
to mR :mm
k, setx GT
dotimes [i :mm ]
[
setmR1 0
setx xcor + 1
 repeat HH
 [
 fd 1
 if colorunder > 1 [setmR1 mR1 + 1]
 ]
sety 0
if mR1 < 1 [stop]
setmR2 mR2 + mR1 * (:i + 1) * mR1 * (:i + 1)
]
end
手順は mR :mm
k、 xは GT
それぞれの数字をやる 「i :mm」

mR1は 0
xは 横の位置 + 1
 くりかえす HH
 「
 前へ 1
 もし 下の色 > 1 「mR1は mR1 + 1」
 」
yは 0
もし mR1 < 1 「止まる」
mR2は mR2 + mR1 × (:i + 1) × (:i + 1)
」終わり
(5)   を左クリックすると ニンジンがつり合うまで、が移動します。