アルゴリズムとプログラミング|令和4年度 ITパスポート試験 問96
関数calcXと関数calcYは,引数inDataを用いて計算を行い,その結果を戻り値とする。関数calcXをcalcX(1)として呼び出すと,関数calcXの変数numの値が,1→3→7→13と変化し,戻り値は13となった。関数calcYをcalcY(1)として呼び出すと,関数calcYの変数numの値が,1→5→13→25と変化し,戻り値は25となった。プログラム中のa,bに入れる字句の適切な組合せはどれか。
〔プログラム1〕
```
○整数型: calcX(整数型: inData)
整数型: num, i
num ← inData
for (i を 1 から 3 まで 1 ずつ増やす)
num ← [ a ]
endfor
return num
```
〔プログラム2〕
```
○整数型: calcY(整数型: inData)
整数型: num, i
num ← inData
for ([ b ])
num ← [ a ]
endfor
return num
```
| a | b | |
|---|---|---|
| ア | 2 × num + i | i を 1 から 7 まで 3 ずつ増やす |
| イ | 2 × num + i | i を 2 から 6 まで 2 ずつ増やす |
| ウ | num + 2 × i | i を 1 から 7 まで 3 ずつ増やす |
| エ | num + 2 × i | i を 2 から 6 まで 2 ずつ増やす |
- 2 × num + i i を 1 から 7 まで 3 ずつ増やす
- 2 × num + i i を 2 から 6 まで 2 ずつ増やす
- num + 2 × i i を 1 から 7 まで 3 ずつ増やす
- ✓ これが正解num + 2 × i i を 2 から 6 まで 2 ずつ増やす
解説
増える分が2ずつ大きくなるので、numに2かけるiを足します。
まず一つ目の関数の動きから、空欄の式を決めます。変数numは1から3、7、13と変わっており、増えた分は順に2、4、6です。繰返しの回数を数える変数iは1、2、3と進むので、増えた分はちょうど2かけるiにあたります。したがって空欄の式は、numに2かけるiを足すものです。次に二つ目の関数を見ると、numは1から5、13、25と変わり、増えた分は4、8、12です。同じ式を使うのですから、iが2、4、6と進めばつじつまが合います。つまり繰返しは、iを2から6まで2ずつ増やす形になります。引数として渡した値がどう変わるかを一段ずつ書き出し、表の欄を上から順に当てはめて確かめるのが近道です。よって適切な組合せは、numに2かけるiを足す式と、2から6まで2ずつ増やす繰返しです。
ほかの選択肢はなぜ違うのか
- 式を2かけるnumに足すiとしています。一つ目の関数で確かめると、はじめの一回は2かける1に1を足して3となり合いますが、次は2かける3に2を足して8となり、7にはなりません。一回だけ合わせて決めると取り違えるので、一段ずつ確かめます。
- こちらも式を2かけるnumに足すiとしているので、二回目で合わなくなります。繰返しの側だけを見て選ぶのではなく、まず式を一段ずつ当てはめて最後まで合うかどうかを確かめるのが確実です。
- 式のほうは合っていますが、繰返しをiが1から7まで3ずつ増える形としています。それではiが1、4、7と進み、増える分は2、8、14となって、5、13、25という変わり方に合いません。iの進み方まで含めて確かめる必要があります。
この問題に関係する言葉
- 変数
- 関数
- 引数
出典:令和4年度 ITパスポート試験 問96(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならアルゴリズムとプログラミングへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)