ラベル Scratch の投稿を表示しています。 すべての投稿を表示
ラベル Scratch の投稿を表示しています。 すべての投稿を表示

2018年6月18日月曜日

子供にプログラミングを学習させる必要ってあるの?

最近、「子供にプログラミングを勉強させたい」というような話を聞くことがあります。
昔と比べると、習い事としてのプログラミング教室などもあるようで、プログラムの敷居が下がってきたなと思います。

ただ、私個人としてはプログラミングを小さな頃から学ぶ必要があるかと言われると、あまり必要性を感じません。

もし、お子さんが「プログラミングをやってみたい」というなら、プログラミングを学べば良いと思います。
でも、親が習わせたいということが理由であればお勧めできないと思います。
今回の話は「親が子供にプログラムを習わせたい」ということについて書いています。

この記事では、小、中学生やそれ以下の子供にプログラムを学習させることについての、見解を書いています。
高校、大学生であれば、本記事で述べている子供ではありません。

1.プログラムを学習するメリットとは?

貴方の考えるプログラミングを学習することのメリットは何でしょうか?
  • 論理的な思考が身につく
  • 学校の授業で使うことになるから
  • もの作りの楽しさを体験できる
おそらく、このようなことがを考えて居られるのではないかと思います。

1.1.論理的な思考が身に付くのか?

まず、論理的な思考が身につくか?
と言われれば、まずは国語力に力を入れるべきかと思います。
論理的な思考力が身につくかのではなく、論理的な思考力がないとプログラミングは出来ない。のほうが正しいと思います。
ですので、あまりに小さなうちからプログラミングの勉強をしても、あまりスキルの上達は望めないのではないでしょうか。

1.2.学校の授業で有利になるのか?

次に、学校の授業でプログラムが使用されることも、授業の一貫として組み込まれるだけのようです。なので、プログラムがわからないからテストで点がとれないというようなことはないと思います。
プログラムをするくらいなら普通に授業を受けた方がテストには良いでしょうね。
大学や専門学校などの情報処理の授業では、経験者と未経験者では圧倒的に差が出ます。ただし、『プログラムの本を見て勉強しました』のようなレベルの人は、所詮、付け焼き刃レベルなので、あまり意味ないと思います。

1.3.ものづくりの楽しさを学べる

