技術士の過去問
平成28年度(2016年)
基礎科目「情報・論理に関するもの」 問9

このページは閲覧用ページです。
履歴を残すには、 「新しく出題する(ここをクリック)」 をご利用ください。

問題

技術士 第一次試験 平成28年度(2016年) 基礎科目「情報・論理に関するもの」 問9 (訂正依頼・報告はこちら)

自然数Nに対して、Nを2で割った商にNの値を更新する操作を行い、この操作をNが0になるまで繰り返す。このとき、それぞれの割り算で出てきた余りの値を逆に並べたものがNの2進数表示となる。
例えば、N=11から始めると、
  11÷2=5余り1
   5÷2=2余り1
   2÷2=1余り0
   1÷2=0余り1
であり、出てきた余り( 1101 )を逆に並べた( 1011 )が11の2進数表示である。
このアルゴリズムを次のような流れ図で表した。流れ図中の、( ア )~( ウ )に入る式又は記号として、最も適切なものはどれか。
問題文の画像
  • ア:N>0  イ:N=0  ウ:Nを2で割った商
  • ア:N>0  イ:N=0  ウ:Nを2で割った余り
  • ア:N=0  イ:N>0  ウ:Nを2で割った商
  • ア:N=0  イ:N>0  ウ:Nを2で割った余り
  • ア:N>0  イ:N=0  ウ:2N

次の問題へ

正解!素晴らしいです

残念...

この過去問の解説 (4件)

01

アルゴリズムのフローチャートに関する穴埋め問題です。

図に示されているのは、10進法を2進法に変換するアルゴリズムになります。

(ア)N > 0 (イ)N = 0
図を見ると、アの作業はループ作業を表していることがわかります。
問題文より、ある自然数 N の値から、N が 0 になるまでループするので、ループの条件は N > 0、ループの終了条件は N = 0 となります。

(ウ)Nを2で割った商
問題文に「Nを2で割った商にNの値を更新する操作」とあることから、Nを2で割った商が正解です。

よって、各作業の穴埋めは、
(ア)N > 0 (イ)N = 0 (ウ)Nを2で割った商
となることから、1が正解です。

参考になった数12

02

正解は1です。

アルゴリズムは未経験者が説く場合難しいのでスルーしたほうが良いですが、他の問題が選べない場合など、どうしても選択せざるを得なかった場合は値を入れてトレースしていくのが良いと思います(時間はかかりますが)

ただし、今回の問題はそこまでしなくても解けます。

まずN=11で開始してみましょう、

I=ー1を入れています。

ここでNと0を比較していますが、N=11なのでN>0です。

ここで(イ)がN>0だといきなり処理が終了してしまうことがわかります。

何も定義されていないA[x]の配列を出力しておしまいです。

ということはアがN>0でイがN=0ということがわかります。

次にA[I]がNを2で割ったあまりなのに、NもNを2で割ったあまりだったらおかしいですね。

同じ値を違う変数に入れるという意味になってしまうので。

またNを2倍してしまうといつまでたったもN=0にならないので無限ループとなってしまいます。

従って アがN>0、イがN=0、ウがNを2で割った商となる1が正解です。

参考になった数5

03

正解は1です。
10進数を2進数に変換するアルゴリズムのフローチャートを穴埋めする問題です。
題意から次の3つのことが分かります。
・Nの値はNを2で割った商に更新すること
・Nが0でないとき、すなわちN>0のときは、処理を繰り返すこと
・ループを脱出するのは、N=0になったときであること
以上から、各選択肢について内容を確認すると以下の通りです。

1.正しいです。
上記解説の3つを満たしています。
2.誤りです。
Nの値はNを2で割った商に更新するので、ウが違います。
3.誤りです。
N>0のとき処理を繰り返し、N=0のとき処理を抜けるのが要件なので、
ア、イが違います。
4.誤りです。
N>0のとき処理を繰り返し、N=0のとき処理を抜けること、
Nの値はNを2で割った商に更新することが必要なので、ア、イ、ウが違います。
5.誤りです。
Nの値はNを2で割った商に更新する必要があります。
また、Nの値にNを2倍した値を代入すると、N=0にならなくなり、
処理が延々と続いてしまうので、ウが間違いです。

したがって、1が正解です。

参考になった数5

04

自然数Nに対して、2進数表示をするための式と流れ図から

①商が0より大きい間は、2で割って、余りを記録し、商はもう一度2で割る

②商が0になったら終了し2進数表示をする

この二つの流れに区別できます。

①では、Nを2で割った余りをA[I]として記録し、商を次のNとして、元の分岐に戻り、Nと0を比較しますが、②であれば、(イ)の方向に進み、2進数表示が完了します。

Nが0より大きければ、(ア)の方向に進み、再度Nを2で割ります。

以上より、ア:N>0、イ:N=0、ウ:Nを2で割った商となりますので、

1が正解です。

参考になった数3