pafuイーランスクール 学んでできる

メニューへ戻る

アルゴリズム基礎解説(平成16年秋期問4)

問題の確認

解説
まず、M進文字列→整数変換のアルゴリズムの基本的な考え方ですが、
例えば、2進数3桁 101を整数にするのであれば、
1×2^2+0×2^1+1×2^0 = 4+0+1 =5
したがい、 Σ(数字)×M^桁数 を計算するアルゴリズムとすればよいと考えられます。

空欄 a
空欄 a は、まさに上記の合計を計算する部分で、文字列の左側から1桁ずつ処理しており、前回ループで算出したValに対して基数を掛け、そこにToIntの返却値を足しています。したがって、Valに基数値Rdxを掛けた”ウ”が正解です。アルゴリズムをきちんと考えないと“イ Val”を選びかねないので注意。

同様に、整数値をN進文字列に直すアルゴリズムの基本部分を考えてみます。
例えば、19を3進数に変換するのであれば、
19÷3= 6 余り1  6は3進数の基数より大きいので
6÷3=2 余り0 → 201 が3進数に変換した結果となる。
これより、対象となる整数値を基数で割り、商の値が気数値より大きければ、再度割る、ということを繰り返せし、基数^0から計算すればよいと考えられます。これを踏まえてアルゴリズムを見ていくと、

空欄 b
引数として渡されたValをアルゴリズムの中で使っていないので、何かに置き換えていることが考えられる。ループの最初の行、Rem ← Que ÷Rdxが上記で考えたアルゴリズムの基本部分なので、ValはQueという変数に置き換えていることがわかる。

空欄c
ループの中では、Remに商の余りを入れ、Tmpに変換結果を入れている。次の計算ループを考えると、Queに入っている値を基数で割った値にしなければならない。したがって、アが正解になる。

空欄d
ループの中では商の余りを文字列に変換しているが、最後に残った商の値( 上述の例で言えば 6÷3=2 の2の部分)はループの中では何も考慮されていないので、この部分をループの後で入れてあげる必要がある。したがってここには ク Tmp ← ToStr(Quo) + Tmp が入る。

空欄e
最後にToIntの中ですが、 ToIntは内部にCodeという配列を持っており、この中に16進までの数字が初期値として入っています。この配列要素と引数を比較し、整数を返しているわけです。
空欄eが入っているループの中を見ると、Idxを1つずつ増やしています。解答群を見るとPとCode[Idx]を比較しているらしく、ここから、Pが引数として渡された文字で、それをCode[Idx]の要素と一致するまでループを回していると推察できます。
ループは前判定であるので、P=Code[Idx]となったときにループから抜ける条件を探すとイが適当な条件となります。このような問題は、値を実際に代入して確認を行いましょう。

cobalt様 ご投稿

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる