※前回の記事(擬似言語その①)はこちら
■
今回の記事では、IPAから令和3年に公開された「疑似言語のサンプル問題1」を解きながら、繰り返し制御構造の「for文」についても学習していきましょう。
なお、テキストより動画で学習したい方は、下記のYouTube動画をご覧ください。
令和3年擬似言語サンプル問題1(問題文)
関数calcMean は,要素数が1 以上の配列dataArray を引数として受け取り,要素の値の平均を戻り値として返す。プログラム中のa,bに入れる字句の適切な組合せはどれか。ここで,配列の要素番号は1 から始まる。
〔プログラム〕
001 ○実数型:calcMean( 実数型の配列:dataArray) /* 関数の宣言 */
002 実数型:sum,mean
003 整数型:i
004 sum ← 0
005 for (i を1 からdataArray の要素数まで1 ずつ増やす)
006 sum ← a
007 endfor
008 mean ← sum ÷ b /* 実数として計算する */
009 return mean
※プログラム文の行番号(001~009)は著者が便宜的に記載しています。
令和3年擬似言語のサンプル問題1 解説
それでは解説をしていきます。
まず、3行の冒頭文から、問題の意図をしっかり読み取ることが必要です。
●関数 calcMean があり、これは要素数が1以上の配列 dataArray を引数として受け取り、要素の値の平均を戻り値として返すプログラム
冒頭文の次はプログラム文で全部で9行です。また、その後には解答選択肢があり、プログラム文中のa、bに入れる適切な組合せを選ぶことが求められています。
選択肢にはア、イ、ウ、エがあります。
それぞれの選択肢を良く見ると、aの選択肢は「sum + dataArray[i]」と「sum × dataArray[i]」の2種類があります。同様に、bの選択肢も2種類あります。つまり、aとbはそれぞれ2種類ずつあり、その組み合わせから正しいものを選ぶ問題です。
このサンプル問題1の構成は擬似言語の問題における代表的な出題形式で、冒頭文があって短いプログラムがあり、最後に選択肢を選ばせる形です。
攻略のポイントとしては、アルゴリズムを分解して考え、プログラミング的思考能力を高めることが重要です。また、関数名 calcMean は「平均を計算する」という意味があり、これが関数の動作を示唆しています。
それでは、1 行目からプログラムを見ていきましょう。
1 行目: calcMean という関数を宣言。引数は、実数型の配列dataArray
2 行目: sum とmean という2 つの実数型の変数を定義している
3 行目:i という整数型の変数を定義している
4 行目:変数sum に0 を代入している
5 行目のfor 文は「繰り返し」の制御構造で、7 行目のendfor までを繰り返すという意味です。for 文の書き方にはルールがあり、必ず下記のような構造になります。
for(制御記述)
処理
Endfor
上記のうち、制御記述とは、繰り返しを続ける条件のことです。
たとえば、プログラムの5 行目の制御記述は「i を1 からdataArray の要素数まで1 ずつ増やす」となっています。
これは、たとえば「配列dataArray の要素数が3」 だった場合、「変数i を1 から3 まで増やしながら、そのたびに6 行目の処理を実行する(つまり、6 行目の処理を計3 回、実行する)」という意味になります。
次に、6 行目の空欄 a には入るものを考えます。
➡平均を求めるには、
- 各要素の合計を求める
- 合計値を要素数で割る
という手順が必要なため、
今回の5 ~ 7 行目の繰り返し処理(for 文)では、「①各要素の合計を求める」のだろう、
という仮説を立てることができます。
擬似言語の問題では、変数や配列の要素に、実際にカンタンな値を入れて考えるのが有効なので、今回は次の数値を配列にいれてみましょう。
つまり、配列の要素数は3、配列の要素1には「3」、要素2には「7」、要素3には「5」を入れて計算してみるわけです。
ここで、空欄a に対する解答の選択肢を見ると、以下2種類しかありません。
- 「sum + dataArray[i]」
- 「sum × dataArray[i]」
要素の合計を求めるには、各要素をすべて足すこと(加算)が必要なので、おそらく前者の「sum + dataArray[i]」が正しそうである(仮説)と考えます。
このようにして目星をつけたら、次のプログラムに、さきほどの数値(上図)を実際にあてはめて検証してみます。
6行目では、sum + dataArray[i]をsumに代入します。これを要素数(この場合は3回)繰り返します。最初はsumが0なので、0 + dataArray[1](dataArray[1]の中身は3)として、sumに3を上書きします。これで1回目が終わり。
2回目はsum(現在は3)にdataArray[2](7)を加えて10になり、sumに10を入れます。
3回目はdataArray[3](5)を加えて15になり、これで3回の繰り返しが終わります。結果として、sumは15であり、3+7+5=15と同じ結果になりましたから、目星は正しかったと考えられます。
この計算は、以下のような表(トレース表)を書きながら行うと間違いが少なくなります。
続いて8行目は、変数meanにsum ÷ 「dataArrayの 要素数」と考えるのが妥当でしょう。つまり、bの値が「dataArrayの 要素数」ということです。
なぜなら、この例では、合計15を要素数3で割って、meanに5を入れることで、calcMean関数が平均値を返すことになるからです。
以上より、正解はアとなります。
上記までで、擬似言語サンプル問題1の解説は終わりです。擬似言語は、冒頭文をしっかり読み、コメントを参考にし、選択肢を確認しながらプログラム全体を理解することが重要です。平均を返す場合、要素を合計して要素数で割る必要があります。このプロセスを理解し、簡単な数字を使ってプログラムを実行してみることが効果的です。擬似言語は、一度覚えると得点源になるので、頑張ってください。
次回は、令和3年擬似言語のサンプル問題その2を解きながら、if分やwhile文の制御構造を学びます。
※2024年4月以降受験する方で、生成AIに関する出題対策をしていない方、以下の動画を見ないと20点損します!