Memorandum takakurai @Wiki

講習第2回

最終更新:

匿名ユーザー

- view
だれでも歓迎! 編集

プログラミングの基礎 [#o4ac1457]

今回はシミュレーションモデルを作成するために必須の技術、プログラミングについての準備と基礎知識の習得が目的です。生態学とは何の関係もありませんが、モデル構築以外にも応用の利く技術ですので覚えておいて損はありません。


Delphiのダウンロードとインストール [#i141458d]


今回の講習では、プログラミング言語としてObjectPascalを使い、その開発環境としてBorland(株)が開発しているDelphi 6 personal editionを使うことにします。personal以外のエディション(professional, enterprise)は有償ですが、personalは非商用であれば(お金儲けをしなければ)ユーザー登録をするだけで無償で使うことが出来ます。~
DelphiはWindowsにしか対応していませんが、Linuxに対応したほぼ互換性のあるKylixもあります*1。操作方法などはほとんど同じです。~
~
ダウンロードするファイルは
ftp://ftpa.borland.co.jp/delphi/personal/BorlandDelphiPersonalEditionJP.exe~
(または、http://www.cc.kyushu-u.ac.jp/ec/delphi/BorlandDelphiPersonalEditionJP.exe)~
(または、http://www.vector.co.jp/soft/win95/prog/se205882.html)~
~
アップデートファイルもダウンロードしておきます。~
ftp://ftp.borland.co.jp/pub/delphi/delphi6update2.exe~
~
こちらからユーザー登録をします。~
http://www.borland.com/products/downloads/download_delphi.html~
~
下記のようにインストール方法を紹介しているサイトも多いので、それらを参考にして各自Delphiをインストール、アップデート、ユーザー登録してください。~
http://www.maitown.com/soft/delphi/delphi_dl.html(ダウンロード編)~
http://www.maitown.com/soft/delphi/delphi_set.html(インストール編)~

名前:
コメント:


まず何か作ってみる [#ye97d604]


すでにDelphiをインストールしているはずですので、まずは簡単なプログラムを書いてみましょう。いきなりですが、「習うより慣れろ」です。

フォルダを作る、DOS窓を開く [#uf0cbd80]


まず、これから作るソフトを入れるフォルダを作成します。浅い階層に、単純なフォルダ名で作るほうがいいでしょう。~
今回はC:ドライブの直下に「hello」フォルダを作ります。エクスプローラでC:ドライブを開き、メニューの「ファイル」から、「新規作成」「フォルダ」と進んで、作成します。名前は「hello」としておいてください。~

次にDOS窓を開きます。スタートボタンを押し、「ファイル名を指定して実行」を選びます。~
表れたダイアログボックスの「名前」の部分にWindows2000やXPなら「cmd」と、Windows98やMeなら「command」とタイプして「OK」ボタンを押します。黒いDOS窓が開けば成功です。~
そこには3行ほど白い文字が並んでいて、その最下行には「C:\Documents and Settings\username>」となっているはずです。これは「現在の作業フォルダ(カレントディレクトリ、という)がC:\Documents and Settings\usernameですよ。さあコマンドを打ち込んでください。」という意味です。~
早速先ほど作ったフォルダに移動します。「cd c:\hello」と打ち込んでEnterキーを押してください。「cd」は「カレントディレクトリを移動せよ」というコマンドです。~
タイプミスなどがあると「指定されたパスが見つかりません。」などと言ってきますので、もう一度注意深くタイプします。~
うまくいくと画面の最下行は「c:\hello>」となります。~

ここでさらに「dir」とタイプして、Enterキーを押します。「dir」はディレクトリ(フォルダ)の内容を表示させるコマンドです。このディレクトリは先ほど作ったばかりですので、何も存在しないはずですが、色々と表示されます。例えば以下のようになります。

 ドライブ C のボリューム ラベルは WinXP です
 ボリューム シリアル番号は 688E-A094 です

 C:\hello のディレクトリ

2005/11/28  15:12    <DIR>          .
2005/11/28  15:12    <DIR>          ..
               0 個のファイル                   0 バイト
               2 個のディレクトリ  35,022,548,992 バイトの空き領域

この表示を見ると2つのものが存在していることになっています。「<DIR> .」と「<DIR> ..」です(ドット「.」の数が違うのに注意)。前者はこのディレクトリのことを、後者は親ディレクトリ(つまり、C:\)を指します。つまり、結局ファイルは何もないってことです。~
~
慣れない方はピンと来ないかもしれませんが、取り敢えず今後必要なDOS窓の取り扱い方は一通り体験したことになります。このDOS窓は後でもう一度使うので、このまま開いたままにしておきましょう。

名前:
コメント:


Delphiを起動して、プログラムを書く [#uc7ff095]


スタートメニューから「Borland Delphi 6」を探し、その中の「Delphi 6」をクリックして起動します。しばらく待って起動したDelphiはこのような姿のはずです。(画面はバージョン5なので、若干違います)

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (screen1.gif)

画面の中央部を占めているものは「フォーム」と言われるGUIアプリケーションの「素地」にあたるものです。しかし、今回これは必要ありませんので、全て閉じてしまいます。「ファイル」メニューから「全て閉じる」を選びます。~
次にプログラムのひな形を開いてプログラミングを開始します。「ファイル」メニューから「新規作成」を選び、表示されたダイアログの中の「コンソールアプリケーション」を選んで、「OK」ボタンを押します。その結果次のような姿になります。

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (screen2.gif)

今度画面の中程に表示されたのは「コードエクスプローラ」と呼ばれるものです。ここにプログラムのコードを書き込みます。ご丁寧に「ここにプログラムコードを書いてください。」と書いてありますね。なお半角のスラッシュ2つ(//)以降はコメントとして扱われ、プログラムコードとしての意味は持ちません。しかし、ソースコード中に適宜コメントを付けておくことで、見やすいコードにすることが出来ます。ここでは「ここから処理が始まります」と書き換えておくことにします。 ~
~
では、とりあえずプログラムコードを書いてみましょう。コメント行の下に空の行を一つ作り、(意味は分からなくてもとにかく)そこに「writeln('HelloWorld');」と書きます。ObjectPascalの文は必ずセミコロン;で終わります。書き忘れに注意してください。コード全体はこのようになるはずです。

program Project1;
{$APPTYPE CONSOLE}
uses SysUtils;

begin
  // ここから処理が始まります
  Writeln('HelloWorld');
end.

これが出来たらファイルに保存しておきましょう。「ファイル」メニューから「名前を付けて保存」を選択し、先ほど作ったC:\helloに「hello.dpr」という名前で保存します。拡張子「.dpr」はDelphi projectの意味です。

名前:
コメント:


コンパイルと実行 [#c7171c15]


保存したhello.dprはただのテキストファイルです。コードエクスプローラに表示されていたあの文字列が書かれているだけです。当然このままではプログラムとして実行することは出来ません。Delphiのコンパイラはこのテキストファイルに書き込まれた命令を解釈し、コンピュータが実行可能なファイルに翻訳します。~
~
なにやら難しそうですが、こちらがやることは簡単です。「プロジェクト」メニューから「hello をコンパイル」を選びます。それだけです。やってみてください。~
~
コンパイルできましたか?何か間違いがった場合、例えば「Writeln」を「Writelm」と書いてあった場合には、コンパイラが意味を解釈できずにエラー表示をしてコンパイル作業を停止します。この場合ですと、コードエクスプローラの下の方に

[エラー] hello.dpr(8): 未定義の識別子 : 'Writelm'

という表示が出て止まります。これは「エラーがあります。hello.dprの8行目です。Writelmという知らない言葉が書いてあります。」という意味です。ちなみに、コードエクスプローラでは現在のカーソルの位置が左下に表示されていまので、このような間違いの解決(デバッグ)の助けになります。~
~
何もエラーが出ずにコンパイルできた場合、フォルダ「C:\hello」の中身を見てください。自分で作成・保存したファイルは hello.dpr だけですが、今は他にもいくつかのファイルがあります。この中の hello.exe があなた自身が作成したプログラムです。~
~
早速実行してみましょう。先ほど開いておいたDOS窓に移ります。~
まずはこのディレクトリに何があるのか dir コマンドで調べます。次のように表示されます。

C:\hello>dir
 ドライブ C のボリューム ラベルは WinXP です
 ボリューム シリアル番号は 688E-A094 です

 C:\hello のディレクトリ

2005/11/28  15:55    <DIR>          .
2005/11/28  15:55    <DIR>          ..
2005/11/28  15:40               386 hello.cfg
2005/11/28  15:40             1,031 hello.dof
2005/11/28  15:40               141 hello.dpr
2005/11/28  15:40            40,960 hello.exe
               4 個のファイル              42,518 バイト
               2 個のディレクトリ  34,934,247,424 バイトの空き領域

では、いよいよ hello.exe を実行します。「hello*2」と打ち込んで、Enterキーを押してみてください。「HelloWorld」と表示されたら、成功です。

名前:
コメント:

プログラミングの基礎 [#vd687aba]


一応初めてのプログラムができました。順番は前後しますが、ここでプログラミングに必要な基礎知識を紹介します。

変数と型 [#k38e70be]


先ほどのプログラムでは文字列「HelloWorld」を Writeln に渡しましたが、通常は値(数、文字、などなど)を変数の中に入れて取り扱うことが多いです。例えば、変数xの中に100を入れておけば、xを参照することで100を得ることが出来ます。高校数学の代数では変数が表すものは数や数列でしたが、プログラミングの世界では何でも変数の中に格納されます。~
値には整数とか、浮動小数点形式の数とか、文字、文字列、真or偽など様々な種類があります。これがです。モデルを作るために取り敢えず知っておくべき変数の型は以下の4つです。

  • integer(整数型):0とか1とか-100とか
  • double(倍精度浮動小数点型):0.35とか1.23×10の5乗とか
  • String(文字列型):「ABC」とか「わたしは」とか
  • boolean(ブール型):真(True) or 偽(False)の二値を取る

ObjectPascalの世界では、変数は使う前に名前と型をあらかじめ宣言しておくことが必要です。ですから、変数ごとに取り扱うことが出来る型が決まっています。*3~
~
先ほどのプログラムをstring型の変数を使って書き直してみます。まず最初に、変数の名前 MyString と型 String を定義します。変数を定義する語は「var」です。

program hello;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
  MyString: String; 

begin
  // ここにプログラムコードを書いてください。
  Writelm('HelloWorld');
end.

ここではまだ宣言だけで、変数 MyString は使っていません。変数を用いて下記のように書き換えます。ところで、統合開発環境であるDelphiでは、既に宣言した変数名や関数名はその綴りの一部を打ち込むだけで補完されます。例えば、下から3行目の MyString を3文字だけ、mys と打ち込んでください。その状態でCtrlキーを押しながらSpaceキーを押すと MyString が表示されます。そのままEnterキーを押すと MyString が入力されます。今回は一発で目的のものが見つかりましたが、複数表示される場合には上下のカーソルキーで選択できますし、そのまま入力を続けることで候補の絞り込みが行われます。~

program hello;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
  MyString: String;

begin
  // ここから処理が始まります
  MyString:='HelloWorld';
  Writelm(MyString);
end.

これを保存、コンパイル、実行しても、先ほどのものと同じ動作をします。

名前:
コメント:


手続きと関数 [#gd2ac95e]


プログラミングの基礎知識として欠かせないものとして、手続き procedure と関数 function があります。まず関数から説明した方がいいかもしれません。関数は何かの値を返す一連の処理です。数学でいう関数も同様に値を返しますが、それと似たようなものです。~
一方で手続きは値を返しません。何かの処理だけを行います。例えば先ほどの HelloWorld プログラムで使った Writeln は「与えられたString型の文字列を画面に表示して改行を行う」という処理だけを行い、値を返しません。つまり、Writelnは手続きです。~
~
なお、関数が返す値のことを返値といい、手続きや関数に与える値(例えば、Writelnに与えられた文字列'HelloWorld'や変数 MyString)を引数(ひきすう)と呼びます。~
~
また、手続きや関数は Writeln のようにあらかじめ備わっているものだけでなく、自分で新たに定義して使うことが出来ます。むしろ、プログラミングとは手続きや関数を作ることと言ってもいいでしょう。~
先ほどの HelloWorld プログラムの画面表示を行っている部分をあらたに手続きとして定義して、以下のように書き換えてみます。手続き PrintHello を作って新たに定義した手続きを呼び出しています。手続きは接頭辞 procedure を使い宣言します。

program hello;
{$APPTYPE CONSOLE}
uses
  SysUtils;

var
  MyString: String;

procedure PrintHello;
begin
  MyString:='HelloWorld';
  Writeln(MyString);
end;

begin
  // ここから処理が始まります
  PrintHello;
end.

慣れないと見にくいかもしれませんが、処理の流れとしては下から4行目のbeginから始まり、最終的には最下行のend.で終了します。このbegin~end.のブロックは全ての処理の中心となるためメインルーチンと呼ばれます。また、この外側のブロック(例えば procedure PrintHello)はそれに従属する(メインルーチンに呼び出される)という意味でサブルーチンと呼ばれます。ここでは紹介しませんでしたが、関数も同様にサブルーチンです。~
この例では処理をサブルーチンにすることの利点がわかりにくいですが、プログラムがもっと複雑になると個々の処理はサブルーチンに追い出して、メインルーチンは全体の流れをわかりやすくまとめるように書くと、全体として読みやすいソースコードになります。例えば下のコードは繁殖過程、競争、空間構造を考慮したモデルの基本構造です。どうです?見やすいでしょ?

(ヘッダー部分は省略)

procedure reproduction;
begin
  //ここは繁殖に関するサブルーチン
end;

procedure competition;
begin
  //ここは競争に関するサブルーチン
end;

procedure migration;
begin
  //ここは分散に関するサブルーチン
end;

begin     // ここがメインルーチン
  for i:=1 to 1000 // 下記begin~endのブロックを1000回繰り返す
  begin
    reproduction;  // 繁殖して子供を作り
    competition;   // その子供が競争し
    migration;     // 生き残りが分散する
  end;
end.


名前:
コメント:

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

記事メニュー
人気記事ランキング
目安箱バナー
注釈

*1 KylixがLinux対応とはいえ、全てのLinuxディストリビューションですんなり使えなかったりします。たとえば、普及率の高いVine Linuxではそのままインストールできません。Kylixが必要な方は各自詳細を調べてください。

*2 .exeは省略できます

*3 この辺りの厳密さは言語ごとに異なります。ちなみに、厳格なほど面倒臭いのですがエラーの少ないプログラムを作りやすいです。