見出し画像

【擬似言語】ITパスポート×高校情報Ⅰ共通テスト対策~疑似プログラミング言語徹底解説!疑似言語

ITパスポート(国家資格)に疑似言語(擬似言語)追加!

高校情報Ⅰ新設に伴い、国家資格のITパスポートが疑似言語に関する問題を2022年度から追加すると発表しました。

大学入学共通テストも特定プログラム言語に依存しない疑似言語なので、その基礎を磨くには良問だと感じました。
今回、IPA(情報処理推進機構)が発表した、ITパスポート 疑似言語のサンプル問題を徹底解説しました。

高校で使う先生方へ・・・
疑似言語の基礎を学ぶ上で非常に良問なのですが、、、
ITパスポートのサンプル問題の配列の添字は1始まりとなっています(あえて難易度を落とすため?)。
高校で大学入学共通テストの対策として利用する場合は、問題修正して添字を0始まりとして説明した方がいいと思います。試験で引っかかりやすい部分なので。。補足説明は動画内で行っています。

実プログラミング言語や共通テストと精度が合わないとかで、添字0からにしてくれという要望は多発すると思われます。

情報Ⅰ共通テスト対策 書籍出版します!


解説動画


【資料ダウンロード】

情報教育の底上げが目的なので、資料を修正して、学校・塾(営利目的含む)の授業等で利用して頂いて問題ありません。私への連絡不要ですが、利用する際には、YouTubeチャンネル・情報Ⅰ動画教科書・IT用語動画辞典を紹介してもらえると嬉しいです。

■解説PowerPoint
https://toppakou.com/info1/download/97_ITパスポート/01_疑似言語サンプル/01_疑似言語サンプル問題.pptx

■サンプル問題(IPA)
https://www3.jitec.ipa.go.jp/JitesCbt/html/about/range.html


【文字おこし】

今回は、ITパスポート試験の疑似言語のサンプル問題を基礎から徹底解説していきます。

2022年度から全国の高校でネットワーク、情報セキュリティ、プログラミングなどを学ぶ情報Ⅰの科目が必修化されます。
2025年からは大学入学共通テストの教科として追加されることも決定しているので、高校生が大学入試対策として普通科の高校生もITパスポートや基本情報技術者試験を受ける人が多くなると思っています。

高校でのプログラミング言語は、PythonやJavaScript、VBAなど各学校の選択になります。
大学入学共通テストでは、特定のプログラミング言語に依存しない疑似言語になります。

それに対応させるためにITパスポートでも2022年から疑似言語が扱われることが発表されました。

今までITパスポートはプログラミング知識が無くて大丈夫でしたが、2022年からはプログラミングの基礎知識も試されることになります。

IPAからそのサンプル問題が2問発表されましたので、基礎から解説していきます。

まず、問1の問題を解くうえで必要になる用語の知識を解説していきます。

まずは、変数です。
変数は数字や文字の値を入れる箱の様なものです。
例えば、nameという名前の箱があって、その箱の中身にミライという名前の文字列を格納することができます。箱の名前を変数名といいます。
プログラムコードは数千行にもなることがあるので、同じ値を参照したいときはその変数の名前を指定することで、いつでも値を取得したり、箱の中身を書き換えたりすることができます。

この箱には、文字や数字など色んな値を格納することができますが、この箱には数字だけ、文字列だけなど種類を指定することができます。
この種類をデータ型と言います。
今回の問題では 実数型と整数型と文字列型が出てきます。
実数型で定義された変数は、負の数、正の数、小数などすべての数を入れることができる箱と考えてください。
整数型で定義された変数は、123などの自然数、0と-1,-2等の負の整数を入れることは出来るけどそれ以外の小数などは入れることのできない箱と考えてください。。

1つの変数の箱には1つの値しか入れることができません。
この箱を複数束ねた配列と呼ばれるものがあります。
この一つ一つの入れる箱のことを「要素」といいます。
例えば配列名をnameListとして 一番目の要素にミライ、2番目の要素にがっき、3番目の要素に山田という文字が入っていた場合の例で考えていきましょう。

