アルゴリズム(全80問中11問目)

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
次の流れ図は,10進整数 j(0<j<100) を8桁の2進数に変換する処理を表している。2進数は下位桁から順に,配列の要素 NISHIN(1) から NISHIN(8) に格納される。流れ図のa及びbに入る処理はどれか。ここで,j div 2 はjを2で割った商の整数部分を,j mod 2 はjを2で割った余りを表す。
01.png

出典:令和元年秋期 問 1

01a.png
正解 問題へ
分野:テクノロジ系
中分類:アルゴリズムとプログラミング
小分類:アルゴリズム
解説
10進数から2進数に変換する方法として 2 で割ることを繰り返すものがありますが、本問の流れ図は、この方法をアルゴリズムとして表したものです。

例として j=50 のときに各配列要素に格納される値の違いを見ていきましょう。NISHIN[1] が最下位ビット(一番右)、NISHIN[8] が最上位ビット(一番左)で下位ビットから順番に値を格納していきます。
10進数 50 は「32+16+2=25+24+21」ですから、2進数8ビットだと 0011 0010 と表せます。流れ図の処理でも、abを繰り返して同様に変換されるかどうかを確認していくことで、正しい解を導きます。
  • [a] 50 div 2 = 25 → j
    [b] 25 mod 2 = 1 → NISHIN[1]
    右から1ビット目が 0 ではないので誤り。
  • [a] 50 mod 2 = 0 → j
    [b] 0 div 2 = 0 → NISHIN[1]
    [a] 0 mod 2 = 0 → j
    [b] 0 div 2 = 0 → NISHIN[2]
    (以降繰り返し)
    j が 0 になり、配列要素に格納されるのがすべて 0 になってしまうので誤り。
  • [a] 50 div 2 = 25 → NISHIN[1]
    [b] 25 mod 2 = 1 → j
    最下位桁の NISHIN[1] の値が25になってしまいます。2進数に変換する処理なので NISHIN(1) から NISHIN(8) に格納されるのは 0 または 1 でなくてはなりません。
  • 正しい処理です。最後まで流れを見ていきましょう。
    [a] 50 mod 2 = 0 → NISHIN[1]
    [b] 50 div 2 = 25 → j
    [a] 25 mod 2 = 1 → NISHIN[2]
    [b] 25 div 2 = 12 → j
    [a] 12 mod 2 = 0 → NISHIN[3]
    [b] 12 div 2 = 6 → j
    [a] 6 mod 2 = 0 → NISHIN[4]
    [b] 6 div 2 = 3 → j
    [a] 3 mod 2 = 1 → NISHIN[5]
    [b] 3 div 2 = 1 → j
    [a] 1 mod 2 = 1 → NISHIN[6]
    [b] 1 div 2 = 0 → j
    [a] 0 mod 2 = 0 → NISHIN[7]
    [b] 0 div 2 = 0 → j
    [a] 0 mod 2 = 0 → NISHIN[8]
    [b] 0 div 2 = 0 → j
    この時点で k が8になりループが終了します。NISHIN(1)が最下位桁、NISHIN(8)が最上位桁ですから、上位桁から順番に 0011 0010 が格納されていることになります。
この流れ図は、10進数を2進数に変換する方法の一つである、変換対象の10進数を商が0になるまで2で割ることを繰り返す方法をプログラム的に示したものです。
01_1.png

この問題の出題歴


Pagetop