| 目次| 1234567891011121314
| 資料| 予定| 課題| 宿題|

プログラミング入門

なぜプログラミングするのか

情報基礎で学んだように,コンピュータを利用するとあらかじめ用意されて いるアプリケーション(KEdit,W.Mail,Mozilla,Excel,GIMP)を組み合わせるだけ でもいろいろな事が可能になります.けれども用意されているアプリケーショ ンだけでは,どうしても必要な処理を行えない,行えても都合が悪い時も考え られます.このような場合でもコンピュータを利用するためには,別の方法を 使ってコンピュータに自分がどのような処理を行いたいかと言う情報を与える 必要があります.

あらかじめ用意されているアプリケーションを利用する場合はメニューから クリックすれば,そのアプリケーションを利用できました,これも"アプ リケーションをダブルクリックすると言うことは,そのアプリケーションを利 用したい"と言う意味であるとコンピュータにあらかじめ指示してあるからで す.

"コンピュータに自分がどのような処理を行いたいか"を教えるためには,誰か がその意味をコンピュータが理解できる手段で指示する必要があります.すな わち"プログラミング言語を使ってプログラムを作成する,つまりプログラミ ングする必要"があるのです.

プログラミング(段階的詳細化)

プログラミングでは,自分が解決したい問題・行いたい処理をコンピュータが 理解できる手段で記述するのですが,その間を埋めるために次のような段階的 詳細化が行われます.
1)要求仕様
コンピュータにやらせたいことを決める
例: 1000個のデータの平均を求める
2)設計
それを,どうやって実現するか(アルゴリズム)を決める
例: データを一つずつ足していって,最後に1000で割る
3)コーディング
プログラミング言語で記述する
4)テスト
実行して間違い(バグ,bug)を探す.間違っていれば修正する(デバッグ,debug)
実際には設計は1段階ですむ場合は少なく,まず大まかな設計を行いその後 段階を踏んでプログラム言語で記述しやすいように詳細な設計を繰り返し行います.

プログラミング言語の種類

プログラムを作成するには,プログラミング言語(programming language)を用 いる.これは,プログラムを作成するためのいろいろな約束事をまとめたもの (体系)である.日本語や英語などの自然に出来あがった言語(自然言語, natural language)とは異なり,プログラミング言語はコンピュータを利用し た問題解決に適した書き方ができるようになっている.プログラムを作成する 人(プログラマー)は,プログラミング言語が提供する問題解決のツールに適合 するような形で,解くべき問題の段階的詳細化を行い,そのための手続きを記 述する必要がある.

もっとも基本的なプログラミング言語は,コンピュータの設計者が定義した命 令セットであり,コンピュータが直接理解できると言う意味で機械語とも呼ば れる.コンピュータに何をやらせるにせよ,最終的には,機械語のプログラム を作成する必要があるが,機械語のプログラムの作成は大変なので,機械語よ りも分かりやすく記述できる高級言語(High Level Language)が考えられた. 高級言語には Basic,Pascal,C,C++,Fortran,Lisp,Prologなど様々なも のがあるが,本講義ではこのうち Java 言語 を学ぶが,一つの言語を覚えれ ば,他の言語の学習は難しくない.

高級言語の例
手続き型言語 FORTRAN, COBOL, BASIC, C, Pascal, Ada, PL/I, ...
オブジェクト指向言語 Smalltalk, C++, Java, ...
その他 Lisp(記号処理言語),Prolog(論理型言語)

Java は他のプログラミング言語と比較して以下のような特徴をもつ.

  1. プログラム言語の基本的要素はほとんどそろっている(汎用である).
  2. コンピュータの機種に依存しないでプログラミングできる.
  3. ネットワークシステム上で使うのが容易である(最近は JavaScript などにとって替わられているが).
  4. 画像制御などの支援系が充実している.