その配列から特定のデータを取り出したり格納したりする場合は、箱の住所である添字というものが使われます。

今回のITパスポートサンプル問題の場合は添字は「要素番号」という言葉で1から割られているので、箱の並び順と要素番号が一致します。
例えば、がっきーというもじを取り出したい場合は 配列名 角カッコの中に 添字の番号である2を指定すると取り出せます。

ただ、Python等のプログラミング言語や情報の大学入学共通テストのサンプル問題では添字は0から始まるので、注意が必要になります。
例えば、Pythonで同じように添字2を指定すると、やまだという名前が取り出されます。

そして、関数と引数そして戻り値という言葉が重要になってきます。

関数は英語でfunctionというで機能という意味で、特定の機能をブロックで切り出したものになります

例えば、値を2つ渡すとそれを掛け算して返却してくれる関数 kakezan を定義したとしましょう。

関数に受け渡す値のことを引数といって、計算結果など関数から戻される値のことを戻り値と言います。


関数を呼び出す際は、関数名 丸カッコの中に引数をいれます。
例えばkagezan関数の呼び出しに 数字の3と5を 引数として渡します。

kakezan関数の中で3×5を計算して 15を返却しますのでそれを変数に入れるたりそのまま表示させたりすることができます。

では、実際の問題を解きながら解説していきます。

まず、今回は関数名がcalcMean 引数は要素数が1以上の配列dataArrayとなっています。
先ほどは2つかずで引数を2つに分けて渡しましたが、今回は配列で渡すことで呼び出しもととしての引数は配列型1つで良いということが分かります。

そしてその関数の機能は 受け渡された配列の中身の平均値を算出して戻り値として返却するとあります。

疑似言語を解くコツとしては、実際に簡単な値を当てはめてプログラムを紙上で動かしてみながら穴を埋めていくということです。

今回は 配列に5と3と4セットしてclacMeanの関数を呼び出すとします。
戻される値としては5+3+4=12を3で割った平均4が返却されることになります。

関数が呼び出されたら 実数型の変数sum と 同じく実数型の変数meanが定義されます。
この時点では、変数の箱の中身は空っぽです。
そして、整数型の変数iが定義されこれもこの時点では値は格納さていません。
そして sum 左やじるし 0は 変数sumに0を格納するという意味になります。このことを代入と呼びます。

次のfor文は繰り返し処理になります。
繰り返す範囲はendforまである処理の繰り返しになります。
――

繰返しの継続する条件は、forの隣の丸カッコ内にかかれています。
iを1から1ずつカウントアップしてdataArrayの要素数になるまで処理を繰り返します。
今回の例は、要素数は3なので、ループを3回繰り返すことになります。

では、繰返し処理の中身を見ていきましょう。
空欄aの部分は aの処理結果を変数sumに代入するという意味になります。


選択肢を見ると、sum+dataArray[i] かsumxdataArray[i]になります。
今回は平均値を求めるのが目的で、平均は要素内のすべての値を足して要素数で割ってあげると算出できるので、ここの処理は要素内のすべての値をfor文の中で足していると想像できます。
加算処理で実際に値を当てはめながら処理を説明していきます。

まず iに1がセットされます。
 変数sumの中身は0 iは1なので dataArray[1]は、この例だと5になります。
つまり0+5の結果である5を変数sumに代入します。代入する前にあった0の値は上書きされます。

2回目のループに入ります。

まずiに1を加算して2となります。 変数sumの中身は5 iは2なので dataArray[2]は、この例だと3になります。
つまり5+3の結果である8を変数sumに代入します。代入する前にあった5の値は上書きされます。

3回目のループに入ります。
まずiに1を加算して3になります。
 変数sumの中身は8 iは3なので dataArray[3]は、この例だと4になります。
つまり8+4の結果である12を変数sumに代入します。

ループの処理回数が、要素数の3に達したので次のループは行わずに、endforの次の行の処理に移ります。