最後に、もの作りの楽しさを感じることができることについて。
個人的には、これがプログラムの醍醐味だと思います。
ただ、小学生くらいの年齢なら、プログラム以外にも色んなもの作り体験があると思います。
僕は小学生の頃はプラモデルにハマってたし、よくわからないガラクタもたくさん作りました(笑
こういうのって、親が先導するものじゃなくて、自分でやりたいものをやる方が楽しいですよね~

そんな感じで、ボクとしては親が主体としたプログラミング学習はあまりオススメしません!

2.子供がプログラムをやりたいと言ってきたら?

本人にやる気がある場合はどうでしょう?

感覚的には、
プログラムをやってみたい=新しいおもちゃが欲しい
くらいの感覚で受けとるのが良いと思います。

たぶんお子さんのイメージしてるプログラムってのは、『なんかゲームとか作れて面白そう』くらいのことだと思うので。
本格的なプログラムを作るというのは、それなりに大変だし、いきなり習い事として学習させるほどのこともないかなと。
まずは安価に出来る方法で検討してみたら良いかと思います。

個人的には、本サイトでも紹介しているscratchが無料で遊べるため良いのではないかなと思います♪
ハイスペックなパソコンでなくても動作するので、ご自宅にパソコンがあるなら、すぐにでも使うことができます。

他にはNintendo Laboなんて、プログラムの入門としても最適なんじゃないでしょうか?
(私はやったことないですけど。。。)
Nintendo Laboの対象年齢とプログラムの入門では対象年齢が近いんじゃないかと思っています。

もし、お子さんがscratchやNintendo Laboにハマっているようなら、その子はプログラムに向いているのではないかと思います。
プログラムはテレビゲームのようにルールがあったり、感動できるストーリーがあったり、ゲームクリアがあるものではありません。
なので、参考書に書いてあることをただ真似るのではなく、応用したり新しく作りたいものを創造することが必要です。
プログラムは誰かに指示されたものを作るのではなく、作りたいと思ったものを作る、自己満足の世界です。
そういうことをせずに、参考書などを真似して数週間で『飽きた』というレベルなら、それ以上の環境をつくってあげなくても良いかと思います。

逆に、scratchやNintendo Laboなどにはまっているようなら、プログラム向いている子なんじゃないかなと思います。
そうであれば、高校や大学に入ってから『プログラムがやりたい』とあらためて言ってくると思います。
そのときは必要な環境などを整えてあげればよいかなと思います♪

2018年4月2日月曜日

Scratchでプログラミング その26 円を描く

Scratchの使い方解説です、今回の難易度は超Easy
スクラッチアートのツールの色が綺麗だったのですが、絵心が無いのでプログラムで綺麗な円を書いてみようと思います。


ペンツールを使って円を描いてみます。




Scratchで円を描くにはペンツールを使用するので、三平方の定理を利用してみました。

なんかこんなのを高校の数学で習った気がします。


この式を、yを求める式にしたものは以下のようになります。


この数式を利用して、x座標を少しずつ変えながら、y座標の値を求めていき、
その座標をつなげることで、円を描きます。

スクラッチでy座標を求める式を表現するとこんな感じです。

式中の「r」は半径のことです。
この式のdxを少しずつ動かすことで、dyを計算します。

これは、半径rの円について、座標を計算するためのプログラムです。

dxには半径分の座標を細かく分けた座標が指定されます。
プログラム中の「細かさ」の数値が大きくなるほど、円が綺麗に描かれることになります。




上記の式は、実際には円の4分の1しか描画されません。


さきほどの計算で取得できる座標は常に正の数です。
x座標、y座標が両方とも正の数なので、円の右上の4分の1の座標を計算するための式になっています。

実際にはy座標が負の数値の座標の取得も必要になります。
x座標についても、同様にマイナス側の座標の計算が必要です。
そのため、円の作成には、4パターンの座標をつなげました。



今回のサンプルでは関数も使用しています。
そちらも今度記事にすると思いますが、今回はここまで。

サンプル010 円を描く
https://scratch.mit.edu/projects/213084309/



2018年3月17日土曜日

Scratchでプログラミング その25 うまく動かないときの対処方法(全角や空白に注意)

Scratchの使い方解説です。
せっかく作ったプログラムが、うまく動かないときの対処方法について


せっかく作ったプログラムを実行してみたとき、うまく動かないことってありますよね?
そんなときの確認事項について


これはネコがグルグル回転するプログラムです。
ネコをクリックすると回転方向が反対になります。

ですが、これはネコをクリックしても回転方向が変わりません。
なぜでしょう??


※このプログラムはバグを含めて、正しく動かないようにしています。
実際のソースはこちらから確認してください。
中を見るボタンをクリックすると、プログラムのコードが確認できます。


1.問題がありそうなのは左右のどちらのブロック?

旗をクリックした時点で、ネコは右方向に回っています。
ですので、左側のブロックは正しく動いています(と仮定します)


2.部分的に実行してみる。

スプライトをクリックしたときに変数が1になれば、回転方向は変わるはずです。


そのまま実行したまま、個別に実行したい場所のブロックを抜き出してみます。
今回は「変数1を1にする」を抜き出してみました。
抜き出したブロックをダブルクリックすると、ネコが反対方向に回りだしました。

ということは、このコマンドは正しそうです。

残る怪しい場所は、
「もし変数1=0なら」
の部分ですね。
どこがおかしいんでしょうか?


 3.制御式の値に注意!

実は、この「変数1=0」の0という数値が、半角の0ではなく全角の0となっています。
見比べてみると、

半角のゼロ → 「0」
全角のゼロ → 「0」

ぱっと見は同じですが、プログラムの世界では全くの別物です。

数値だけではなく文字も同じように全角と半角に区別があります。

アルファベットの場合
半角のA → 「A」
全角のA → 「A」

空はく(スペース)の場合
半角の空白 → 「 」
全角の空白 → 「 」

こういうのも気づきにくいですね
ただしい文字列 → 「あいうえお」
先頭や文末や空白を含んでいる → 「 あいうえお 」
なかに空白を含んでいる → 「あいう えお」 


2018年3月12日月曜日

Scratchでプログラミング その24 スクラッチアートツールを作る

Scratchの使い方解説です、今回の難易度は超Easy
前回のペイントツールの続きです。


前回作成したペイントツールは、機能しますが色の切り替えとかが含まれていないので、あまり使っても楽しくないですね・・・

正攻法でイイカンジのペイントツールを作っていくのもいいですが、スクラッチアートを作成するペインタを作ってみました。

スクラッチアートとは、黒い紙を削りながら絵を描いていくもので、黒い紙を削っていくと、カラフルな色が出てくるやつです。
scratchでスクラッチアートとか、完全オヤジギャグですみません・・・

本来の仕組みとは違いますが黒背景のパレットにカラフルペンで色をつけて表現してみます。

0.目次


  1. 変数の作成
  2. 色の設定


1.変数の作成

作り方は基本的にはペイントツールと同じです。
これは前回のペイントツールのプログラムです。

今回はペンの色をカラフルにするため変数とします。
データの「変数を作る」でペンの色という変数を用意しました。
そして、ペンが下りているときに色を指定するようにしています。

同様に、太さという変数も用意しています。

2.色の設定

ペンの色を指定します。
ペンの色をグラデーションのようにしたかったので、下のような式を用意しました。
マウスのx座標はscratchでは-240~240の範囲となっています。
ですので式の左半分がとりうる値は、-50~50の値となります。
Y座標も同様の式としています。
この式で画面の位置によって、-100~100までの数値を表現しています。

ペンの色の範囲は調べてないですが、きっとこのあたりでしょう(汗

この式をプログラムに追加して完成!
使ってみたら、簡単なわりに面白いものになってました☆

せっかくなら、元に戻すコマンドとかも実装できたらいいですね~



2018年3月11日日曜日

Scratchでプログラミング その23 ペイントツールを作る

Scratchの使い方解説です、今回の難易度は超Easy

記事をまとめたページはこちら。

Scratchはプログラム処理の中にペンという項目があったので使ってみました。

0.目次

  1. ペンの使い方を確認する。
  2. マウスの動きに合わせて線を引く
  3. マウスが押されているときに線を引く
  4. 改良するには?

1.ペンの使い方を確認する。


動きの確認のために、このような処理をネコに書いて見ます。


実行すると、ネコが移動したあとに線が引かれました。

どうやら「ペンを下ろすを」使うと、スプライトの後ろに線が引かれました。

これを利用してペイントツールを作ってみようと思います。
ペイントツールなので、マウスクリック時に線が引ければOKということにします。

2.マウスの動きに合わせて線を引く

ネコのスプライトが表示されていると邪魔なので見た目の「隠す」でスプライトを非表示にします。
また、ネコが表示されなくなるため、イベントのスタートを「旗がクリックされたとき」に変更しました。
最初のプログラムを改良して、スプライトをマウスポインタの位置へ移動させました。

これで、マウスに追従して、線が引かれるようになりました。

マウスの動きに合わせて線が引かれるようになりましたが、
いまの状態では、常に線が引かれっぱなしです。


3.マウスが押されているときに線を引く

次に、お絵かき用のペイントのイメージに近づけるためにマウスが押されている間だけ線を引くように変更します。

制御の「もし~なら○○、でなければ~」を使って、条件として調べるの「マウスが押された」を設定します。
そして、中にペンの「ペンを下ろす」「ペンを上げる」を追加しました。


これで動作しますが、旗をクリックしたときに書いた線が消えるように、処理の最初にペンの「消す」を追加します。



これでペインタの完成です。


4.改良するには?

解説はこれで終わりですがペイントツールとするなら、線を太くしたり、ペンの色を変更したりできたほうが良いですね。これらの機能はペンに含まれているので、簡単にプログラムを追加できるかと思います。

少し難しいのは、消しゴムを作ることかな?どうやったら良いでしょうか??
(背景があると大変かも!!)


今回のサンプルも公開しました。
色の変更なども追加してあります。

サンプル008 ペイント
https://scratch.mit.edu/projects/208860277/




2018年3月9日金曜日

Scratchでプログラミング その22 学校教材っぽいやつ リンゴが地面で跳ね返る

Scratchの使い方解説です、今回の難易度はEasy
前回のリンゴの落下シミュレーションの続きです。

記事をまとめたページはこちら。

前回は地面に落下するリンゴのシミュレーションをしました。
今回は地面で跳ねるようにします。

ものが地面に当たると跳ね返りますよね。
跳ね返るときは反発係数(だったかな?)によってどのくらい跳ねるかが変わります。


前回作成したプログラムです。
ここに今回は追記していきます。



0.目次


  1. 地面に当たる
  2. 跳ね返りを表現
  3. 当たり判定の計算方法


1.地面に当たる

地面に当たるとは、どういうことでしょうか?
リンゴの位置が、一定の高さになったとき地面に落ちたと考えることにします。

画面の下のあたりのY座標は-150くらいでした。
ですので、Y座標がー150より小さくなった場合に地面に当たったと判定します。

2.跳ね返りを表現

跳ね返ると、リンゴはどうなるでしょう?
地面にあたった瞬間に、いままで下方へ進んでいたリンゴは上方へ移動していきます。

これを公式で表現すると、上へものを投げたのと同じですね。
ここで先に用意していた変数の値を、条件に見合うように変更します。

まず、初期位置を変更します。
先ほどまでは天井が初期位置でしたが、跳ね返るので初期位置を地面に変更します。
地面はY座標なのでー150になります。

次に初速度を変更します。
最初は自由落下だったので初速度は0でしたが、跳ね返ったので最初から速さがあります。
今回は跳ね返った瞬間の速度をー0.6倍した値に変更しています。
マイナスがつくのは、反対方向(上方)へ向かう速度に変更するためです。
0.6は反発係数ですが、特に意味はありません。
リンゴの反発係数は知らないので、仮の値を設定しています。
実際のリンゴに近づけるなら、もうちょっと数値を変えてみたら良いと思います。

最後に条件を地面からスタートに変更したので、経過時間をリセットします。

プログラムにするとこんな感じです。


最初の判定式はy座標<-151としています。
これは俗に言うあたり判定をおこなっています。
プログラムを正しく動かすには重要なのですが、初心者には難しいと思うので、下に追記で書いておきます。


この追加したブロックを、シミュレーションの最後に追加しました。

これで完成!
リンゴが地面で跳ねるようになりました☆

実際のサンプルがこちらになります。
https://scratch.mit.edu/projects/207611887/


3.当たり判定の計算方法

ここからは興味がある人用です。
今回のプログラムでの地面に当たったかどうかの判定式はy座標<-151としています。


これは地味に重要です。
地面をー150と設定したのに、なぜy座標=-150じゃないのでしょうか?

まず演算が=(イコール)を使用しないのは、y座標が必ずー150ジャストになる保障がないからです。
位置の計算結果は整数になるわけではないので、計算のタイミングでy座標は-150.1などとなることもあります。ですので地面よりも低い位置として不等号での判定をしています。

また判定式にはー150ではなく-151を使用しています。
そして、条件にあった場合に、Y座標をー150に変更しています。
これは、連続で跳ね返り処理が行われないようにするための対策です。

シミュレーションでは少しずつ時間を進めながら、繰り返し位置を計算していきます。
今回は、地面に跳ね返った瞬間に速度にー0.6を掛けています。

条件によっては、跳ね返った計算のあと、次の計算までにリンゴの位置が-150まで達していない可能性があります。
その場合、連続でリンゴの跳ね返り処理が繰り返しされてしまいます。そうなると計算のたびに速度の符号が反転していきます。
これは意図した動きではないので、跳ね返り処理を行う際には、位置を判定式の範囲外であるー150に変更しています。
うーん、言葉ではわかりにくいですね。。。
詳しく考えたい人は、この条件を書き換えてプログラムを作ってみてください!

2018年3月8日木曜日

Scratchでプログラミング その21 学校教材っぽいやつ リンゴの落下シミュレーション

Scratchの使い方解説です、今回の難易度はEasy

記事をまとめたページはこちら。


今回も数式の再現してみます。
リンゴの落下シミュレーションをしてみます。



0.目次


  1. 公式の確認
  2. 初期値の設定
  3. 落下シミュレーション

1.公式の確認

高校で物理を習った人、重力の公式って覚えていますか?

速度=初速度+加速度×経過時間
位置=初期位置+初速度×経過時間+加速度×経過時間×経過時間÷2

という公式を習ったのではないかと思います。
これをそのままプログラムで再現してみます。

空中に浮いているリンゴをクリックすると、リンゴが重力に引かれて落下する様子をシミュレーションします。

2.初期値の設定

今回はネコではなくリンゴを使用します。
新しいスプライトからリンゴを選択します。



次に公式の再現に必要な変数を用意します。
データの「変数を作る」で変数を用意します。




速度
初速度
加速度
経過時間
位置
初期位置
公式で使ってるものをすべて変数で用意しました。


ここからプログラミングに本格的に入っていきます。
まずはイベントの「旗がクリックされたとき」で各変数の初期値を設定します。
「初期位置」の160は、画面上で上のほうの座標を適当に設定しました。



加速度は重力なので-9.8を設定しています。
これは公式のオキマリの値です。

3.落下シミュレーション

次に今回のメイン、落下するリンゴをプログラムで表現します。
イベントの「スプライトがクリックされたとき」を使用します。


今回は落下するアニメーションを作るので、
制御の「ずっと」で囲み変数の「経過時間」を0.2ずつ増やしています。
この0.2は特に意味はありません
シミュレーションの速さを早くしたければ、数値を大きくすればOKです。

次に、速度と位置を計算しています。
※今回のシミュレーションでは速度は実際には計算しなくても問題ありません。
次回の記事の布石です。

演算式はガリガリのゴッテゴテの式になっていますが、ただの物理の公式です。
演算のブロックを利用して式を表現しています。

最後にy座標をさきほど計算した「位置」に変更しています。

今回のプログラムはこうなります。



これまでに紹介したプログラムに比べると、比較的簡単なロジックですね。
これをそのまま実行すると、上にあったリンゴがクリックすることで下に落ちていきます。


最初はゆっくりと動き出し、時間の経過とともにスピードが速くなっていくことが視覚的に見てとれるのではないでしょうか。

大学などで延慶を行う場合、このようなシミュレーションをする場合があります。
実際には摩擦とか弾性とか、その他、もっとマニアックな条件を沢山登録することになりますが、やることはこのプログラムのように公式をシミュレーションすることが多いと思います。



2018年3月5日月曜日

Scratchでプログラミング その20 学校教材っぽいやつ どちらが早い?

Scratchの使い方解説です、今回は作成法を記載していません。
需要があるようなら公開しますが、特に新しいことはしていません。




前回、学習教材ぽいものを作ろうとして速度の時速と分速の変換プログラムを公開しました。
でも、実際の教材としてはこんな感じのもののほうが、利用しやすいんじゃないでしょうか?

https://scratch.mit.edu/projects/204816373/

小学校のころの速度の計算の問題イメージで作りました。
画面の矢印をクリックすると、ネコが動き出します。

【問い1】
速度3mで進むネコAと速度5で進むネコBが居ます。
ネコBはネコAよりも10の時間だけ待ってから動き出します。
距離100まで先に到着するのはどちらのネコですか?

のような問題を、むかーし勉強したような気がします。
どちらの電車が速いのか?みたいな問題だったような?

こういう問題は視覚化して確認できると良い様な気がしますね。

今回のプログラムではネコの速さと待ち時間、移動距離はユーザが変更できるようにしておきました。
本当の教材なら、ネコは動きっぱなしよりも1秒ごとに停まって、位置を確認できるほうが、ゆっくり確認できて良い様な気がします。



2018年3月4日日曜日

Scratchでプログラミング その19 学校教材っぽいやつ 時速を分速にする(公式を利用する・文字を結合する)

Scratchの使い方解説です、今回の難易度はEasy

記事をまとめたページはこちら。

将来的に学校でプログラミングを使った授業をしていくということで、
どんなことに使うのかなと。

今回は単純な速度の変換プログラムです。
時速を入力すると、分速や秒速に変換してみます。


決まった速度の計算をするだけではプログラムとしてイマイチなので、
ネコをクリックすると、ユーザが指定した時速を分速に変換するようにしようと思います。

0.目次

  1. ユーザから設定可能な変数の準備
  2. 計算結果の表示
  3. 答えっぽく言わせる

1.ユーザから設定可能な変数の準備

ユーザが入力する方法はいくつかあると思いますが、今回は変数をそのまま使えるようにします。
データの「変数を作るボタンから変数を作成します。
今回は変数名を「時速(km)」としました。

変数を作成すると、画面上に変数が表示されると思います。


この変数を何度かクリックすると、下にバーが表示されるようになります。
このバーを動かすと、変数の値が変更できます。
今回は、このバーを使って速度を決めてもらうことにします。

このサンプルでは時速36kmを指定しています。

2.計算結果の表示

時速と分速の変換は、時速÷60ですね。
今回はそれをネコに話させるだけです。

今回はイベントの「旗がクリックされたとき」ではなく「このスプライトがクリックされたとき」を使用しました。
これは、いちいち旗をクリックしなくても、ユーザが変数を何回も変更して再計算できるようにするためです。
結果の表示には見た目の「Hello!と言う」を使用しています。
で、Hello!の部分を計算結果に置き換えました。

計算結果は演算の「□/□」を使います。
「/」は「÷」の意味です。
これってプログラムでは常識ですが、一般的にどうなんだろう??

3.答えっぽく言わせる

ここまでで、計算結果をネコに話すようにできましたが無愛想です。
まずは、ユーザが指定した時速を話してもらいます。

単純につなげるとこんな感じ。

もちろん、こんな無愛想な感じになります。

無愛想な36じゃなくて「時速36kmは・・・」とかって表示したいですよね。
こんな風に文字を繋げて話させたいときは演算の「HelloとWorld」を使用します。

Helloの側に”時速”と文字を入れ、Worldの側に時速を入れます。

さらに組み合わせた文字の後ろ側に”kmは"をつなげます。

全部つなげると、こんな感じになりました。

これで、ネコの愛想がよくなりました。

答え側も同様に修正します。

 
 

今回作成したサンプルは以下で公開しています。
https://scratch.mit.edu/projects/207564242/
サンプルでは他にもkmをmに変換したり、秒速からの変換もできるようにしました。

4.勉強になるのかな?

今回作成したプログラムは動きも何もない簡単なものです。
学習教材ぽさをイメージして、一番簡単に作れそうなものということで公式を計算するプログラムを作りました。
やってることはExcelでも出来ることですね。

本当はもっと「視覚的に何かを検証できるもの」が面白いと思いますが、
作成難度が高いので、簡単なものとして作ってみました。

今回意識したのは、ただ単に公式を使うことでどんな数値を入れても答えが導き出せることを理解することができるかなって感じです。