<景品表示法に基づく表記>本サイトのコンテンツには、商品プロモーションが含まれています。

ITパスポート/情報処理

ITパスポートの擬似言語 ~ゼロからわかるITパスポートの擬似言語② 令和3年サンプル問題1 および、for文 過去問解説

擬似言語②

※前回の記事(擬似言語その①)はこちら

擬似言語
ITパスポートの擬似言語 超入門~ゼロからわかる擬似言語① 変数・データ型・配列・関数・コメント今回の記事ではITパスポート試験で出題される「擬似言語の基礎と基本的な文法」の説明を行います。 今回の記事を読んで頂ければ、これま...

今回の記事では、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 には入るものを考えます。
平均を求めるには、

  1.  各要素の合計を求める
  2.  合計値を要素数で割る

という手順が必要なため、

今回の5 ~ 7 行目の繰り返し処理(for 文)では、「①各要素の合計を求める」のだろう、

という仮説を立てることができます。

擬似言語の問題では、変数や配列の要素に、実際にカンタンな値を入れて考えるのが有効なので、今回は次の数値を配列にいれてみましょう。

つまり、配列の要素数は3、配列の要素1には「3」、要素2には「7」、要素3には「5」を入れて計算してみるわけです。

ここで、空欄a に対する解答の選択肢を見ると、以下2種類しかありません。

  1. 「sum + dataArray[i]」
  2. 「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文の制御構造を学びます。

擬似言語③ ~ゼロから分かる擬似言語入門
ITパスポートの擬似言語~ゼロから分かる擬似言語③令和3年サンプル問題その2の過去問解説をしながら、if文やwhile文を理解する前回の記事(擬似言語②)はこちら https://shindan-model.com/it-pass-giji-gengo-002...