アルゴリズムとプログラミングとは?|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門


2023-01-11 更新

基本情報技術者試験は、 2023 年 4 月から新制度で実施されます。

この連載では、新制度で採用される新しい擬似言語(旧制度の擬似言語とは、表記方法に違いがあります)を使って、試験のシラバス(情報処理技術者試験における知識・技能の細目)に示されている代表的なアルゴリズムとデータ構造を、プログラミング入門者向けにやさしく解説します。 受験対策としてだけでなく、アルゴリズムとプログラミングの基礎知識を習得するために、ぜひお読みください。

第 1 回である今回は、シラバスの内容に入る前段階として、アルゴリズムとプログラミングとは何かを知り、実際にプログラミングを体験していただきます。

アルゴリズムとは何か?

はじめに、「アルゴリズム( algorithm )」という言葉の意味を説明しましょう。

アルゴリズムの語源は、 9 世紀前半にバグダードで活躍した数学者アル・フワーリズミーです。 ただし、人名というだけでは意味がわかりませんね。 JIS( Japanese Industrial Standards 、日本産業規格)の用語の定義を見てみましょう。 JIS( JIS X 0001-1994 )では、アルゴリズムを「問題を解くためのものであって、明確に定義され、順序付けられた有限個の規則からなる集合」と定義しています。

わかりやすく言えば、アルゴリズムとは「問題を解くための明確で有限回の手順」です。

 

「問題を解くための明確で有限回の手順」の「明確」「有限回」に注目してください。 明確とは、人間の勘に頼ったあやふやな手順ではダメだということです。 有限回とは、手順の終わり方が決まっていないとダメだということです。

例として、「 30 と 50 の最大公約数を求める」という問題を解くアルゴリズムを考えてみましょう。

中学の数学で習った手順では「 30 と 50 を素因数分解して共通する部分を取り出す」としますが、これだけではアルゴリズムとは呼べません。 素因数分解する手順も、共通する部分を取り出す手順も、不明確だからです(図 1 の 1. )。

別の手順として「 30 と 50 の大きい方から小さい方を引くことを両者が等しくなるまで繰り返す」はどうでしょう。 これなら、アルゴリズムと呼べます。 手順にも終わり方も明確だからです。 この手順は、「ユークリッドの互除法」と呼ばれます(図 1 の 2. )。

    図 1 30 と 50 の最大公約数を求める手順

  1. 中学の数学で習った手順
    play_arrow 手順 1
    30 を素因数分解すると
    30 = 2 × 3 × 5 になる。
    ・・・不明確
    play_arrow 手順 2
    50 を素因数分解すると
    50 = 2 × 5 × 5 になる。
    ・・・不明確
    play_arrow 手順 3
    共通する部分の
    2 × 5 = 10 が最大公約数である。
    ・・・不明確
  2. ユークリッドの互除法による手順
    play_arrow 手順 1
    30 と 50 の大きい方の 50 から 30 を引くと、30 と 20 になる。
    ・・・明確
    play_arrow 手順 2
    30 と 20 の大きい方の 30 から 20 を引くと、10 と 20 になる。
    ・・・明確
    play_arrow 手順 3
    10 と 20 の大きい方の 20 から 10 を引くと、10 と 10 になる。
    ・・・明確
    play_arrow 手順 4
    10 と 10 は等しいので 、 10 が 最大公約数である。
    ・・・明確

    infoユークリッドの互除法には、引き算の繰り返しを、除算の余りを求めることで効率的に行う手順もあります。

プログラミングとは何か?

「問題を解くための明確で有限回の手順」すなわちアルゴリズムが見出せれば、それをプログラムとして記述して、コンピュータに問題を解かせることができます。 プログラムは、アルゴリズムをプログラミング言語の構文で記述したものだからです。 プログラムを記述する行為を「プログラミング」と呼びます。

プログラミングをするためには、アルゴリズムが見出せていることと、何らかのプログラミング言語を使えることが必要になります。

 

世の中には、数多くのプログラミング言語があります。 基本情報技術者試験の科目 B 試験では、架空のプログラミング言語である擬似言語が使われます。 この擬似言語は、様々なプログラミング言語の構文を寄せ集めたような表記方法になっています。

