Scratchで数を読むプログラムを作る
カリキュラム
hr.icon
(2けたのかずをよむ」をもとに説明します)
https://gyazo.com/5468c65b03809a9c28f4780666c1c79c
「緑の旗」を押してプログラムを実行すると,「ふたけたのかずをいれてね」と言いますので,たとえば24などの二桁の数を入力します.プログラムはここで止まってしまうので,用意されたブロックを組み合わせて,「二十四(にじゅうよん)」と読み上げるプログラムを作ります.
このプログラムでは,入力した数の一の位の数(数字)が変数https://gyazo.com/d6f10363696045de3552d22e953d6486に,十の位の数(数字)が変数https://gyazo.com/14fcb402af07f6bedafebe1e7c1dd019に入るようになっています.数が入っている変数は,数と同じように使うことができます. https://gyazo.com/9b7f76fa897cec25b755cb5280058fe8ブロックは◯に入れた数字を読み上げるブロックなので,https://gyazo.com/181d51954586c0b47cf498e0c9ec9767,https://gyazo.com/055a93ae9b4db00ec8358b45b86e0abaは,それぞれ変数https://gyazo.com/d6f10363696045de3552d22e953d6486に,変数https://gyazo.com/14fcb402af07f6bedafebe1e7c1dd019に入っている数,つまり十の位と一の位の数を読み上げるブロックになります.また,https://gyazo.com/70e5974e6462f8db6cfe0825b480c672は「十(じゅう)」と読み上げるブロックです. では,下にある三つのブロックをつなげてプログラムを完成させてみましょう.
正解例を次に示します.
https://gyazo.com/ebb60c63f2ed5c53e1715cbc5e5779b8
hr.icon
チャレンジ!! もう少しちゃんと読むプログラムにしてみる
上で作ったプログラムでは,ある二桁の数を入力するとおかしな読み方をしてしまいます.おかしな読み方をする数には大きく分類して2パターンあります.どんな数かわかりますか? 考えてみてください.
そうです.一つが十の位が1の場合,もう一つが一の位が0の場合です.十の位が1の場合,たとえば15は「一十五(いちじゅうご)」と読んでしまいます.最初の「一(いち)」が余分ですね.一の位が0の場合は,たとえば20だと「二十零(にじゅうれい)」と読んでしまいます.最後の「零(れい)」が余分ですね.これらを読まないようにプログラムを直していきます.
十の位の一を読まないようにする
まずは,十の位が1の時に,「一(いち)」を読まないようにします.
このように何かの条件によってプログラムの動きを変えることを条件分岐と呼びます.また,ある条件の時だけなにかを実行することを条件付き実行と呼びます.条件付き実行のためのブロックがhttps://gyazo.com/36bea6a73e4f70db25c706ad17f1de17です.上の六角形の部分https://gyazo.com/0b4f73a77ee3fdb8a2773518d2eada34に条件を表す条件式を入れると,その条件式が成り立つときだけ下の窪みhttps://gyazo.com/d67aeb75acd0da5eb3bcc38f12600f00に入れたブロックが実行されます. 今回は,条件が「十の位が1」で,そしてその時に十の位の数である「一(いち)」と読まないようにしたいのですが,条件付き実行ブロックは,条件が成り立つ時になにかを実行するという表現しかできません. そこで,今回は,条件が成り立つ時だけ十の位の数を読むようにします.その条件はどのようになるでしょうか.「十の位が1」ではないときですので「十の位が2,3,4,・・・」のとき,つまり「十の位が1より大きい」が十の位を読む時の条件になります.
ある値がある値より大きい又は小さいかどうかを調べる条件式を作りたいときには,不等式ブロックhttps://gyazo.com/460ebf4cac6ad3f06699a6af7e06eb04を使います.左に入れた数が右に入れた数より大きいときに成り立つ結果となります. では,「十の位が1より大きい」条件式を作って,それが成り立つときだけ十の位を読む条件付き実行ブロックを作って,それを元のプログラムの十の位を読み上げるブロックと置き換えてください. 正解例を示します
https://gyazo.com/2d3e7d7d0231d7766edae8140121567f
一の位の零を読まないようにする
次に,同じようにして,一の位が0の時に一の位の数「零(れい)」を読まないようにしてみてください.
「一の位が0」のとき一の位を読まないとはできないので,「一の位が0」ではないとき,つまり「一の位が0より大きい」ときに一の位を読むようにします.これを無条件に一の位を読み上げるようにしているところと置き換えてできあがりです.
正解例を示します.
https://gyazo.com/a072a550fe9879f6bfaf253f9af29cba
一桁の数を入れた時に十と読まないようにする
ここまでは二桁の数を入れることを前提にしていましたが,一桁の数が入れられてときにもきちんと読めるようにしてみます.
例えば2を入力すると「十二(じゅうに)」と読んでしまいます.十の位は0なので,先ほど「十の位が1」のときは十の位を言わないようにするために使った条件式「十の位が一より大きい」が成り立たず,うまく十の位の数は言わないようになっています.しかし「十という」ブロックは無条件で実行されてしまうので,おかしな数を言ってしまいます.これを言わないように直してみましょう.
「十の位が0」のときは「十(じゅう)」と読まないようにしたいので,「十の位が0」以外,つまり「十の位が0より大きい」ときだけ「十(じゅう)」と言うようにします.
正解例を示します.
https://gyazo.com/ffe729f28153b46e5046783483e0ce80
0の時に零と読むようにする
最後に,0を入れたときのことを考えてみます.
十の位も一の位も0なので,三つの条件付き実行の条件式が成り立たず,なにも言わないままプログラムが終わってしまいます.そこで,0が入れられた時は「零」と言うようにします.どのようにすれば良いでしょうか? 一番簡単なのは,最後に「一の位も十の位も0」なら「零(れい)と言うようにする方法でしょう. 二つの条件の両方が成り立つときを表す一番簡単な方法は条件付き実行ブロックを入れ子https://gyazo.com/9742f3a8a638b85870317520f28a461cにする方法です.条件式を入れる2箇所にそれぞれの条件式を入れれば,両方の条件式が成り立つ時だけ実行することができます. ここである数とある数が等しいかどうかを調べる条件式を作りたい時には等式ブロックhttps://gyazo.com/bd47ef75a081420c1f6cdf82f5b6ed37を使います.左側に入れた数と右側に入れた数が等しいとき成り立つ結果になります. では,完成させてみましょう.
正解例を示します
https://gyazo.com/8b9826f541b31c47d6b38552c718c56d
Copyright 2017- NaokiKato, IML at Tokyo Gakugei University, All right reserved.