擬似言語
ITパスポート試験では、プログラム言語を実際に書くことは求められませんが、擬似言語という形式でプログラミングの問題が出題されます。
擬似言語は、実際のプログラミング言語ではなく、アルゴリズムやプログラムの動作を表現するための自然言語に近い形式の表記法です。
具体的に、試験では以下の形式の擬似言語が用いられます。(表は試験中も確認できます。)
記述形式 | 説明 |
---|---|
〇手続名又は関数名 | 手続又は関数を宣言する。 |
型名: 変数名 | 変数を宣言する。 |
/* 注釈 */ | 注釈を記述する。 |
// 注釈 | |
変数名 ← 式 | 変数に式の値を代入する。 |
手続名又は関数名(引数,…) | 手続又は関数を呼び出し、引数を受け渡す。 |
if (条件式1) 処理1 elseif (条件式2) 処理2 elseif (条件式n) 処理n else 処理n + 1 endif | 選択処理を示す。 条件式を上から評価し、最初に真になった条件式に対応する処理を実行する。以降の条件式は評価せず、対応する処理も実行しない。どの条件式も真にならないときは、処理n + 1を実行する。各処理は、0以上の文の集まりである。 elseifと処理の組みは、複数記述することがあり、省略することもある。 elseと処理n + 1 の組みは一つだけ記述し、省略することもある。 |
while(条件式) 処理 endwhile | 前判定繰返し処理を示す。 条件式が真の間、処理を繰返し実行する。 処理は、0 以上の文の集まりである。 |
do 処理 while (条件式) | 後判定繰返し処理を示す。 処理を実行し、条件式が真の間、処理を繰返し実行する。 処理は、0 以上の文の集まりである。 |
for (制御記述) 処理 endfor | 繰返し処理を示す。 制御記述の内容に基づいて、処理を繰返し実行する。 処理は、0 以上の文の集まりである。 |
擬似言語とフローチャートの対応
変数と型
一般的に、プログラミング言語では、プログラム内で使用する変数を最初に宣言します。
変数の宣言とは、メモリ上に特定のデータを格納するための領域を確保することを指します。変数を宣言するときには、その変数が保持するデータの「型」(例: 整数、実数、文字列など)と「名前」を指定します。変数は、この名前を使ってデータにアクセスしたり、値を変更したりします。
また、いくつかのプログラミング言語では、宣言と同時に変数に「初期値」を代入することが可能です。
以上の特徴は、擬似言語においても踏襲されています。以下に擬似言語の主なデータ型について説明します。
名称 | 説明 | 例 | 宣言の例 (下段は初期化も実行) |
---|---|---|---|
整数型 | 小数点以下がない、正または負の数を表すデータ型。 | -3, 0, 36 | 整数型: cnt 整数型: cnt ← 0 |
実数型 | 小数点を含む数値を表すデータ型。 | -3.14, 0.0, 40.5 | 実数型: sum 実数型: pi ← 3.14 |
文字列型 | 文字の集まりを表すデータ型。通常、ダブルクォートまたはシングルクォートで囲む。 | “Hello”, “ITパスポート”, “56” | 文字列型: str 文字列型: str ← “Hello” |
順次構造
上から下へ順番に処理を行う順次構造について、擬似言語とフローチャートの対応を以下に示します。
擬似言語では、変数を利用する前に宣言が必要になります。また、値を代入する際は、フローチャートと矢印の向きが逆になるので注意してください。
整数型: age
実数型: height, weight
文字列型: name
age ← 25
height ← 172.5
weight ← 65.8
name ← "田中 太郎"
age ← age + 1
選択構造
条件に従って処理を分岐させる選択構造について、擬似言語とフローチャートの対応を以下に示します。
選択構造は、擬似言語ではif文として実現されます。
以下の例では、整数型の変数ageの値にしたがって、18以上なら文字列型の変数kubunに”成年”を代入し、18以下なら”未成年”を代入します。
整数型: age
文字列型: kubun
if(age >= 18)
kubun ← "成年"
else
kubun ← "未成年"
endif
また、選択構造では、elseifを使って分岐を増やすことができます。
以下の例では、整数型の変数bmiの値にしたがって、25以上なら文字列型の変数kubunに”肥満”を代入し、18.5以上なら”普通体重”を、それ以外なら”低体重”を代入しています。
実数型: bmi
文字列型: kubun
if(bmi >= 25)
kubun ← "肥満"
elseif(bmi >= 18.5)
kubun ← "普通体重"
else
kubun ← "低体重"
endif
繰返し構造
条件に従って処理を繰り返す繰返し構造について、擬似言語とフローチャートの対応を以下に示します。
例はアルゴリズムの回でも例として挙げた、1から10までの数を合計するというアルゴリズムです。
前判定繰返し
前判定繰返しは、繰り返しを開始する前に条件を評価し、条件が真である場合のみ繰り返しを実行する方式です。
擬似言語ではwhile文(左)やfor文(右)として実現されます。
整数型: sum, i
sum ← 0
i ← 1
while(i <= 10)
sum ← sum + i
i ← i + 1
endwhile
整数型: sum, i
sum ← 0
for(iを1から10まで1ずつ増やす)
sum ← sum + i
endfor
後判定繰返し
後判定繰返しは、繰り返しの処理を一度実行した後で条件を評価し、条件が真であれば繰り返しを続ける方式です。擬似言語では、do-while文として実現されます。
繰り返し部分の処理が一度も実行されない場合がある前判定繰返しに対して、後判定繰返しは少なくとも一回は繰り返し部分が実行されることが特徴です。
整数型: sum, i
sum ← 0
i ← 1
do
sum ← sum + i
i ← i + 1
while(i <= 10)
繰返し構造の例
以下は、アルゴリズムの回で解説した、1から10までの偶数を合計するアルゴリズムです。擬似言語とフローチャートの対応は以下のようになります。
整数型: sum, i
sum ← 0
i ← 1
while(i <= 10)
if(i % 2 = 0)
sum ← sum + i
endif
i ← i + 1
endwhile
配列を使った反復処理
擬似言語の問題では、配列を扱った問題も出題されます。
配列の特徴として、以下のようなものがあります。
- 組織的なデータの管理:配列は、似たようなデータを1つの名前の下でまとめて管理することができます。例えば、生徒全員の試験の点数を個別の変数として持つのではなく、一つの配列として持つことができます。
- インデックスによるアクセス:配列の要素はインデックスを使用してアクセスすることができます。これにより、特定の要素への迅速なアクセスが可能になります。
- 反復処理の簡略化:配列を使うと、ループを使ってその全要素を効率的に処理することができます。これは、一連のデータに対して同じ操作を繰り返す際に特に有効です。
itパスポート試験の疑似言語の範囲では、上記3の反復処理について問われる問題が頻出問題となっています。
この反復処理に関しては、while文を使うこともできますが、通常はfor文が使われます。
多くのプログラミング言語(疑似言語も含む)では、以下のサンプルの「iを1からintegerArrayの要素数まで1ずつ増やす」の記述にあるような、for文を利用したインデックスに基づくカウントや、配列やリストの要素を直接順番に取得するための機能が提供されています。(for-in文など)これにより、配列のすべての要素を簡潔かつ明確に処理することができ、非常に便利です。
以下は、40人のクラスの数学のテストの平均点を計算する処理の例です。ここでは、整数型の配列であるintegerArrayとfor文によるループを用いて全ての要素を足しあわせています。
実数型: sum, mean
整数型: i
整数型の配列: integerArray ← {85, 90, 78, 92, 88, 76, 95, 89, ...} /* 40人の点数 */
sum ← 0
for(iを1からintegerArrayの要素数まで1ずつ増やす)
sum ← sum + integerArray[i]
endfor
mean ← sum ÷ integerArrayの要素数
関数
また、擬似言語の問題では、関数を扱った問題も出題されます。
関数とは、プログラミングにおいて特定の処理をまとめたものです。その処理を繰り返し利用したい場合や、コードを整理して見やすくするために使用します。
以下は関数に関する基本的な特性です。
- 名前を持つ:関数には通常、特定の名前が与えられます。この名前を使って関数を呼び出し、その処理を実行します。
- 入力を受け取ることができる:関数は引数と呼ばれる入力を受け取ることができます。これにより、関数の処理をさまざまなデータに対して適用することができます。
- 出力を返すことができる:関数は処理の結果を戻り値として返すことができます。これにより、関数の結果を他の部分のコードで利用することができます。
- 再利用性:関数は一度定義すると、何度でもその機能を利用することができます。これにより、同じ処理を何度も書く手間を省くことができ、コードの重複を避けることができます。
- モジュール性:関数を利用することで、コードを小さな単位に分割することができます。これにより、各関数が何をするのかを明確にし、全体のコードが読みやすく、管理しやすくなります。
関数は、プログラムの中で特定の処理をカプセル化するツールとして、効率的なコードの作成やメンテナンスを支援します。
関数の例
2つの数値を引数として受け取り、それらの合計値を戻り値として返す関数について考えます。
この関数を使って、例えば add(3, 5) というように呼び出すと、8 という結果が sum に代入されます。