本文へスキップ

技術士試験(情報工学部門)・情報技術者試験。ファーストマクロ。


Since 2016.4.19

平成21年度 春期 応用情報技術者試験問題と解説

問7

文字列を引数とする関数 len、first、butfirstを用いて、関数comp を再帰的に定義した。
comp("11", "101") を呼び出したとき、返されるものはどれか。

〔関数の定義〕

len(S)  : 文字列Sの長さを返す。Sが空文字列のときは0を返す。

first(S) : 文字列Sの先頭の1文字のASCIコードを返す。Sが空文字列のときはエラーを返す。

butfirst(S): 文字列Sの先頭の1文字を除いた残りの文字列を返す。Sが空文字列のときはエラーを返す。

comp(A, B)
begin
 if len(A) = 0 and len(B) = 0 then return 0;
 if len(A) = 0 and len(B) ≠ 0 then return 1;
 if len(A) = 0 and len(B) = 0 then return -1;
 if first(A) < first(B) then return 1;
 if first(A) > first(B) then return -1;
 return comp(butfirst(A), butfirst(B));
end

ア -1  イ 0  ウ 1  エ エラー


正解


解説

if len(A) = 0 and len(B) = 0 then return 0; ・・・@
if len(A) = 0 and len(B) ≠ 0 then return 1; ・・・A
if len(A) = 0 and len(B) = 0 then return -1; ・・・B
if first(A) < first(B) then return 1; ・・・C
if first(A) > first(B) then return-1; ・・・D
return comp(butfirst(A), butfirst(B)); ・・・E
とすると、以下のとおり処理される。

comp("11", "101")
= comp(butfirst("11"), butfirst("101")) ・・・Eより
= comp("1", "01") ・・・butfirst(S) の定義より。
-1 ・・・first("1") = 1, first("01") = 0だから、Cより

問6 目次 問8