アルゴリズムとプログラミング
問題を解決するための手段や方法を「アルゴリズム」といいます。その「アルゴリズム」をコンピュータ上で実行できるように、コンピュータ言語などで記述したものを「プログラム」また「ソースコード」といいます。また、「プログラム」を作成する行為を「プログラミング」といいます。
アルゴリズムとフローチャート
「アルゴリズム」は視覚的にわかりやすくするために「フローチャート」や「アクティビティ図」が使われることがあります。
「フローチャート」はJIS規格によって用いる記号が定められています。 以下に、1から5までの数字の和を計算するアルゴリズムを、変数 n および ans を使ってフローチャートで例示してみます。
n はこれから加算する数値を格納する変数、また ans は答えを格納する変数となっていることが分かるかと思います。
一方で、「アクティビティ図」は、より複雑なプロセスを詳細に表現するのに適したものです。以下に自動販売機の処理について「アクティビティ図」で例示します。
どちらについても、処理が図示されることで文章で書かれる場合よりも、理解しやすくなっているかと思います。
プログラミング
プログラミング言語
プログラミングは「プログラミング言語」を用いて行います。コンピュータは基本的に「機械語」と呼ばれる 0 と 1で構成される命令で動作します。その「機械語」を直接人間が扱うことは難しいため「プログラミグ言語」を介してプログラミングを行います。
「プログラミング言語」にはいくつかの種類があり、いくつかの分類があります。一つの分類として、「コンパイラ方式」と「インタプリンタ方式」があります。それぞれの方式とそれに属する「プログラミング言語」は以下の通りです。
「コンパイラ方式」:記述されたプログラムのすべてを「機械語」に翻訳(この翻訳を「コンパイル」と呼びます)してから実行をします。
下記の「インタプリンタ方式」より動作速度が速いという特徴があります。よって速度が求められる装置などに組み込まれる事が多いです。この方式の「プログラミング言語」には、「C言語」、「C++」、「Java」などがあります。
「インタプリンタ方式」:この方式では、「インタプリンタ」という(別の)プログラムが記述されたプログラムを1行ずつ実行していきます。「コンパイラ方式」と違い「コンパイル」の手間が必要ないことが特徴です。しかしながら先述したとおり、「コンパイラ方式」より実行速度が遅くなるという欠点があります。この方式の「プログラミング言語」には、「Python」、「JavaScript」(※ Java とJavaScript は別の言語です)などがあります。
プログラムの処理と制御構造
プログラムの処理の基本は、入力 → 計算 → 出力 となります。
「入力」:キーボードから数値や文字を入力する場合や、数値や文字が記述されたファイルを入力とする場合があります。
「計算」:ここがプログラムの肝であり、意図する計算処理がここにプログラミングで記述されます。
「出力」:計算結果を「出力」させるものですがプログラムでは途中経過も「出力」させたい場合が多々あります。そのような場合でも明示的に「出力」する命令をプログラム中に記述する必要があります。
また、プログラムの「制御」は基本的に以下の3種類の基本構造でできています。
「順次(逐次)」:直列的に、処理が順番に行われる構造です。プログラムでは上から下に流れていく逐次構造が基本です。
「選択(分岐)」:条件により、その後の処理を分岐させる構造です。if などの命令分が使われます。
「反復」:条件にあてはまる間、同じ処理を繰り返します。 for や while などの命令分が使われます。
以下にフローチャートで書いた場合の例を示します。
また、上の方の「1から5までの数字の和を計算するアルゴリズム」を、python で書くと以下のようになります。
プログラミングの流れ
プログラミングは、一般に以下の流れで行われます。
設計:プログラミングで処理する内容(問題解決の手順)を考えます。
↓
記述(実装):プログラミング言語でプログラムを記述します。「実装」とも呼びます。
↓
実行:コンピュータで記述したプログラムを実行します。この時、エラーメッセージが表示される場合があり、その場合はプログラムに文法上の誤りがあるので修正します。
↓
テスト(試験):エラーメッセージが表示されない場合でも、意図しない結果をプログラムが出力する場合があります。その場合がないか、様々なテストケースで試験します。ここで、意図しない結果が出力される場合の多くは、設計にミスがある場合です。そのような場合は、再び「設計」の段階に戻り検討・修正していきます。
プログラミングにおいて生じる問題(文法上の誤りも、設計ミスも含めて)を「バグ」と呼びます。その「バグ」を取り除く作業を「デバッグ」と呼びます。一般的にこの「デバッグ」の作業に多くの時間が割かれます。