高級言語は,コンパイル(compile)することによって機械語に翻訳され,ファ イルに格納される.コンパイル処理を行うプログラムを,コンパイラ (compiler)と呼ぶ.Java言語のコンパイラは,Javaコンパイラと呼ばれる. [注: Javaコンパイラは機械語に直接翻訳しないが詳細は次週]

高級言語で記述されたプログラムを,ソースプログラム(source program),あ るいは単にソースと呼ぶ.機械語が格納されたファイルを,実行ファイルと呼 ぶ.当たり前のことだが,実行ファイルでないもの(例えば HTML ファイル)は, 実行させることはできない.

プログラミング言語ができること

機械語を利用してコンピュータに指示できることは非常に限られていてちょっ とした事でも簡単に記述することができない.機械語よりもより"高級な"記述 を可能にするため,多くの高級言語では,以下のような機能を用意している.
[注意: 以下は,Java言語の文法に従っているわけではない]
変数
データ(整数,実数)を入れておく箱 x, y, count, a1, ...
参照することで中の値を見ることができる.
配列
変数を一定個数集めたもの.a[0], a[1], a[2], ... a[99]
  • それぞれの要素は,変数として扱える.
  • []の中の数をインデックスと呼ぶ.
  • インデックスには,変数を使える.A[i]
定数
変化しないデータ (10.0, PAI, ...)
変数への代入
変数に値を格納する,後ほど参照する.
  • x ← 10
  • y ← x * 2
  • a[0] ← x
  • a[i] ← i
演算
+, -, * (乗算), / (除算), (括弧)...
  • x ← (y + 10) * (y - 10)
比較
=, <, >, <=, >=
  • 主に,if文やwhile文等で使う
メソッド(関数・サブルーチン)
入出力関数,三角関数,描画関数,...
  • println("Hello!")
  • y ← sin(x)
  • drawline(0, 0, 100, 100)
  • 引数を与えて呼び出すと,その関数のプログラムが実行され,値を返してくる.
  • 値を返さない関数もある.
  • たくさんの関数が予め用意されている.
  • 使い方さえ知っていれば,関数の中身は知らなくてよい.
これらを書き並べると,プログラムがその順(上から下に)実行される.
x ← 10
y ← 20
z ← x * y
output(z)       (output(): 画面に出力する関数)
より複雑な処理を行うために,制御構造がある.
制御構造
if文
条件が成立しているときだけ,処理を実行
  • if (条件) then
     処理1
    例:
    if (お腹が減っている) then
    食べる
  • if (条件) then
      処理1
    else
      処理2
    例:
    if (お金がある) then
      レストランに行く
    else
      自分で作る
  • if (条件1) then
      処理1
    else if (条件2) then
      処理2
    else
      処理3
    例:
    if (お腹が減っている) then
      食べる
    else if (眠い) then
      寝る
    else
      遊ぶ
while文
条件が成立している間,処理を実行
例:
while (太っている) 
  運動する
次の処理
以下のように実行される.
  1. 条件(太っている)が成立するか判定
  2. 成立するなら,「運動する」を実行し,1に戻る
  3. 成立しないなら,「次の処理」に進む
for文
処理を何回か繰り返す(ループ)
for (i ← 1 ... 10) 
  処理
以下のように処理が10回行われる.
  • iに1を代入して,処理を行う
  • iに2を代入して,処理を行う
  • ...
  • iに10を代入して,処理を行う
これらの道具を使って,プログラミングを行っていくことになる.

アルゴリズム(算法)

"プログラムを作成する"でもふれたように,要求仕様を実現するし,問題を解 くための手順をアルゴリズムという.前に述べた「平均を求める手順」つまり 「データを一つずつ足していって,最後に1000で割る」も,ある種のアルゴリ ズムである.すなわちプログラミングを行うことは,アルゴリズムを考えるこ とでもある.

いくつかの簡単な問題を解くアルゴリズムを疑似言語で書いてみる.


| 目次| 1234567891011121314
| 資料| 予定| 課題| 宿題|