PROGRAMMING and OTHERS

スクラッチプログラミング入門、JAVA PROGRAMMING 入門 , 英語学習、ブログ開発など。

スクラッチ プログラミング---正多角形と円の描画

図 triangle-howは三角形の描画方法を示している。以下はその手順である。

正三角形の描画

スプライトの猫を小さくする(しなくてもよいが、見やすくするため)

  • ステージ画面の中を消す
  • 描画の線の太さを3にする
  • ペンを下す(描くため)
  • ペンの方向を90度(右方向)にする
  • 次の6)7)を3回繰り返す
  • 現在の猫(スプライト)の場所から長さ(=100)の線を引く。
  • 描画方向を120度左回転させる。

以上で正三角形を描画することができる。図 triangle-proはその描画プログラムであり、図 triangle-resultは実際の描画図である。

正方形の描画

図 triangle-howにおける外角120度を90度として、4回線を引くと正方形が描ける。

1)ステージ画面の中を消す

2)描画の線の太さを3にする

3)ペンを下す(描くため)

4)ペンの方向を90度(右方向)にする

5)次の6)7)を4回繰り返す

6)現在の猫(スプライト)の場所から長さ(=100)の線を引く。

7)描画方向を90度左回転させる。

以上で正方形を描画することができる。図 square-proはその描画プログラムであり、図 square-resultは実際の描画図である。

円の描画

上記を応用して、円を描くことを考える。一辺が非常に短い正多角形を非常に小さい角度の外角で方向を変えながら描くと円を描くことができる。以下の変数を用意する。

d:ある程度の大きさ、nで割って一辺の長さを決めるための数

n:正n角形を描くとする。nが大きければほとんど円に見える。

L:d/nで与え、一辺とする。nが大きければこの一辺は非常に小さい。

描く多角形は正n角形とする。そうすると、一辺Lの辺を描きながら、外角360/n度だけ描画方向を変えながら正n角形を描く。正方形の場合は360/4=90度づつ角度を変えるとよいから、正n角形の場合は360/nどづつ角度を変えればよい。

変数d,n,Lを宣言し、d=400, n=50, L=d/nとする

1)ステージ画面の中を消す

2)描画の線の太さを3にする

3)ペンを下す(描くため)

4)ペンの方向を90度(右方向)にする

5)次の6)7)をn回繰り返す

6)現在の猫(スプライト)の場所から長さLの線を引く。

7)描画方向を360/n度左回転させる。

以上で円を描画することができる。図 circle-proはその描画プログラムであり、図 circle-resultは実際の描画図である。

 

f:id:Kurokawa_Tomio:20190131180723j:plain

図 triangle-how

f:id:Kurokawa_Tomio:20190131180831j:plain

図 triangle-pro

f:id:Kurokawa_Tomio:20190131180927j:plain

図 triangle-result

f:id:Kurokawa_Tomio:20190131181019j:plain

図 square-pro

f:id:Kurokawa_Tomio:20190131181304j:plain

図 square-result

f:id:Kurokawa_Tomio:20190131181344j:plain

図 circle-pro

f:id:Kurokawa_Tomio:20190131181426j:plain

図 circle-result

 

スクラッチ プログラミング---リストと関数の利用

リスト(配列)を使用して平均値と標準の計算する

図7-1から図7-4は1,2,3,4,5の平均値と標準偏差をリスト(配列)を使用して計算させている。それぞれ、以下の働きをしている。

  • 図7-1 (main routine):

emptyを呼び、listを空にする。1,2,3,4,5の整数をlistに追加(末尾に追加)。関数aveと stdを呼ぶ。

  • 図7-2 (empty):

listを空にする関数。listの1番目のデータ(セル)がなくなるまで、そのセルを削除する

  • 図7-3 (ave):

listのデータの平均値を計算。答えは変数mに入る。

  • 図7-4 (std):

平均値mを使用して、listのデータの標準偏差を計算、答えはstdに入る。

 

このプログラムを作成するには、まず、「データ」の「変数を作る」を利用して変数i, m, s, stdを作成し、さらに「リストを作る」を利用してリストlistを作る。

 

