コンソールアプリケーション

コンソールアプリケーションを実行するには、[ ファイル|新規作成|その他 ] を選択し、表示されたダイアログの中の「コンソールアプリケーション」を選択します。すると、以下のようなコードが自動生成されることになります。

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キーを押してみて下さい。すると、その単語についてのヘルプが出ます。(※ただし、全ての単語に対してヘルプが出るとは限りません。)


up next
Last Update 2002/10/6 by N.Kobayashi