令和元年度 秋期 基本情報技術者試験 午前 問1
テクノロジ/アルゴリズム次の流れ図は,10進整数 j(0<j<100)を8桁の2進数に変換する処理を表している。2進数は下位桁から順に,配列の要素 NISHIN(1) から NISHIN(8) に格納される。流れ図の a 及び b に入れる処理はどれか。ここで,j div 2 は j を2で割った商の整数部分を,j mod 2 は j を2で割った余りを表す。 (注)ループ端の繰返し指定は,変数名:初期値,増分,終値を示す。 (注:本サイトでは原問題の表を文字表記に変換しています)

出典:令和元年度 秋期 基本情報技術者試験 午前 問1
- アa:j ← j div 2,b:NISHIN(k) ← j mod 2
- イa:j ← j mod 2,b:NISHIN(k) ← j div 2
- ウa:NISHIN(k) ← j div 2,b:j ← j mod 2
- エa:NISHIN(k) ← j mod 2,b:j ← j div 2
正解:エ
解説
10進整数を2進数に変換する基本手順は「2で割った余りを下位桁から順に記録し,商を次の値にする」の繰返しです。この流れ図ではループ変数 k が1から8まで動くので,k 回目の繰返しで NISHIN(k)(下位から k 桁目)に余り j mod 2 を格納し,その後で j を j div 2 に更新する必要があります。順序が逆だと,まだ格納していない桁の値が失われてしまいます。
選択肢ごとの解説
- ア誤り。先に j ← j div 2 で商に置き換えてしまうため,NISHIN(k) には1桁ずれた値が入ってしまいます。
- イ誤り。a で j に余り(0か1)を代入してしまうと元の値が壊れ,b の j div 2 も意味のない値になります。
- ウ誤り。NISHIN(k) に商 j div 2 を格納しており,2進数の桁(0か1)になりません。
- エ正しい。先に余り j mod 2 を NISHIN(k) に格納し,次に j を j div 2 に更新するので,下位桁から順に正しい2進数が得られます。