[Scratch][問題]10進数を2進数に変換する

プログラミング言語げんごScratch(スクラッチ)問題もんだいです。

今回こんかいは10進数を2進数に変換するプログラムをScratchで作成してみました。

目次

問題

10進数を2進数に変換するプログラムを作成します。

次のA~Dのうち、正しいプログラムはどれか。

「(10進数<2)まで繰り返す」の中のブロック2つだけが
それぞれ違っているよ

正解

解説

それぞれの選択肢を実際に動かして結果を確認してみましょう。

引数に渡す10進数は50にします。

50は2進数にすると「110010」なので、結果が「110010」になるプログラムが正解です。

ただ動かすだけだと途中の動きがわかりずらいので、それぞれデバッグ用のブロックを追加してから実行しています。(矢印の部分)

それでは順番に動かしてみます。

この定義を呼び出すスクリプトを作成して、実行してみます。

結果は、変数「2進数」にセットされるので、その変数の値がどのようにセットされていくのかに着目しましょう。

Aのプログラム

結果が「111001」になってしまったので、これは正しくないプログラムだとわかります。

10進数が「50」だった場合の「10進数 < 2 まで繰り返す」のブロックの中身を順番に処理したときの内容は以下の通りです。

STEP
[1回目]10進数を(10進数/2の切り下げ)にする

「50」を2で割った切り下げは「25」なので、変数「10進数」は「25」になります。

STEP
[1回目]2進数を(10進数を2で割った余りと2進数)にする

「25」を2で割った余りは「1」なので、変数「2進数」は「1」+「」で「1」になります。

2で割った余りは「0」か「1」になるから、それをどんどん頭に付け加えていくプログラムなのかな?? 念のためもう1回処理してみよう。

STEP
[2回目]10進数を(10進数/2の切り下げ)にする

「25」を2で割った切り下げは「12」なので、変数「10進数」は「12」になります。

STEP
[2回目]2進数を(10進数を2で割った余りと2進数)にする

「12」を2で割った余りは「0」なので、変数「2進数」は「0」+「1」で「01」になります。

ここまでで、計算した結果が頭に追加されていくことがわかりました。

このプログラムで作成される2進数の右2桁は「01」ですが、正解は「10」になるはずなので、この時点でこの選択肢が間違いであることがわかります。

Bのプログラム

結果は「00」になってしまったので、これは正しくないプログラムだとわかります。

Cのプログラム

結果は「025」になってしまったので、これは正しくないプログラムだとわかります。

2進数ですらなくなってしまいましたね。

Dのプログラム

結果は「110010」になったので、これが正しいプログラムだとわかります。

10進数が「50」だった場合の「10進数 < 2 まで繰り返す」のブロック以降を順番に処理したときの内容は以下の通りです。

STEP
[1回目]2進数を(10進数を2で割った余りと2進数)にする

「50」を2で割った余りは「0」なので、変数「2進数」は「0」+「」で、「0」になります。

STEP
[1回目]10進数を(10進数/2の切り下げ)にする

「50」を2で割った切り下げは「25」なので、変数「10進数」は「25」になります。

STEP
[2回目]2進数を(10進数を2で割った余りと2進数)にする

「25」を2で割った余りは「1」なので、変数「2進数」は「1」+「0」で「10」になります。

STEP
[2回目]10進数を(10進数/2の切り下げ)にする

「25」を2で割った切り下げは「12」なので、変数「10進数」は「12」になります。

STEP
[3回目]2進数を(10進数を2で割った余りと2進数)にする

「12」を2で割った余りは「0」なので、変数「2進数」は「0」+「10」で、「010」になります。

STEP
[3回目]10進数を(10進数/2の切り下げ)にする

「12」を2で割った切り下げは「6」なので、変数「10進数」は「6」になります。

STEP
[4回目]2進数を(10進数を2で割った余りと2進数)にする

「6」を2で割った余りは「0」なので、変数「2進数」は「0」+「010」で、「0010」になります。

STEP
[4回目]10進数を(10進数/2の切り下げ)にする

「6」を2で割った切り下げは「3」なので、変数「10進数」は「3」になります。

STEP
[5回目]2進数を(10進数を2で割った余りと2進数)にする

「3」を2で割った余りは「1」なので、変数「2進数」は「1」+「0010」で、「10010」になります。

STEP
[5回目]10進数を(10進数/2の切り下げ)にする

「3」を2で割った切り下げは「1」なので、変数「10進数」は「1」になります。

STEP
「10進数 < 2 まで繰り返す」の繰り返しを抜ける

変数「10進数」が「1」になったため、繰り返しのブロックを抜けます。

STEP
2進数を(10進数と2進数)にする

変数「2進数」は「1」+「10010」で、「110010」になります。

プログラムはこれで終了なので、この選択肢が正解で間違いないことが確認できました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次