変数meanに sum ÷ 何とかをした値を代入していることが分かります。

選択肢はiかi+1ですが、iには現在要素数である3が入っているので、平均を求めるには要素数で割ってあげればいいので、わざわざ+1する必要はありません。
よって bは要素数が入っているiとなります。

最後のreturn mean は変数meanの中身の値である平均値の4を呼び出し元に返却します。

呼び出しもとは得られた値を他の変数に入れるなどして後続の処理で利用します。

これでプログラムの処理は終了です。
選択肢の正解としては アが該当します。


――
では次に問2の問題を解いて行きましょう。

手続きとありますが、先ほど説明した関数と似ていますが、違いは戻り値を持たないものを手続きといったりします。最後にreturnが無いので、戻り値がなく、呼び出されたらこの処理内で★を出力します。

例えば引数に1を渡すと白いほしが1回だけ表示されます。
2を渡すと白い☆のあとに黒い★が表示されます。
4を渡すと白☆、黒★、白☆、黒★の順で表示されます。
仮に0を渡したら星は表示されません。

では処理を追っていきましょう
疑似言語を解くコツは、実際に値を当てはめて処理を行ってみるのがイメージがしやすくなります。

―――――――――
今回は整数型numに3を渡したと仮定して処理を行っていきます。

まず、整数型の変数cnt の宣言と同時に0を代入します。
そして文字列型の変数starColor の宣言と同時に SC1 という文字列を代入します。


ここでaとbの空欄に来ました。

whileはfor文と同じく 繰返し処理になります。
while とendwhileに囲まれた部分を whileの()の条件に当てはまっている間繰り返すことになります。
for文は カウントアップをforの丸カッコ内で暗黙的に行っていましたが、while文は継続条件に使う数値がある場合、明示的に処理内で変更する必要があります。例えばcut変数が一定の値に達したらという条件があった場合、処理途中でカウントアップしないと永久ループになってしまいます。

もう一つのdoと whileの組み合わせは、
条件に関係なく一度は繰返し処理の中に入ることになります。

選択肢はあとから説明するので先に指定回数の3回ループしていきます。

if文は 丸カッコ内の条件に当てはまる場合は、字下げされたelseより前の部分の処理を行います。
条件に当てはまらない場合はelseより後の字下げされた部分の処理を行います。

今回は、 starColorがSC1に等しいかどうかなので
初めの1回目は starColorの変数には初期値のSC1が入っているので 条件に当てはまるので上の処理を行います。
白いほしを画面に出力します。
そして、starColorにSC2を代入します。
そしてcnt変数の 0に1プラスした 1をcnt変数に代入します。

2回ループは starColorはSC2が入っていてSC1と等しくないのでelse文の中に入ります。
黒いほしを出力して、 starColorにSC1を代入します。
そしてcnt変数の 1に1プラスした 2をcnt変数に代入します。

3回目は starColorの変数にはSC1が入っているので 条件に当てはまるので上の処理を行います。
白いほしを出力して、 starColorにSC2を代入します。
そしてcnt変数の 2に1プラスした 3をcnt変数に代入します。

これで3回ループしたので処理を終了する必要があります。

選択肢を確認していきましょう。
while cnt がnum 以下 の条件にすると今の状態だとcutが3 numも3で以下という条件に当てはまってしまってもう一回ループが実行されてしまうので、不正解となります。
cutがnumより小さいという条件には当てはまらないのでループを抜けますのでこちらが正解となります。

doを始めに持ってくるパターンは実行回数に0が渡された場合で考えると、0にもかかわらず、1つ星が表示されてしまうので、はじめにdoを持ってくるパターンは不正解になります。
よって選択肢エが正解となります。

疑似言語はプログラミングの基礎と読解力と実際に値を当てはめて出力結果を紙上で検証するトレース力が試されます。

解いた問題と比例して慣れてくるので、演習を重ねていきましょう。
以上になります。


この記事が気に入ったらサポートをしてみませんか?