例として、リスト 1 ~リスト 5 に、ユークリッドの互除法で 30 と 50 の最大公約数を求めるプログラムを、

  • 擬似言語
  • C 言語
  • Java
  • Python
  • VBScript

で記述したものを示します。 どのプログラミング言語も、英語と数式を混ぜたようなものなので、何となく意味がわかるでしょう(現時点では、何となくわかれば OK です)。 リスト 5 の VBScript のプログラムは、この記事の最後で、実際に作ってみます。

code リスト 1 擬似言語のプログラムの例

整数型: a, b
a ← 30
b ← 50
while (a ≠ b)
  if (a > b)
    a ← a - b
  else
    b ← b - a
  endif
endwhile
show(a)

code リスト 2 C 言語のプログラムの例

int a, b;
a = 30;
b = 50;
while (a != b) {
    if (a > b) {
        a -= b;
    }
    else {
        b -= a;
    }
}
printf("%d\n", a);

code リスト 3 Java のプログラムの例

int a, b;
a = 30;
b = 50;
while (a != b) {
    if (a > b) {
        a -= b;
    }
    else {
        b -= a;
    }
}
System.out.println(a);

code リスト 4 Python のプログラムの例

a = 30
b = 50
while a != b:
    if a > b:
        a -= b
    else:
        b -= a
print(a)

code リスト 5 VBScript のプログラムの例

Dim a, b
a = 30
b = 50
While a <> b
    If a > b Then
        a = a - b
    Else
        b = b - a
    End If
Wend
WScript.StdOut.WriteLine(a)

シラバスに示されているアルゴリズムとデータ構造を学ぶ理由

問題が与えられたときに、それを解くためのアルゴリズムは、自分で考えるものですが、あらかじめ知っておくべき基本的なアルゴリズムというものがあります。 さらに、アルゴリズムと一緒に知っておくべき基本的なデータ構造というものもあります。 これらを知っていれば、自分でアルゴリズムを考えるときの様々な場面で応用ができます。

基本的なアルゴリズムとデータ構造には、どのようなものがあるのでしょう。

それが、基本情報技術者試験の出題範囲であり、試験のシラバスに示されています。 実際の試験問題(現状入手できるのは科目 B 試験のサンプル問題)では、シラバスに示された基本的なアルゴリズムとデータ構造を知っていれば、その知識を応用して解ける問題が出題されます。

図 2 に、シラバスに示された主なアルゴリズムとデータ構造を示しますので、ザッと目を通しておいてください(今後の連載で取り上げますので、ここでは、ザッとで OK です)。

図 2 シラバスに示された主なアルゴリズムとデータ構造
play_arrow アルゴリズム
  • バブルソート
  • 選択ソート
  • 挿入ソート
  • クイックソート
  • マージソート
  • ヒープソート
  • 線形探索法
  • 二分探索法
  • ハッシュ表探索法
  • 文字列処理のアルゴリズム
  • 再帰のアルゴリズム
play_arrow データ構造
  • 配列
  • リスト
  • キュー
  • スタック
  • 二分探索木
  • ヒープ

プログラミングの体験

最後に、プログラミングを体験してみましょう。

ここでは、 VBScript( Visual Basic Scripting Edition )というプログラミング言語を使います。 あまり知られていないことかもしれませんが、 Windows (この記事では Windows 10 を使っています)には、 VBScript のプログラムを実行する機能が用意されているので、何もツール(プログラムを作るためのプログラム)をインストールしなくても、すぐにプログラミングができます

プログラムを記述するには、テキストエディタというツールを使います。 テキストエディタは、文字だけが入力できる簡易ワープロのようなものです。 Windows には、標準でメモ帳というテキストエディタが装備されているので、それを使います。

  1. プログラムを記述する前に、プログラムを保存するディレクトリ(フォルダ)を作っておきましょう。
    Windows のエクスプローラを使って、 C ドライブのルートディレクトリ直下に test という名前のディレクトリを作っておいてください。

