Разделы
  Delphi
  C++
  PHP
  Windows
  Linux
 

Простое консольное приложение на Delphi


“Дайте мне консоль и я переверну Землю”


В школе или в высшем учебном заведении вы наверное сталкивались с программированием различных алгоритмов. Сортировка массивов, вычисление формул, работа со строками и т.п. Для создания таких простых программ нет необходимости использовать богатые возможности графического интерфейса. К тому же, это иногда довольно сложно сделать (например, работая в Turbo Pascal, Turbo C или в Linux). Все что нужно, это вводить и выводить текстовую информацию. Для этого можно использовать консоль - инструмент, который можно найти в любой операционной системе.

Само по себе консольное приложение использует три вида функций для работы с консолью - ввод (Read, scan, ...), вывод (Write, print, echo, ...), а также управление параметрами консоли. В начале попробуем создать приложение "Hello, World!", которое будет выводить эту же надпись в консоль. Для этого загрузим Delphi и в меню File -> New выберем пункт Other. В открывшемся окне выберем значок Console Application:


После нажатия OK система создаст готовое консольное приложение, которое, однако, ничего не делает. Вы можете увидеть примерно такой текст:

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.

Можно заметить, что директива APPTYPE с параметром CONSOLE устанавливает тип приложения как консольное. Это означает, что при запуске программы будет создана консоль и приложение получит стандартные дескрипторы ввода (stdin), вывода (stdout) и ошибки (stderr). В Delphi эти переменные называются Input, Output и ErrOutput соответственно и имеют тип TextFile. Если программа была запущена другим приложением, у которого есть своя консоль, но наша программа примет дескрипторы своего родителя и будет работать с его консолью.

Для вывода какой-либо информации используются процедуры Write и WriteLn. Последняя отличается от первой тем, что после вывода информации переходит в начало следующей строки.

procedure Write([var F: file;] const Value; [const Value2, Value3, ...]);
procedure WriteLn([var F: file;] const Value; [const Value2, Value3, ...]);

Параметр F описывает файл, в который будет происходить вывод данных. Этот параметр может быть не задан, в таком случае вывод будет происходить в файл, ассоциированный с переменной Output, т.е. по умолчанию в консоль. Value, Value2, ... - значения числовых, логических или строковых типов. Функция может принимать любое количество параметров, в том числе и нулевое.

Теперь выведем надпись "Hello, World!":

program Project2;

{$APPTYPE CONSOLE}

begin
  WriteLn('Hello, World!');
end.

Запустив программу клавишей F9 мы на мгновение увидим консоль, однако, она сразу же исчезнет. Программы выполнит вывод в консоль и завершит работу, а с ней и исчезнет консоль. Посмотреть результат выполнения программы можно из консоли Windows, которая запускается командой cmd в окне Выполнить из меню Пуск:

D:\Delphi2006\Projects>Project2.exe
Hello, World!

D:\Delphi2006\Projects>

Теперь попробуем что-нибудь ввести с клавиатуры. Пусть это будет некое число, которое мы тут же выведем. Для ввода данных используется процедуры Read и ReadLn. Последняя отличается от первой тем, что после ввода своих данных переносит текущую позицию на начало следующей строки. Данные для разных переменных необходимо разделять строкой или пробелом. Строковые данные вводятся до конца текущей строки файла (консоли).

procedure Read([var F: file;] var Value; [var Value2, Value3, ...]);
procedure ReadLn([var F: file;] var Value; [var Value2, Value3, ...]);

Все параметры аналогичны процедурам ввода. Если параметр F не указан, то используется стандартная переменная для ввода Input.

Теперь программа:

program Project2;

{$APPTYPE CONSOLE}

var
  N: integer;

begin
  Write('N = ');
  ReadLn(N);

  WriteLn('The number is ',N);
  ReadLn;
end.

Процедура ReadLn, вызванная без параметров, задержит выполнение программы до нажатия клавиши Enter. Таким образом консоль не будет исчезать после запуска программы.

N = _

N = 10
The number is 10

Таким образом можно создавать простые приложения, которые будут использовать для ввода и вывода консоль. Вот пример приложения, которое выводит таблицу значений синуса угла:

program Project2;

{$APPTYPE CONSOLE}

var
  X, dX, A: double;
  N, i: integer;

begin
  Write('X  = '); ReadLn(X);
  Write('dX = '); ReadLn(dX);
  Write('N  = '); ReadLn(N);

  WriteLn;
  WriteLn('    X    |   sin(X)');
  WriteLn('---------+------------');

  for i:=0 to N do begin
    A := X + dX * i;
    WriteLn( A:8:1, ' |',sin(A/180*Pi):10:4);
  end;

  ReadLn;
end.

Процедура WriteLn, вызванная без параметров, просто переведет текущую позицию на начало новой строки, не выводя никаких данных. Также у каждого параметра через двоеточие можно задать, сколько минимально символов выводить. Если длина значения параметра меньше этого числа, то оставшиеся символы слева дополняются пробелами. Для вещественных чисел также можно указать, до какого знака это число надо округлить. Таким образом для параметра "123.4567:8:2" в консоль пойдет "__123.46". Вот вывод программы:

X  = _

X  = 90
dX = _

X  = 90
dX = 10
N  = _

X  = 90
dX = 10
N  = 18

    X    |   sin(X)
---------+------------
    90.0 |    1.0000
   100.0 |    0.9848
   110.0 |    0.9397
   120.0 |    0.8660
   130.0 |    0.7660
   140.0 |    0.6428
   150.0 |    0.5000
   160.0 |    0.3420
   170.0 |    0.1736
   180.0 |   -0.0000
   190.0 |   -0.1736
   200.0 |   -0.3420
   210.0 |   -0.5000
   220.0 |   -0.6428
   230.0 |   -0.7660
   240.0 |   -0.8660
   250.0 |   -0.9397
   260.0 |   -0.9848
   270.0 |   -1.0000




Copyright (C) ZasKok S.M.S., 2009-2010
Hosted by uCoz