リストとは配列に似た構造をしていて、変数がグループになっているものである。リストは作成したばかりの時は、名前だけが存在してデータも空のセルも存在しない。リストにデータを入れる時は通常末尾に追加という形で入れられる。まずセルを追加して、そこにデータを入れる。場所を指定して挿入することもできる。また、場所を指定して、そのセルを削除することができる(empty)。

scratch-topへ 

f:id:Kurokawa_Tomio:20190103120958j:plain

図7-1 main routine

f:id:Kurokawa_Tomio:20190103121209j:plain

図7-2 empty

f:id:Kurokawa_Tomio:20190103121352j:plain

図7-3 ave

f:id:Kurokawa_Tomio:20190103122131j:plain

図7-3 std

f:id:Kurokawa_Tomio:20190103122255j:plain

図7-5 入力データと結果

 

 

スクラッチ・プログラミング---数列と級数6:リストの操作、フィボナッチ数列

フィボナッチ数列は以下のように定義される。

 

    f(i)=f(i-1)+f(i-2) , ただし、f(1)=1, f(2)=1, i>2

 

上の定義は数列が以下のようになることを意味する。

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ...

 

つまり、一番目と二番目は1で、i番目はi-1番目とi-2番目の和である数列を意味する。

 

図6-1はフィボナッチの数列を7個発生させ、それをfiboというリスト(配列)に入れ、それを表示するプログラムである。図6-2はfiboリストの先頭に7つの数列がセットされた結果である。

 

このプログラムでは最初, 「データ」の「変数を作る」で変数f1, f2, f3を宣言し、さらに「データ」の「リストを作る」でfiboリストを宣言する。

