pafuイーランスクール 学んでできる

メニューへ戻る

疑似言語文法のポイント学習

学習のポイント

基本情報技術者試験の午後のアルゴリズムの「擬似言語」についての疑似言語の文法についての説明です。変数の宣言、変数のデータ型、条件式の指定方法、配列の定義方法、判断構造、反復構造、関数の定義方法(戻り値・引数リスト)について理解しましょう。

午後の問題に明記されている疑似言語の仕様の確認

1. 擬似言語とは?
基本情報技術者試験で、午後のアルゴリズムの問題で従来は「流れ図(フローチャート)」を使用していました。昨今の「構造化プログラミング」の定着により、構造チャートの一種である「擬似言語」が導入されました。「順次」「判断」「反復」の3種類のみの構造を使用して、アルゴリズムを表現したものです。
2. 擬似言語の構成
擬似言語は、「宣言部」と「処理部」から構成されています。
宣言部
宣言部では、プログラムの名称と変数の定義を行います。 「プログラム名称」「変数の定義」を先頭に「○」をつけて記述します。また、関数の場合は、引数・返却値の指定があります。関数については後述します。
処理部
実際のアルゴリスムである処理を記述します。アルゴリズムは以下の3つを組み合わせて表現します。
・順次構造
・判断構造
・反復構造(ループ構造)

コメント(注釈)
「コメント」は、説明のために使用します。プログラムの動作に影響はありません。次のようにします。

/*この中にコメントを記述*/

3. 宣言部
プログラム名称
プログラム名称は、「○合計を求める」のように記述します。

変数の定義
変数の種類には、以下のものがあります。
データ型 説明
整数型 整数を扱うデータ型です。(例) -5 2 10
実数型 実数を扱うデータ型です。(例) 1.25 -52.325
文字型 文字データを扱うデータ型です。(例) 'A' 'B' 'C'
文字列型 文字列を扱うデータ型です。(例) 'PAFUTAMA'
論理型 trueとfalseを2値をとるデータ型です。
レコード型 複数の変数をまとめて扱うデータ型です。「構造体」とも言います。
例えば、整数型の変数 sum を定義する場合は、

○整数型:sum

のようにします。
2つの実数型の変数 A Bを定義する場合は、

○実数型:A, B

のようにカンマで区切ります。

配列の定義
配列の場合は、以下のようにします。

/*100個の要素のsumという配列です*/
○整数型:sum[100]
/*配列sumに1から5の初期値を設定 要素数は5となります*/
○整数型:sum[] = (1,2,3,4,5)

上記のように配列は、定義だけの場合は、要素数を指定して、各要素の初期値を与える場合は、要素数の指定は必要ありません。
※配列のインデックス(添字)は「0」か「1」より開始されます。問題文に記載されていますので、開始インデックスを間違わないようにしてください。
2次元配列は、以下のようにします。

○文字型:moji[10][5]

※10行5列の文字型のmojiという変数名の配列を定義しています。

レコード型の定義
これは、複数の変数をまとめたものです。例えば、学校の生徒の個人情報をレコード型で定義すると以下のようになります。

○レコード:生徒 (整数型:生徒番号. 文字型:氏名[20]. 文字型:電話番号[12])

のように定義します。変数の区切りは、ピリオドを指定します。また、レコード型は配列でも定義できます。上記を100個の配列で定義すると以下のようになります。

○レコード:生徒[100] (整数型:生徒番号. 文字型:氏名[20]. 文字型:電話番号[12])

4. 処理部

順次構造

これは、命令の記述です。「」を先頭につけます。

・A ← B

これは、代入文と言い、変数Bの内容をAへ格納しています。また、四則演算や余りを求めるには、以下の算術演算子を使用します。
算術演算子
加算 +
減算 -
乗算 *
除算 /
剰余 %

・M ← M + 1

これは、変数Mの内容にプラス1しています。

判断構造

条件を指定して処理を分岐します。条件には以下を使用します。
条件演算子
等しい =
等しくない
より大きい >
より小さい <
以上
以下
例えば、変数Aが100以上の時

A ≧ 100

とします。
論理演算は、以下のように指定します。
論理演算子
論理積 and
論理和 or
否定 not
例えば、変数Aが100以上200以下の場合は

A ≧=100 and A ≦ =200

とします。
これは、変数Iが50より大きい時、sumAに加算して、それ以外の時は、sumBに加算しています。

反復構造

反復構造には、「前判定反復構造」「ループ回数が分かっている時の反復構造」「後判定反復構造」の3種類があります。

反復構造(前判定反復構造
これは、Iが100以下の間、先ほどの判断処理を行っています。反復構造の場合は、「条件が真」の間、ループ処理を行います。ループに入る前に条件を確認します。ですから、1回もループの中の処理が実行されない場合があります。
上記の処理を正式に記述すると以下のようになります。

反復構造(ループ回数が分かっている時の反復構造
ループ構造では、繰り返す回数が分かっている場合、以下のように記述できます。

 変数名:初期値, 条件式, 増分

今回は、変数「i」が1を初期値として、i<=100の間、ループして、iは1ずつ加算されます。このような場合、以下のように記述できます。

i :1, i<=100, 1

一般的に回数の分からないループを「while文」、回数の分かっているループを「for文」といいます。
反復構造(後判定反復構造
反復構造では、最初に必ず1回、ループの中の処理を実行して、ループ条件を最後に確認する「後判定反復構造」があります。
※実際の試験では、出題はされることは非常に少ないです。
5. 関数
関数」とは、「副プログラム」とも言います。「C言語の関数」「Javaでのメソッド」「VBでのプロシージャ」「フローチャートのサブルーチン」のことで、「あるまとまった処理」のことです。関数では、「関数名」「引数」「戻り値」を記述します。

最近の問題は、この関数での疑似言語の出題がほとんどです。引数・戻り値の意味は、問題文に説明があります。

関数の書き方
○戻り値のデータ型:関数名(引数リスト)
○戻り値のデータ型:関数名(整数型:X,整数型:Y)
○関数名(整数型:X, 整数型:Y)
引数リストは、「データ型:変数名」のように記述します。複数ある場合は、「,(カンマ)」で区切ります。
3つ目は戻り値がない場合です。
また、関数名は日本語ではなく英字で表現されます。
整数型:Select(整数型:x[], 整数型:n)
上記は、関数名「Select」戻り値「整数型の値を返す」引数リスト「整数型の配列」「整数型の変数n」を受け取る。

例えば、整数型配列変数HAIに100個の要素があり、各要素には1から100までの値がランダムに格納されてします。配列の要素の値に「77」が存在した場合、「trueを戻り値」とする関数を考えてみます。77も引数として受け取ります。関数名は「Kensaku」とします
上記の赤字の意味ですが、「break文」は、ルーフ処理から強制的に脱出する命令です。また、「return文」は、戻り値がある場合にその戻り値を指定する命令文です。戻り値がある場合は、必ず必要となります。戻り値がない場合は、必要としません。引数のHAIは整数型の配列で、numが「77」がセットされているという前提です。
この関数である「加算処理」を呼び出す主プログラムは以下のようになります。
今回の関数「Kensaku」は「返却値」があるため、

ret = Kensaku(HAI, 77)

と記述します。これにより、変数「ret」には返却値の「true」か「false」が代入されます。
主プログラムから関数を呼び出す場合は、関数で定義された「引数」を正しく指定して呼び出す必要があります。プログラムでは、主プログラムで関数を呼び出す際の引数を「実引数」といい、関数で定義する引数を「仮引数」と呼びます。これも覚えておきましょう。
6. 実際の問題

実際の試験問題は
■ プログラムの説明(仕様)
■ 関数の引数・返却値の意味
■ 疑似言語での関数のアルゴリズム ※空欄があります。
■ 設問

という感じです。
平成27年秋期の問題では、「こちら」よりご確認ください。
7. まとめ
擬似言語の文法的な部分に注目して説明をしました。これだけの知識だけで、擬似言語の文法は理解可能かと思います。あとは、

問題文の仕様を把握してアルゴリズムの解読が出来るかどうかが、解答の分かれ目かと思います。

擬似言語の問題は、文字型配列やレコード型が多いのですが、ファイル処理の問題も過去に出題されています。ファイル処理の場合は、「ファイルの読み込み処理」は「関数」として定義されています。問題文より、ここでこの関数の処理概要を把握して下さい。

アルゴリズムについては、一から学びたい方は、当サイトの「アルゴリズム制作講座(e-ラーニング)」をお勧めします。

メニューへ戻る

pafuイーランスクール

pafuイーランスクール 学んでできる