プログラミング言語Scratch(スクラッチ)の問題です。
今回は10進数を2進数に変換するプログラムをScratchで作成してみました。
問題
10進数を2進数に変換するプログラムを作成します。
次のA~Dのうち、正しいプログラムはどれか。
「(10進数<2)まで繰り返す」の中のブロック2つだけが
それぞれ違っているよ
正解
解説
それぞれの選択肢を実際に動かして結果を確認してみましょう。
引数に渡す10進数は50にします。
50は2進数にすると「110010」なので、結果が「110010」になるプログラムが正解です。
ただ動かすだけだと途中の動きがわかりずらいので、それぞれデバッグ用のブロックを追加してから実行しています。(矢印の部分)
それでは順番に動かしてみます。
この定義を呼び出すスクリプトを作成して、実行してみます。
結果は、変数「2進数」にセットされるので、その変数の値がどのようにセットされていくのかに着目しましょう。
Aのプログラム
結果が「111001」になってしまったので、これは正しくないプログラムだとわかります。
10進数が「50」だった場合の「10進数 < 2 まで繰り返す」のブロックの中身を順番に処理したときの内容は以下の通りです。
「50」を2で割った切り下げは「25」なので、変数「10進数」は「25」になります。
「25」を2で割った余りは「1」なので、変数「2進数」は「1」+「」で「1」になります。
2で割った余りは「0」か「1」になるから、それをどんどん頭に付け加えていくプログラムなのかな?? 念のためもう1回処理してみよう。
「25」を2で割った切り下げは「12」なので、変数「10進数」は「12」になります。
「12」を2で割った余りは「0」なので、変数「2進数」は「0」+「1」で「01」になります。
ここまでで、計算した結果が頭に追加されていくことがわかりました。
このプログラムで作成される2進数の右2桁は「01」ですが、正解は「10」になるはずなので、この時点でこの選択肢が間違いであることがわかります。
Bのプログラム
結果は「00」になってしまったので、これは正しくないプログラムだとわかります。
Cのプログラム
結果は「025」になってしまったので、これは正しくないプログラムだとわかります。
2進数ですらなくなってしまいましたね。
Dのプログラム
結果は「110010」になったので、これが正しいプログラムだとわかります。
10進数が「50」だった場合の「10進数 < 2 まで繰り返す」のブロック以降を順番に処理したときの内容は以下の通りです。
「50」を2で割った余りは「0」なので、変数「2進数」は「0」+「」で、「0」になります。
「50」を2で割った切り下げは「25」なので、変数「10進数」は「25」になります。
「25」を2で割った余りは「1」なので、変数「2進数」は「1」+「0」で「10」になります。
「25」を2で割った切り下げは「12」なので、変数「10進数」は「12」になります。
「12」を2で割った余りは「0」なので、変数「2進数」は「0」+「10」で、「010」になります。
「12」を2で割った切り下げは「6」なので、変数「10進数」は「6」になります。
「6」を2で割った余りは「0」なので、変数「2進数」は「0」+「010」で、「0010」になります。
「6」を2で割った切り下げは「3」なので、変数「10進数」は「3」になります。
「3」を2で割った余りは「1」なので、変数「2進数」は「1」+「0010」で、「10010」になります。
「3」を2で割った切り下げは「1」なので、変数「10進数」は「1」になります。
変数「10進数」が「1」になったため、繰り返しのブロックを抜けます。
変数「2進数」は「1」+「10010」で、「110010」になります。
プログラムはこれで終了なので、この選択肢が正解で間違いないことが確認できました!
コメント