プログラムの最初f1=1,f2=1として、f1をfiboに追加する。追加するとはリストの最後に空のスペースを作ってそこにデータを入れることである。図6-3の命令により、fiboの最初のスペースに1が入る。さらに、図6-4の命令によりfiboのそのあとに1が追加される。このあとは5回のループである。ループ内では以下のようにプログラムが働く。[

 

図6-5の命令によりがf(i) = f(i-1)+f(i-2)が実行され、図6-6の命令により、f(i)がリストの最後に追加される。図6-7では次のフィボナッチ数を生成するための準備である。すなわち、f1=f2; f2=f3として新しいf3を作るための準備である。すなわちf1が必要なくなったので、そのスペースを使ってデータをシフトしている。これが5回繰り返される。

scratch-topへ 

f:id:Kurokawa_Tomio:20181231182729j:plain

図6-1 フィボナッチ数列をリストの中に作る

f:id:Kurokawa_Tomio:20181231182915j:plain

図6-2 7 リストfiboの中の7個のフィボナッチ数

 

f:id:Kurokawa_Tomio:20181231183128j:plain

図6-3 最初の数をリストに入れる

f:id:Kurokawa_Tomio:20181231183458j:plain

図6-4  2番目の数をリストの最後に追加

f:id:Kurokawa_Tomio:20181231183643j:plain

図6-5 新しいフィボナッチ数を生成

f:id:Kurokawa_Tomio:20181231183754j:plain

図6-6 作成したフィボナッチ数をリストの最後に追加

f:id:Kurokawa_Tomio:20181231183908j:plain

図6-7 次のフィボナッチ数を生成するための準備

 

スクラッチ・プログラミング---数列と級数5:引数を使う関数

引数を使う関数によりmからnまでの合計を計算する

図5-1は整数1と10を関数waの引数として与え、関数waを呼び出すプログラムである。呼び出し側の引数は実引数と言われる。呼び出すと制御が図5-2の関数wa(m,n)に移る。その時、図5-1の関数の呼び出しwa(1,10)の1が図5-2のwa(m,n)のmにコピーされる。同じように10がnにコピーされる。図5-2は関数wa(m,n)の定義であり、これらの引数は仮引数と呼ばれる。実引数と仮引数の順番は一致していなければならない。引数の数にかかわらず、順番が同じ引数間でコピーが行われる。この例の場合、定義関数の中でmまらnまでの合計が計算され結果がsに入る。図5-3はステージ左上に表示された結果である。

 

定義関数の中で、sをi (始めi=m)づつ変化させ、iを1づつ変化させる。これをi>nになるまで繰り返す。そうするとsにmからnが加算される。

 

以下スクリプトの作成:

1.「イベント」から「旗がクリックされたとき」を選びスクリップトエリアに移動させる。

2.「データ」の中で、i,sを宣言する(変数プログラム(図5-1, 図5-2)全体で有効)。

3.「その他」の「ブロックを作る」をクリック、枠がでるので、そこに「wa」と入力し、さらに、オプションをクリックして、数値の引数を追加を2度クリックし(引数に数が2であるので)、引数名を編集して、この場合はmとnにし、OKをクリックする。「その他」の中に「wa(1,1)」ブロックができるので、これを図5-1のように繋げる。

  • スクリプトエリアには図4-2のようにwa(m, n)の先頭ブロックがきる。
  • そこで、図5-2のように関数wa(m, n)の本体を完成させる(合計が計算できるように)。
  • 「データ」の変数i, sにをチェックを入れておく。これは表示させるため。

 

*実行すると、図5-3のように結果が表示される。答えはs=55である。

 

 

scratch-topへ 

f:id:Kurokawa_Tomio:20181230193331j:plain

図5-1 メイン・プログラム 関数wa(m,n)の呼び出し

f:id:Kurokawa_Tomio:20181230194253j:plain

図5-2 関数wa(m,n)の定義

f:id:Kurokawa_Tomio:20181230194452j:plain

図5-3 結果s=55

 

 

スクラッチ・プログラミング---数列と級数4:関数による計算

関数によりmからnまでの合計を計算する

図4-1は整数mとnをプログラム内で与えて、mからnまでの整数の合計を計算するプログラムである。ただし、合計を計算する部分は関数(プログラマーが独自に作ったプログラムブロック)で計算するようにしてある。すなわち、「和」というブロックで計算させている。「和」は関数名である。図4-1の「和」は図4-2の「和」を呼び出して、実行している。図4-2の和が関数の定義と言われるブロックであり、図4-1の「和」は「呼び出し」である。すなわち、図4-1の「和」を呼び出すと、図4-2の「和」の先頭に制御が移り、関数「和」が実行される。

 

m=1 n=10であるので、m(=1)からn(=10)までの合計が計算されて、ステージ左上にi (=11),  s(=55), m(=1), n(=10)として示される。合計はs(=55)である。

 

このプログラムを作るには4つの変数(i, s, m, n)を宣言して、mと nに数値を設定し、関数「和」を呼び出す(コールする)。関数「和」ではiはmからnまで動く制御変数で、sは合計になる。

 

sをi (始めi=m)づつ変化させ、iを1づつ変化させる。これをi>nになるまで繰り返す。そうするとsにmからnが加算される。

 

以下スクリプトの作成:

1.「イベント」から「旗がクリックされたとき」を選びスクリップトエリアに移動させる。

2.「データ」の中で、i,s,m,nを宣言する。

3.「データ」の中のコマンドを使って以下の命令を並べえる

「mを1にする」

「nを10にする」

  • 「その他」の「ブロックを作る」をクリック、枠がでるので、そこに「和」と入力しENTER
  • 「その他」の中に「和」ブロックができるので、これを図4-1のように、繋げる。
  • スクリプトエリアには図4-2の先頭ブロック(定義 和)ができる。
  • そこで、図4-2のように命令をつなげる(関数を使わないときと同じ)
  • 「データ」の変数i, s, m, nにをチェックを入れておく。これは表示させるため。

 

*実行すると、図4-3のように結果が表示される。答えはs=55である。

 

*図4-2全体が関数「和」の定義と言われるものである。

scratch-topへ 

f:id:Kurokawa_Tomio:20181229175757j:plain

図4-1 メイン・プログラムと関数の呼び出し

f:id:Kurokawa_Tomio:20181229180021j:plain

図4-2 関数「和」の定義

f:id:Kurokawa_Tomio:20181229180145j:plain

図4-3 結果