いよいよ、プログラミングです。

  1. Windows の「スタート」ボタンをクリックして、表示されたメニューの「 Windows アクセサリ」の中にある「メモ帳」を起動してください。
  2. メモ帳が起動したら、図 3 に示したプログラム(先ほどリスト 5 に示したプログラムと同じものです)を記述してください。
    プログラムは、半角英数文字で記述するので、全角入力モードにしないように注意してください。
    図 3 メモ帳でプログラムを記述する

今後の連載で、プログラミング言語の構文や、プログラミングのノウハウを説明しますので、今回は、「英語と数式を混ぜたようなもの」という雰囲気だけつかんでいただければ OK です。

  1. プログラムを記述できたら、メモ帳の「ファイル」メニューから「名前を付けて保存」を選択し、先ほど作成しておいた C ドライブのルートディレクトリ直下の test というディレクトリに sample.vbs というファイル名で保存してください。
    ファイル名の拡張子の .vbs は、 VBScript のプログラムであることを意味しています。
    1. このとき、「ファイル名」の入力欄の下にある「ファイルの種類」を、「テキスト文書( *.txt )」から「すべてのファイル ( *.* ) 」にしてください。
      「テキスト文書( *.txt )」のままでは、ファイル名の拡張子が .txt になってしまうからです。
    2. さらに、「文字コード」を「 UTF-8 」から「 ANSI 」に変更してください。
      「 UTF-8 」は、 Web ページ関連のファイルを記述するときに使われる文字コードですが、 VBScript のプログラムは ANSI という文字コードにします。
    3. これらの設定ができたら「保存」ボタンをクリックしてください(図 4 )。
      図 4 プログラムに名前を付けて保存する

このプログラムは、 Windows のコマンドプロンプトで実行します。

  1. Windows の「スタート」ボタンをクリックして、表示されたメニューの「 Windows システムツール」の中にある「コマンドプロンプト」を起動してください。
  2. コマンドプロンプトが起動したら、「 cd ¥test と入力して「 Enter 」キーを押し、カレントディレクトリ(現在の操作対象のディレクトリ)をルートディレクトリ直下の test に移動します。
    • cd は、 change directory という意味で、カレントディレクトリを変更するコマンド(コマンドプロンプト内で実行する命令)です。
  3. コマンドプロンプトの表示が C:¥test> になったら、
    cscript sample.vbs

    と入力して「 Enter 」キーを押してください。 これで、 sample.vbs というファイル名で保存したプログラムが実行されます。

    • cscript は、 command line script という意味で、コマンドプロンプトでプログラムを実行します。
  4. プログラムの実行結果として「 10 」が表示されるはずです。 この 10 は、 30 と 50 の最大公約数です(図 5 )。
    図 5 コマンドプロンプトでプログラムを実行する

    • もしも、プログラムの内容に誤りがあると、エラーメッセージが表示されます。
      その場合には、エラーメッセージの内容を参考にしてプログラムを修正し、ファイルを上書き保存してから、再度実行してください。

今回は、アルゴリズムとプログラミングとは何かを知り、実際にプログラミングを体験しました。

次回からは、新しい擬似言語を使って基本情報技術者試験のシラバスに示されたアルゴリズムとデータ構造を学んでいきます。

それでは、またお会いしましょう!

label 関連タグ
科目A試験は、
免除できます。
独習ゼミで科目A試験を1年間免除して、科目B試験だけに集中しましょう。
免除試験を受けた 74.9% の方が、
科目A免除資格を得ています。
科目A免除試験 最大 2 回の
受験チャンス !
info_outline
科目A免除試験 最大 2 回の
受験チャンス !
詳しく見てみるplay_circle_filled
label これまでの『新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門』の連載一覧

マージソート|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

二分木の深さ優先探索と幅優先探索|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

比べてわかるキューとスタックの仕組み|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

「リスト」というデータ構造|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

サーチのアルゴリズム (3) ハッシュ表探索法のアルゴリズム|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

クイックソートのアルゴリズム|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

再帰呼び出しのアルゴリズム|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

サーチのアルゴリズム (2) 二分探索法|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

サーチのアルゴリズム (1) 線形探索法|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update

多重ループを使うバブルソート|新しい擬似言語で学ぶ 科目 B アルゴリズムとプログラミング入門

update
label 著者