平成20年 春期 ソフトウェア開発技術者 午前 問10
ビット列x 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 = 0 1 0 1 1 1 1 1 1 とy 1 y 2 y 3 = 1 1 1 に対して、次のアルゴリズムで表示されるk の変化はどれか。
k = 1;
d = 1;
while d ≠ 0:
print k ;
if x k ≠ y 1 :
d = 1;
else if x k + 1 ≠ y 2 :
d = 2;
else if x k + 2 ≠ y 3 :
d = 3;
else:
d = 0;
end if;
k = k + d ;
end while;
ア
1, 2, 3, 4
イ
1, 2, 4
ウ
1, 3, 4
エ
1, 4
答え イ
【解説 】
問題の処理を1行ずつ机上実行させます。
初期化で「k = 1; d = 1;」になり、「while d ≠ 0: 」が成立するので、whileループ内の処理を実行する。
「print k ;」でk = 1なので、1 (1)が表示される。
最初のif文「x k ≠ y 1 」(k = 1)でx 1 = 0、y 1 =1なので、条件が成立し「d = 1」になる。
次に“end if”の次の「k = k +d 」が実行され、k = 1、d = 1なのでk = 2 になる。
次の行が“end while”でwhile文に戻り「while d ≠ 0: 」はd = 1で成立するので、whileループ内の処理を実行する。
「print k ;」でk = 2なので、2 (2)が表示さる。
最初のif文「x k ≠ y 1 」(k = 2)でx 2 = 1、y 1 = 1なので、条件は不成立。
2番目のif文「x k + 1 ≠ y 2 」(k = 2)でx 3 =0、y 2 = 1なので、条件が成立し「d = 2」になる。
次に“end if”の次の「k = k +d 」が実行され、k = 2、d = 2なのでk = 4 になる。
次の行が“end while”でwhile文に戻り「while d ≠ 0: 」はd = 2で成立するので、whileループ内の処理を実行する。
「print k ;」でk = 4なので、4 (3)が表示される。
最初のif文「x k ≠ y 1 」(k = 4)でx 4 = 1、y 1 = 1なので、条件は不成立。
2番目のif文「x k + 1 ≠ y 2 」(k = 4)でx 5 = 1、y 2 = 1なので、条件は不成立。
3番目のif文「x k + 2 ≠ y 3 」(k = 4)でx 6 = 1、y 3 = 1なので、条件は不成立。
elseの処理が実行され「d = 0」になる。
次に“end if”の次の「k = k + d 」が実行され、k = 4、d = 0なのでk = 4 のまま。
次の行が“end while”でwhile文に戻り「while d ≠ 0: 」はd = 0で不成立なので、“end while”までジャンプし処理終了。
したがって、表示される
k は(1)(2)(3)の
1, 2, 4
(イ)になる。
【キーワード 】
・擬似プログラミング言語
【キーワードの解説 】
擬似プログラミング言語
基本情報技術者試験では、C、COBOL、Java、アセンブラ(CASL)などのプログラミング言語のほかに、擬似プログラミング言語で書かれたプログラムの問題が出題されます。
擬似プログラミング言語の表記法はC言語に似ていますので、プログラミング言語としてC以外を選択する場合も、Cについての知識が多少あったほうがいいです。(Cをよりわかりやすくした記法になっています。)
今回の問題のwhile文は「“while 条件式”で条件式が成立する限り“end while”までの処理(whileループ)を繰り返す。」という意味です。
戻る
一覧へ
次へ