コンソールアプリケーションを実行するには、[ ファイル|新規作成|その他 ] を選択し、表示されたダイアログの中の「コンソールアプリケーション」を選択します。すると、以下のようなコードが自動生成されることになります。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main :
ここにプログラムコードを書いてください }
end.
「ここにプログラムコードを書いてください」と書いてあるように、そこにプログラムを書いて見ましょう。以下のように書いてみます。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
begin
{ TODO -oUser -cConsole Main :
ここにプログラムコードを書いてください }
Writeln('Hello world');
Readln;
end.
ここで、F9キーを押してみてください。こんなのが出てくると思います。
リターンキーを押すと終了します。
WritelnとReadlnは、それぞれ「書く」と「読む」です。Writelnの方は解ると思いますがReadlnは、わかりずらいので、次のようなプログラムを書いてみてください。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
s: string;
begin
{ TODO -oUser -cConsole Main :
ここにプログラムコードを書いてください }
Writeln('文字を入力してください');
Readln(s);
Writeln('文字は「' + s + '」です');
Readln;
end.
Readlnは、読み込みに使っているみたいです。では、なぜ最後の行にReadlnが必要なのでしょうか、試しに最後のReadlnだけコメントにして、実行してみてください。文字を入力すると、一瞬にして画面が閉じてしまいます。最後のReadlnは、プログラムを終了させないために、存在していたのでした。(ユーザーの入力を待っているだけです。)あまりコンソールアプリケーションをやる利点が見つからないかもしれませんが、 簡単な、関数や文法の実験には適していると思います。実際ここでは、自作関数について見てみます。 一つの procedure にいろいろな操作を書いてしまうと、プログラムが複雑になってしまい、分かりにくくなってしまいます。 そこで一つの手続き(関数)に一つの操作を記述すれば、何をする手続き(関数)なのかがはっきりとし、またその手続きを変更する際にも、どこを変更すればよいのかが分かりやすくなります。以下の例を見てください。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
procedure MySecondProc;
begin
Writeln('ここは、MySecondProc です');
end;
procedure MyFirstProc;
begin
Writeln('ここは、MyFirstProc です');
end;
begin
{ TODO -oUser -cConsole Main :
この下にコードを記述してください }
Writeln('--- Start ---');
MyFirstProc;
MySecondProc;
Writeln('--- End ---');
Readln;
end.
このように、自作関数を作成して、呼び出すことができます。この例を参考にして、与えられた整数に特定の数値を加えて、それを返す関数を作成してみることにしましょう。ここでは、受け取った整数に 3 を加えて返す関数、10 を加えて返す関数、1 から 100 までのランダムな整数を加えて、その値を返す関数を作ってみます。(関数の名前は、それぞれ Add3, Add10, AddRandom100 とします。)
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Add3(int: Integer): Integer;
begin
Writeln('3 を足します。');
Result := int + 3;
end;
function Add10(int: Integer): Integer;
begin
Writeln('10 を足します。');
Result := int + 10;
end;
function AddRandom100(int: Integer): Integer;
var
RandomValue: Integer;
begin
RandomValue := Random(100) + 1;
Writeln(IntToStr(RandomValue) + ' を足します。');
Result := int + RandomValue;
end;
var
Value: Integer;
ResultValue: Integer;
SelectValue: Integer;
begin
{ TODO -oUser -cConsole Main :
この下にコードを記述してください }
ResultValue := 0;
while true do
begin
Writeln('整数を入力してください。0 を入力すると終了します');
Readln(Value);
if Value = 0 then break;
Writeln('どの関数を使用しますか? 0, 1, 2 の中から選択してください。');
Writeln('0 - Add3');
Writeln('1 - Add10');
Writeln('2 - AddRandom100');
Readln(SelectValue);
// 入力された値に応じて、呼び出す関数を選択します。
case SelectValue of
0: ResultValue := Add3(Value);
1: ResultValue := Add10(Value);
2: ResultValue := AddRandom100(Value);
end;
Writeln(ResultValue);
end;
end.
このように、それぞれの関数に特定の役割を与えてやり、それを呼び出すことで処理する内容を変更しています。 また、上記のプログラムの場合、文字列が入力された場合には、例外が生成される事になります。文字列が入力された場合に、ユーザーに再度入力を促したい場合には、文字列が入力されたかどうかをチェックして、適切な処理をするプログラムを書いてやる必要があります。
入力された値をチェックした場合のプログラムの一例には、以下のようなものがあります。
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
function Add3(int: Integer): Integer;
begin
Writeln('3 を足します。');
Result := int + 3;
end;
function Add10(int: Integer): Integer;
begin
Writeln('10 を足します。');
Result := int + 10;
end;
function AddRandom100(int: Integer): Integer;
var
RandomValue: Integer;
begin
RandomValue := Random(100) + 1;
Writeln(IntToStr(RandomValue) + ' を足します。');
Result := int + RandomValue;
end;
var
Input: string;
Select: string;
InputValue: Integer;
SelectValue: Integer;
OutputValue: Integer;
begin
{ TODO -oUser -cConsole Main :
この下にコードを記述してください }
OutputValue := 0;
while true do // 無限ループ
begin
Writeln('整数を入力してください。0 を入力すると終了します。');
Readln(Input);
if not TryStrToInt(Input, InputValue) then // 値をチェック
begin
Writeln('不正な値が入力されました。もう一度入力してください。');
continue;
end;
if InputValue = 0 then break;
Writeln('どの関数を使用しますか? 0, 1, 2 の中から選んでください。');
Writeln('0 - Add3');
Writeln('1 - Add10');
Writeln('2 - AddRandom100');
Readln(Select);
if not TryStrToInt(Select, SelectValue) then // 値をチェック
begin
Writeln('不正な値が入力されました。初めからやり直してください。');
continue;
end;
// 入力された値に応じて、呼び出す関数を選択します。
case SelectValue of
0: OutputValue := Add3(InputValue);
1: OutputValue := Add10(InputValue);
2: OutputValue := AddRandom100(InputValue);
else
Writeln('正しく選択されませんでした。');
end;
Writeln(OutputValue);
end;
end.
ちょっと一言:
何やら、見慣れない単語が出てきたなと思ったら、その単語の上にカーソルを置いて、F1キーを押してみて下さい。すると、その単語についてのヘルプが出ます。(※ただし、全ての単語に対してヘルプが出るとは限りません。)