HOME»基本情報技術者試験掲示板»再起的な手続きを用いてn桁の2進数を全て出力する
投稿する

再起的な手続きを用いてn桁の2進数を全て出力する [5802]

 やまざきさん(No.1) 
○test(4)を呼び出したとき、3行目に出力される2進数は?

[プログラム]
大域:整数型:n // 2進数の桁数
大域:整数型の配列:bin ←(32個の未定義の値)

OprintBin()
整数型:i
for (iを1からnまで1ずつ増やす)
bin[i]の値を出力する
endfor
改行コードを出力する
ObinaryNumber(整数型:K)
if (k > n)
printBin()
else
bin[k] ← 0 
binaryNumber (k + 1) 
bin[k] ← 1 
binaryNumber (k + 1) 
endif

Otest (正数型: numberOfDigits)
n ←numberOfDigits
binaryNumber (1)

上記問題集から抜粋したもので、問題の答えが1101になるらしくその理由が理解できないです。
自分のやり方だと1行目が0000になる、までしか導けず、解説を読むと自分のif文の解がおかしい?(解説文には2>nなのでprintBinを呼び出す、と書かれている)ようですが、何がおかしいかわからず…。
有識者の方、解説お願いできますでしょうか。

Otest (4)
n ←numberOfDigits // nに4を代入
binaryNumber (1)

ObinaryNumber(1)
if (k > n)
else
bin[k] ← 0 //bin{0}
binaryNumber (k + 1) //1+1
ObinaryNumber(2)
if (k > n)
else
bin[k] ← 0 bin{0,0}
binaryNumber (k + 1) //2+1
ObinaryNumber(3)
if (k > n)
else
bin[k] ← 0 bin{0,0,0}
binaryNumber (k + 1) //3+1
ObinaryNumber(4)
if (k > n)
else
bin[k] ← 0 bin{0,0,0,0}
binaryNumber (k + 1) //4+1
ObinaryNumber(5)
if (k > n) //5>4でtrue
printBin()
OprintBin()
bin{0,0,0,0}を出力して改行
2025.02.19 22:23
電タックさん(No.2) 
FE ブロンズマイスター
上記のままのプログラムだったら下記になって
1行目:0000
2行目:0001
3行目:0010
・・・
と出力されると思います。

>解説文には2>nなのでprintBinを呼び出す、と書かれている
n=4ですので、k=2のときにprintBin()が呼び出されることはないです
書籍の正誤表が出ているかもしれないので気になるようでしたら見てみると良いかもしれません。

>問題の答えが1101
ですが
bin[k] ← 1
binaryNumber (k + 1) 
bin[k] ← 0 
binaryNumber (k + 1) 
とすれば3行目は1101には一応なりますね
2025.02.19 23:06
 やまざきさん(No.3) 
ご回答ありがとうございました。
0010になる理屈は理解できます。
ちょっと正誤表確認してみます。
2025.02.20 19:17
返信投稿用フォーム
お名前
顔アイコン

本文(コミュニティガイドライン⇱を順守して適切な投稿を心がけましょう)
🔐投稿削除用のパスワード(任意)
投稿プレビュー
※CBT試験では出題内容の公開が禁止されているため、直接的・間接的を問わず、出題内容や難易度を尋ねる質問は厳禁です。
※宣伝や迷惑行為を防止するため、当サイト、姉妹サイト、IPAサイト以外のURLを含む文章の投稿はできません。
投稿記事削除用フォーム
投稿No. パスワード 
© 2010- 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop