擬似言語入門講座

第1回の「E-R図の線の引き方」っていう、ある意味どマイナーなところから、
またえらくおおざっぱなタイトルになったね。

仕方あるまい。中の人が仕事で擬似言語を教えることになったのだからな。
良い機会だから授業資料をアレンジしてみようとしたらしいな。

ふうん。ところで「擬似言語」ってなに?

うむ、まずはそこから説明だな。
「擬似言語」の「言語」とは、「プログラミング言語」のことを指す。
「プログラミング言語」とは、簡単に言ってしまえばコンピュータを動かすための言語、
ということになる。

コンピュータを、ねえ。なんでいちいち専用の言語が必要なの?
「動けー!!」って言えばいいじゃない。

ふむ、残念ながらコンピュータは人間の言葉が分からんのでな。
なので、コンピュータが分かる言葉で命令する必要がある。
そのための言語が「プログラミング言語」なのだ。(※1)

便利そうに見えて結構面倒くさいのねえ、外の世界の式神(=コンピュータ)は。
で、「擬似言語」ってことは、「偽物のプログラミング言語」ってこと?

うむ。おおむねその理解で正しいだろう。
擬似言語というのは特に、情報処理技術者試験で扱われることが多いな。

あれ?ちょっと待ってよ。なんでわざわざ偽物の言語を使うの?
本物のプログラミング言語を使えばいい話じゃない。

いいところに気がついたな、妹紅。
それはな、この試験で問うのが、「プログラミング技術」ではないからなのだ。

え?どういうこと?

例えば、「3+2の答えを言え」という問題があったとする。
日本人ならここで「5」と答えるだろう。しかし、英語圏の人間であれば「five」と言うし、
フランス語なら「cinq」(サンク)と言うだろう。
しかし、どれも「3+2」の考え方としては全く間違っていないだろう?

そうね。言い方が違うだけで、答えは一緒だわ。

擬似言語も同じように「考え方」を問う問題だ。
世の中には無数のプログラミング言語がある。その全てを網羅している人間などいない。
だから、ほとんどの人間が簡単に理解できる共通の言語「擬似言語」が必要なんだ。

つまり、ぶっちゃけて言えば「情報処理技術者試験専用の言語」ってわけね。

………いや、別に専用ではないが。まあいいか、実務で使ってるところ見たことないし。
さて、少し話が逸れたので元に戻そう。ここでは、擬似言語の構成・要素・書き方について
触れてみたいと思う。

ああ、その辺はきちんとルールがあるのね。

さすがに「架空の言語」とはいえ、何でもかんでも自由に書かれてしまっては大変だしな。
さて、まずは擬似言語の構成からだ。

あ、なんか「宣言部」っていうのと「処理部」っていうのがあるね。

うむ。「宣言部」というのは、
「このプログラムの名前はこうですよ、このプログラムで使うデータはこうですよ」
という情報を記述する部分だ。
乱暴な言い方をしてしまえば、スペルカードの宣言に似てるな。

ああ、あれも技の名前があるものね。
で、「処理部」っていうのは?

その名の通り「処理」が書かれている部分に当たる。
スペルカードで言えば「どのような効果が発動するか」「どんな弾幕が展開されるか」といった具合だ。

なるほどー。
つまりこういうことね!!

(………どうしよう、これ)


閑話休題、さて妹紅よ。今の擬似言語を見て、どういうプログラムか理解できたかな?

え?いやいやいや、全然わかんないよ。
なんか矢印とか、よくわかんない記号とか出てきたし。

まあ、そうだろうな。
ということで、これからは各種記号の説明に入っていくぞ。
まずは宣言部からだ。
「プログラム名」とあるのは、そのままこの擬似言語の名前だ。
次に「整数型」とあるのは、このプログラムの中で扱う「変数」の「型」を指している。

「変数」?「型」?なあに、それ。

「変数」というのは、「データ」を入れるための「箱」のようなものだ。
そして、「箱」には、特定の種類の「値」しか入れられないのだ。
例えば妹紅、「16+23+45+49+11+33+51」の答えは何だ?

え、ええっ!?
きゅ、急に言われても、ちょっと待ってよ。
ええと、16に23足して………39の………84の………
(メモに途中の計算結果を書いている)

はい、ストップ。いま、妹紅は紙に途中までの計算結果を書いていたな。
そのメモ帳が「変数」だと思ってくれればいい。いくらコンピュータとはいえ、
毎回毎回上記の計算をするのは大変だ。だから計算結果などを保存する「箱」が必要となる。
それが「変数」ということなんだ。

う、うーん………分かったような、分からなくなったような。

まあ、おいおい慣れていくだろうさ。
次に「型」の説明だが、さっきも言ったように、「変数」には「特定の値」しか入れられない。
この「特定の値」こそが「型」というものだ。

ふうん。「型」にはどんな種類があるの?

そうだな………擬似言語でよく出てくるものといえば、
「整数型」「文字型」「論理型」ぐらいだろうか。
整数型は0や1、-1などの数字のことだ。文字型はそのまま「あ」とか「い」とかの文字が入る。

うん、それは言葉でだいたい想像できるけど。
「論理型」ってのは?

うん、これはちょっと特殊なんだ。
数字や文字ではなくて「TRUE」「FALSE」という2種類しか入らない。
基本的に「TRUE」は「ある条件を満たす」ことを意味し、「FALSE」は「条件を満たさない」ことを意味する。
まあ、試験にはあまり出てくることの無い変数だから、あまり気にしないでも良いだろう。

(ノートにまとめ中)………うん、宣言部はだいたい分かったよ、慧音。
次は処理部、だっけ。

うむ、そうだな。
処理部の記述だが、実は処理部の構造というのは3つに分かれている。
すなわち「順次構造」「判断構造」「反復構造」の3つだ。

順次?判断?反復?
いっぺんに3つも出てきて、よく分からないよ………。

ははは、まずは落ち着いて文字の意味を考えてみようか。
まず「順次」だが、「順序に従って物事を行うさま」とある。
擬似言語の場合、これはつまり「上から下まで順々に処理をする」という意味になる。

え?じゃあ、何も考えずに処理をこなしていけばいいだけなの?

ああ。そんなにたいした話じゃないだろう?
気をつけるのは、書き方だけだな。
「・A ← 10」のように、最初に「・」を付けるのを忘れないことだ。

なるほど………って、ちょっとまってよ、慧音。
今の処理の中にある「←」ってどんな意味があるの?

お、良いところに気づいたな。
この「←」は「代入」と呼んでいる。
先ほど「変数」というのを「箱」のようなもの、と説明したな。
この処理は、まさに「箱」に値を「格納」しているんだ。

ええと………つまり、「A」という「変数」に、
「10」という「整数型」の値が入った、ということ………なの?

まさにその通りだ。いいぞ妹紅。
これで、以後この「A」は、「10」として扱うことができる。
たとえば、「A+5」のような計算だって出来てしまうんだ。
この場合は「10+5」となるので「15」になるな。

おおー、結構便利ね。
ね、ね、ひょっとして、「C←A+B」みたいなことも出来たりするの?

おお、なかなか冴えてるじゃないか。
そうだ。見た目は変数という文字だが、その中身は整数と変わらないからな。
この場合は変数Cに変数A+変数Bの結果を代入する、ということになる。

なーんだ、意外と簡単じゃないの。
よーし、この調子で次の「判断構造」ってやつを教えてもらおうじゃないの!

では次の「判断構造」だ。
これは「ある条件」を指定して、それを「満たす」か、「満たさないか」によって処理を変えたい場合に使う構造だ。図で表すとこうなる。

ええと………縦に矢印が延びていて、真ん中辺りで横棒が引かれているのね。
たぶん、矢印の先端に書いてあるのが「条件」かな?

うむ、その通りだ。
今回の条件は「A<10」なので、Aが10 「よりも」 小さい場合に「条件を満たす」ことになる。
その場合、横線で区切った上の部分の処理を行う。
逆の場合は、横線で区切った下の部分の処理を行う。これが判断構造だ。

ん?ねえ慧音、なんで今、「よりも」っていうのを強調したの?

………ああ、それか。
いや、なに、いい年して 「以下」 「未満」 の区別も付かんような者もいるのでな。
念のために強調しておいただけだ。
ちなみに「以上」「以下」の場合は、不等号にイコールが付くからな。

「≦」や「≧」ってやつだね。
あ、一応補足しておくと「〜よりも」とか「未満」とか言う場合は、「<」や「>」になるからねっ。

補足感謝するぞ、妹紅。さあ、最後は「反復構造」だ。
これが一番やっかいだからな、気をつけてかかるとしようか。

え゛っ。大丈夫かなあ………。

ははは、まずは形から見ていこうか。

おっ、今度は「■」に縦棒がくっついたような形が出てきた。
………あれ、上端にまた何か書いてある。ひょっとして、これも「条件」なの?

勘が良いな妹紅、どこぞの巫女みたいだぞ。
反復構造とは、 「ある条件を満たす間、決められた処理を繰返し行う」 ものだ。
そして、その「条件」を満たさなくなったときに、繰返しを止めることになる。

じゃあ、この場合は 「変数 I が10未満だったら、この中の処理を繰り返す」 ってことでいいの?

その通りだ。ちなみにこの「条件」は、反復構造の処理が終わった後に毎回判定することになる。
その時に条件を満たしてなかったら、繰返しを止める………という仕組みだ。

後は何か気をつけることはある?

そうだな。たいていの場合、
この擬似言語を学ぶ前に「フローチャート」を勉強している者が多いと思う。
その場合、繰返しの条件がフローチャートとは異なるので、そこを気をつけなければならないな。

ふろーちゃーと?

ああ。フローチャートの場合、擬似言語のように繰返し構造を記述できるが、
このときの条件が「繰返しを止める条件」になっているんだ。
擬似言語の条件とは全くの逆だろう?

あ、本当だ。
ねえ、なんでこんな面倒くさいことになってるの?

む。そ、それは………すまん、分からん。
ただ、結局フローチャートも擬似言語も、数ある言語の一つだ。
それぞれの言語には長所もあれば短所もある。
その特性を考えた結果じゃないのかな、この違いは。

あ、なるほど。どの言語が優れている、っていうのは一概には言えないのね。
まあ何にせよ、どっちも勉強している人は間違わないようにね。

※2012/01/09追記 フローチャートは「COBOL」という言語を記述するためのものだということで、COBOL言語の繰り返しは「終了条件」を書くため、フローチャートもそうなっているとのこと。


………さて、少々急ぎ足だったが、擬似言語の構造について一通り説明した。
文法的な面では、これで全部になる。どうだ、意外と覚えることは少なかったんじゃないか?

うーん、言われてみればそうね。
もっと一杯覚えるもんだと思ってたわ。

しかし、試験で出てくるような擬似言語は、こんな簡単なものではない。
今の3つの構造が複雑に組み合わさっているものが殆どだ。
たとえば、反復構造の中に判断構造が入っているものとか、な。

う゛、それは難しそう………。

とはいえ、基本はやはり今回学んだものが全てだ。
あとはどれだけ柔軟な考えができるか、だな。

なるほど。よーし、頑張ってモノにするぞー!!

おお、その意気だぞ妹紅。
さて、ということで今回の講座はここまでだ。
ご意見、感想、いつでも待っているぞ。

じゃ、まったね〜♪


※1:
厳密には、コンピュータは「機械語」という0と1の情報のみを受け取ることが出来る。
しかし、それを人間が理解することは不可能である。
そのため、プログラミング言語を機械語に翻訳する手段・機能が必要になる。
それが「コンパイラ」である。
<あとがき>
今回は擬似言語。
授業で擬似言語の基礎から教えることになって、「ついでだから」ということで作って見た。
何がついでなんだかよく分からないけど、まあ入門用としてはまずまずの出来になったんじゃないかな。
しかしフローチャートと擬似言語の繰返し条件が真逆なのは本当に何故だろう。
あれで混乱する学生がかなり居るというのに。

本ページにて扱っている画像は以下サイトから拝借しております。
こんなんでいいんすか
慧音先生の情報処理技術者試験の対策講座へ戻る。
戻る。