Как создать консольное приложение в lazarus

Обновлено: 03.07.2024

Чтобы создать первую программу в Lazarus, надо выбрать в меню ФАЙЛ команду СОЗДАТЬ. А в открывшемся окне в группе PROJECT выбрать тип программы и нажать кнопку ОК. Подробности см. в видео.

Lazarus поддерживает следующие типы программ.

Application (Приложение)
Графическая программа на LCLI/FreePascal. Это обычное оконное приложение Windows.

Programm (Программа)
Программа FreePascal. Это обычная программа FrePascal. Если вы читали книгу Как стать программистом, то вы уже писали такие программы.

Console application (Консольное приложение)
Консольное приложение Windows. Это программа FreePascal, использующая класс TCustomApplication, что облегчает проверку параметров командной строки, обработки исключений и т.п. Иными словами, это та же программа FreePascal, которая, однако, позволяет использовать функции Windows.

Library (Библиотека)
Библиотека FreePascal.

Custom programm (Пользовательская программа)
Программа пользователя на языке FreePascal.

CGIApplication (Приложение CGI)
Программа CGI (Common Gateway Interface - общий шлюзовый интерфейс) на языке FreePascal.

FPCUnit Console Application (Консольное приложение FPCUnit)
Консольное тестовое приложение. Это приложение используется для тестирования в консольном режиме.

FPCUnit Application (Приложение FPCUnit)
Тестовое приложение. Это приложение используется для тестирования в графическом режиме.

Мы в своих примерах будем в основном использовать Application и Program.

И сейчас мы напишем нашу первую программу. Для этого в меню ФАЙЛ выбираем команду СОЗДАТЬ. Затем в группе PROJECT выбираем Programm и нажимаем кнопку ОК.

Между словами begin и end пишем код:

Если вы читали книгу Как стать программистом, то вы уже догадались, что эта программа выведет на экран строку “Hello, WORLD. ”.

Я не буду использовать в консольных приложениях русский текст, так как на некоторых компьютерах без вмешательства в настройки операционной системы вместо русских букв будут выводиться “краказябры”. Английские же буквы всегда будут выводиться правильно.

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

Проверьте на всякий случай текст ещё раз. Затем в меню ЗАПУСК выберите команду ЗАПУСК (или нажмите клавишу F9). Если вы не допустили ошибок, то программа выполнится и вы увидите на экране строку “Hello, WORLD. ”.

Теперь можно сохранить программу на диске в нашей папке MYPROG. Если сами с этим не справитесь, то смотрите видео.

Домашнее задание:
Создать в папке MYPROG папку 1103. Создать программу (проект) в Lazarus. Сохранить проект в папке 1103. Откомпилировать программу. Запустить программу из папки 1103 (а не из среды разработки). Похвастаться друзьям)))

Освоить работу с консольными приложениями и с параметрами программы.

Консольные приложения

На сегодняшний день о программировании на Lazarus существует очень мало книг на русском языке, и все они описывают работу в основном, с консольными приложениями, хотя особой надобности в консолях сейчас нет. Но и совсем обойти эту тему нельзя. Что же такое консольное приложение ?

Консольным приложением называется программа , которая не имеет графического интерфейса - окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе приходиться вводить с клавиатуры, результаты работы консольные приложения также выводят на экран в текстовом режиме.

Если вы пользуетесь операционной системой Windows , то нажмите на "Пуск" и выберите команду "Выполнить". В открывшемся окне наберите

и нажмите <Enter>. Откроется командная консоль , в которой команды нужно вводить в текстовом режиме:

Консоль cmd.exe

Собственно, вы видите окно предка Windows - операционной системы MS-DOS . Именно так выглядел экран с загруженной ОС MS-DOS , и управлять ею приходилось, вручную набивая всевозможные команды. Это уже позже корпорация Microsoft навесила на ядро MS-DOS всевозможные драйверы и утилиты, снабдила его графическим оконным интерфейсом, и появилась сначала полуграфическая ОС Windows 3.10 (русский вариант был 3.11 версии), а затем и целиком графическая Windows 95 . Но к консольному ядру системы можно обращаться и в современных ОС, в Windows для этого используется программа cmd.exe, а в ОС Linux - терминал .

Все языки высокого уровня позволяют делать и консольные приложения, другое дело - зачем? Подавляющее большинство современных программ имеет графический интерфейс , который мы с вами создавали с самой первой лекции. А консольные приложения делаются в основном, системными программистами. Несмотря на то, что Object Pascal обладает для этого всеми необходимыми инструментами, системщики обычно пользуются такими языками, как Ассемблер , C, реже - C++. Но все же знать, как создаются консольные приложения нужно, поэтому данную лекцию мы посвящаем им.

Создание консольного приложения

Создать консольное приложение можно разными способами, но проще всего так. Откройте Lazarus. Командой "Проект -> Закрыть проект" закройте текущий проект, автоматически появится окно Мастера создания проекта. В нем нажмем кнопку "Новый проект". Появится окно создания проекта, в котором можно выбрать "Программа" или "Консольное приложение". Если мы выберем "Программа", то будет создан модуль с минимальным кодом. Если же мы выберем "Консольное приложение", то кода будет больше, так как при этом создается программа с новым классом, производным от TCustomApplication . TCustomApplication обеспечивает хорошую основу и делает программирование утилит командной строки довольно простым. Например, проверку опций командной строки, написание справки, проверку переменных окружения и обработку исключений. Все программы LCL автоматически это используют.

Но нам не нужно использовать возможности класса TCustomApplication , мы делаем простую консольную программу, поэтому в окне создания проекта мы выбираем "Программа". Сформируется проект, а в Редакторе исходного кода будет минимум текста:

Обратите внимание, если нам нужно подключить к программе какие то модули, то делать это нужно до комментария

В этом случае мы ставим запятую после указанного модуля Classes и добавляем свои модули. Завершающая точка с запятой стоит после комментария, нам её ставить не нужно.

Свой код мы будем писать между скобками

А если нам потребуется указать глобальные константы , переменные или сделать объявления процедур и функций, то все это делается до begin .

Для примера мы создадим простое приложение , а по ходу дела, познакомимся с инструментами ввода-вывода информации в консольных приложениях.

WRITE и WRITELN

Процедура Write предназначена для вывода информации на экран. Она имеет следующий синтаксис :

Действует процедура следующим образом. В скобках мы можем указать какой-то текст, вывести содержимое переменных. Например:

После вывода информации на экран курсор остается на той же строчке, в позиции, где он оказался после вывода последнего символа.

Процедура Writeln действует точно также, но после вывода последнего символа курсор переходит на начало следующей строки.

Для ознакомления с процедурами создайте новый проект "Программа". Модуль можно не переименовывать, просто сохраните его в папку 21-01. Полный текст модуля следующий:

Обратите внимание: раздел переменных var мы указали до служебного слова begin , то есть, переменные a и b в пределах модуля являются глобальными. Далее мы присвоили переменным значения, затем вывели на экран приветствие, а потом содержимое переменных. На процедуру readln() пока не обращайте внимания, она нужна только, чтобы программа не закрылась сразу же после вывода текста, а была на экране, пока мы не нажмем <Enter>. Сохраните проект и запустите его на выполнение. И сразу же мы видим недостаток: вместо русских букв выходит нечто, что в Интернете называют "кракозябры":

Неправильный вывод кириллицы в консольной программе


Рис. 21.2. Неправильный вывод кириллицы в консольной программе

В "Символы и строки" мы упоминали, что в консольных приложениях Windows принято использовать кодировку CP866, тогда как в графических приложениях используется CP1251 и Юникод. Отсюда и "кракозябры". В Linux и Unix таких проблем нет. Однако решить эту проблему совсем несложно. Нажмите <Enter>, чтобы закрыть консоль , и вернитесь в Редактор кода. Щелкните по окну с кодом правой кнопкой мыши, и в открывшемся контекстном меню выберите команду "Параметры файла -> Кодировка -> CP866". Откроется окно смены кодировки, нам надо нажать кнопку "Изменить файл". Снова запустите программу на выполнение - теперь с кодировкой полный порядок :

Правильный вывод кириллицы в консольной программе


Рис. 21.3. Правильный вывод кириллицы в консольной программе

READ и READLN

Процедура Read предназначена для ввода информации в программу, точнее, в переменные. Процедура работает следующим образом:

То есть, в качестве параметров мы указываем одну или несколько разделенных запятыми переменных. Когда программа доходит до этого места, то ожидает от пользователя ввода данных. Пользователь должен ввести данные такого же типа, как у соответствующих переменных. Если переменных несколько, то соответствующие значения нужно вводить, разделяя их пробелами. Например, если есть переменная целого типа i , и вещественная переменная r , то при выполнении инструкции

произойдет вот что: программа приостановит свою работу, ожидая от пользователя ввода данных. Пользователь должен ввести целое и вещественное числа, разделенные пробелом, и нажать <Enter>. Например, пользователь ввел:

Как только он нажмет <Enter>, в переменную i попадет число 12, а в r - число 3,45. Если пользователь введет некорректные данные, не соответствующие типу переменной, то возникает ошибка и программа аварийно завершает работу.

Пользователь может ввести больше данных, чем указано переменных в процедуре read . В этом случае, оставшиеся данные будут обработаны следующей процедурой read . Например, пользователь ввел:

и нажал <Enter>. Эти данные могут быть обработаны следующими инструкциями:

Процедура Readln работает также. Отличие заключается в том, что если пользователь ввел больше данных, то readln не передает лишние данные в следующую инструкцию readln , а попросту обрубает их. То есть, если изменить предыдущий пример:

то в a и b попадут числа 1 и 23, после чего программа будет ожидать следующих данных, а число 456 потеряется.

Если указать read или readln без параметров, например, так:

Чтобы пользователь понимал, чего от него хочет программа , перед каждой инструкцией read или readln следует с помощью write или writeln выводить поясняющий текст.

Вернемся к нашей программе, и немного изменим код (между begin и end. ):

Теперь программа выводит запрос " Введите первое число: ", и замирает, ожидая от пользователя ввода данных. После того, как он введет число и нажмет <Enter>, программа таким же образом запросит второе число. Затем она выведет результат, и будет ожидать, пока пользователь не нажмет <Enter>:

Результат работы программы

Параметры консольного приложения

Нередко системные консольные программы вызываются с какими-то параметрами. Например, в Windows можно нажать "Пуск -> Выполнить" и указать следующую команду:

В результате будет запущена консольная утилита ping.exe , которая делает трассировку ( обмен данными ) с указанным IP-адресом. Таким образом, проверяют, есть ли связь с данным адресом. В примере программа запускается с двумя параметрами. Первым параметром является IP- адрес 127.0.0.1 - это адрес локальной машины, обращаясь к 127.0.0.1, вы обращаетесь к своему же компьютеру. Вторым параметром является

Возможно, когда-нибудь и нам потребуется создать программу (не обязательно консольную), умеющую принимать и обрабатывать параметры. Для обработки параметров используются две функции: ParamCount и ParamStr .

ParamCount возвращает количество параметров, переданных в программу.

ParamStr(i) возвращает параметр под индексом i - индексация начинается с 1. Например, вывести на экран первый и последний параметры можно так:

Однако имейте в виду, что в любой программе, консольной или обычной, даже запущенной совсем без всяких параметров, доступен и "нулевой" параметр ParamStr(0) - в нем всегда находятся адрес и имя файла программы.

Имейте в виду, что все параметры, даже числа, вводятся в виде текста, так что для работы с целыми числами нам придется использовать функции IntToStr и StrToInt . А обе эти функции описаны в модуле SYSUTILS , который нам придется подключить в разделе uses . Вот полный листинг программы :

Обратите внимание, после модуля Classes мы указали модуль SysUtils . Далее, мы обеспечили ввод данных в a и b в случаях, если параметров вообще нет, если есть только один параметр , и если параметров больше, чем один. В конце мы выводим общее количество указанных параметров, нулевой параметр с указанием адреса и файла программы, и затем указываем значения переменных. В заключение указываем пустой readln , чтобы программа не закрылась, пока не захочет пользователь .

Сохраните проект и запустите его. Он загрузится без параметров, вам придется ввести оба числа вручную. Введите числа, полюбуйтесь на результат и закройте программу. Теперь загрузим ее с параметрами. Для этого нажмите "Пуск -> Выполнить", нажмите кнопку "Обзор", найдите и откройте наш проект, допишите после его имени один или два параметра, например, так:

Указание параметров программы

Как видите, в качестве параметров я указал два числа: 12 и 24. Программа не станет запрашивать у меня данные, а сразу выведет результат:

Результат работы программы

9Поэкспериментируйте с программой, вызывая с различным количеством параметров.

Как уже говорилось, функции ParamCount и ParamStr можно использовать в любой программе, не обязательно консольной.

Освоить работу с консольными приложениями и с параметрами программы.

Консольные приложения

На сегодняшний день о программировании на Lazarus существует очень мало книг на русском языке, и все они описывают работу в основном, с консольными приложениями, хотя особой надобности в консолях сейчас нет. Но и совсем обойти эту тему нельзя. Что же такое консольное приложение ?

Консольным приложением называется программа , которая не имеет графического интерфейса - окон, и которая работает в текстовом режиме в черно-белой консоли. Команды в такой программе приходиться вводить с клавиатуры, результаты работы консольные приложения также выводят на экран в текстовом режиме.

Если вы пользуетесь операционной системой Windows , то нажмите на "Пуск" и выберите команду "Выполнить". В открывшемся окне наберите

и нажмите <Enter>. Откроется командная консоль , в которой команды нужно вводить в текстовом режиме:

Консоль cmd.exe

Собственно, вы видите окно предка Windows - операционной системы MS-DOS . Именно так выглядел экран с загруженной ОС MS-DOS , и управлять ею приходилось, вручную набивая всевозможные команды. Это уже позже корпорация Microsoft навесила на ядро MS-DOS всевозможные драйверы и утилиты, снабдила его графическим оконным интерфейсом, и появилась сначала полуграфическая ОС Windows 3.10 (русский вариант был 3.11 версии), а затем и целиком графическая Windows 95 . Но к консольному ядру системы можно обращаться и в современных ОС, в Windows для этого используется программа cmd.exe, а в ОС Linux - терминал .

Все языки высокого уровня позволяют делать и консольные приложения, другое дело - зачем? Подавляющее большинство современных программ имеет графический интерфейс , который мы с вами создавали с самой первой лекции. А консольные приложения делаются в основном, системными программистами. Несмотря на то, что Object Pascal обладает для этого всеми необходимыми инструментами, системщики обычно пользуются такими языками, как Ассемблер , C, реже - C++. Но все же знать, как создаются консольные приложения нужно, поэтому данную лекцию мы посвящаем им.

Создание консольного приложения

Создать консольное приложение можно разными способами, но проще всего так. Откройте Lazarus. Командой "Проект -> Закрыть проект" закройте текущий проект, автоматически появится окно Мастера создания проекта. В нем нажмем кнопку "Новый проект". Появится окно создания проекта, в котором можно выбрать "Программа" или "Консольное приложение". Если мы выберем "Программа", то будет создан модуль с минимальным кодом. Если же мы выберем "Консольное приложение", то кода будет больше, так как при этом создается программа с новым классом, производным от TCustomApplication . TCustomApplication обеспечивает хорошую основу и делает программирование утилит командной строки довольно простым. Например, проверку опций командной строки, написание справки, проверку переменных окружения и обработку исключений. Все программы LCL автоматически это используют.

Но нам не нужно использовать возможности класса TCustomApplication , мы делаем простую консольную программу, поэтому в окне создания проекта мы выбираем "Программа". Сформируется проект, а в Редакторе исходного кода будет минимум текста:

Обратите внимание, если нам нужно подключить к программе какие то модули, то делать это нужно до комментария

В этом случае мы ставим запятую после указанного модуля Classes и добавляем свои модули. Завершающая точка с запятой стоит после комментария, нам её ставить не нужно.

Свой код мы будем писать между скобками

А если нам потребуется указать глобальные константы , переменные или сделать объявления процедур и функций, то все это делается до begin .

Для примера мы создадим простое приложение , а по ходу дела, познакомимся с инструментами ввода-вывода информации в консольных приложениях.

WRITE и WRITELN

Процедура Write предназначена для вывода информации на экран. Она имеет следующий синтаксис :

Действует процедура следующим образом. В скобках мы можем указать какой-то текст, вывести содержимое переменных. Например:

После вывода информации на экран курсор остается на той же строчке, в позиции, где он оказался после вывода последнего символа.

Процедура Writeln действует точно также, но после вывода последнего символа курсор переходит на начало следующей строки.

Для ознакомления с процедурами создайте новый проект "Программа". Модуль можно не переименовывать, просто сохраните его в папку 21-01. Полный текст модуля следующий:

Обратите внимание: раздел переменных var мы указали до служебного слова begin , то есть, переменные a и b в пределах модуля являются глобальными. Далее мы присвоили переменным значения, затем вывели на экран приветствие, а потом содержимое переменных. На процедуру readln() пока не обращайте внимания, она нужна только, чтобы программа не закрылась сразу же после вывода текста, а была на экране, пока мы не нажмем <Enter>. Сохраните проект и запустите его на выполнение. И сразу же мы видим недостаток: вместо русских букв выходит нечто, что в Интернете называют "кракозябры":

Неправильный вывод кириллицы в консольной программе


Рис. 21.2. Неправильный вывод кириллицы в консольной программе

В "Символы и строки" мы упоминали, что в консольных приложениях Windows принято использовать кодировку CP866, тогда как в графических приложениях используется CP1251 и Юникод. Отсюда и "кракозябры". В Linux и Unix таких проблем нет. Однако решить эту проблему совсем несложно. Нажмите <Enter>, чтобы закрыть консоль , и вернитесь в Редактор кода. Щелкните по окну с кодом правой кнопкой мыши, и в открывшемся контекстном меню выберите команду "Параметры файла -> Кодировка -> CP866". Откроется окно смены кодировки, нам надо нажать кнопку "Изменить файл". Снова запустите программу на выполнение - теперь с кодировкой полный порядок :

текстовом режиме . Для этого существует консольное приложение . Чтобы создать новое консольное приложение, нужно выполнить команду Проект — Создать проект. , в появившемся диалоговом окне (рис. 1.31, 1.32) выбрать фразу Программа пользователя и нажать кнопку Создать .

Рисунок 1.51: Окно редактора в консольном приложении

На экране появится окно редактора программного кода (рис. 1.51), в котором уже представлена

общая структура программы на языке Паскаль.

В общем виде программа на языке Free Pascal состоит из заголовка программы, раздела описаний и непосредственно тела программы.

Заголовок программы состоит из ключевого слова program и имени программы. В нашем случае (рис. 1.51) это Project1 . Имя

было присвоено программе автоматически. При желании его можно изменить.

Раздел описаний обычно включает в себя описание констант, типов, переменных, процедур и функций. На рис. 1.51 видно, что раздел описаний начинается со слова uses . Это раздел подключения моду-

лей. Модуль — это специальная программа, которая расширяет возможности языка программирования. В нашем случае происходит подключение модуля SysUtils , который позволяет работать с файлами

и каталогами, и модуля Classes , который работает с компонентами.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

За разделом описаний следует исполняемая часть программы, или тело программы . Оно начинается со служебного слова begin и за-

канчивается служебным словом end и точкой. Тело программы содер-

жит операторы языка, предназначенные для реализации поставленной задачи.

Кроме того в тексте программы могут встречаться комментарии. Комментарий — это текст, заключенный в фигурные скобки или начинающийся с двух наклонных. Этот текст не является программным кодом, а носит информационный характер. Например, в нашем случае текст заключенный в фигурные скобки, сразу после описания модулей сообщает пользователю о том, что остальные элементы языка он может добавить самостоятельно.

Рассмотрим пример . Пусть нужно решить задачу перевода градусной меры угла в радианную . Эта задача известна из школьного курса и формулируется так: чтобы найти радианную меру какого-нибудь угла по данной градусной мере, нужно умножить число градусов на

и найденные произведения сложить.

Текст программы для решения поставленной задачи в консольном

приложении будет иметь вид: program Project1;

gradus,minuta:integer; radian: real; begin

radian:=gradus*pi/180+minuta*pi/(180*60); writeln('radian=', radian);

Сохранить , открыть , откомпилировать , скомпоновать и запустить на выполнение программу в консольном приложении можно так же, как в визуальном проекте.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

Результаты работы нашей программы будут иметь вид: gradus=165

Нетрудно заметить, что к тексту, созданному автоматически, мы добавили описание переменных (все используемые в программе пере-

менные должны быть описаны):

//Описаны две целочисленные переменные. gradus,minuta:integer;

//Описана вещественная переменная. radian: real;

и тело программы:

begin //Начало тела программы. //Вывод на экран строки символов gradus= write('gradus=');

//Ввод переменной gradus. readln(gradus);

//Вывод на экран символов minuta=. write('minuta=');

//Ввод переменной minuta. readln(minuta); //Вычисление.

radian:=gradus*pi/180+minuta*pi/(180*60); //Вывод результата вычислений. writeln('radian=', radian);

end. //Конец программы.

Так как в этой программе графический интерфейс отсутствует, мы разработали элементарный текстовый диалог компьютер — пользователь. Для этого были использованы операторы ввода ( read ) и вывода ( write ) данных.

1.4.12 Операторы ввода - вывода данных

Ввод информации с клавиатуры осуществляется с помощью оператора read . Он может иметь один из следующих форматов:

read (x1, x2, …, xn); readln (x1, x2, …, xn);

где x1 , x2 , …, xn – список вводимых переменных. При вводе веще-

ственных значений целую и дробную часть числа следует разделять точкой.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

Когда в программе встречается оператор read , ее действие при-

останавливается до тех пор, пока не будут введены исходные данные. При вводе числовых значений два числа считаются разделенными, если между ними есть хотя бы один пробел, символ табуляции или конца строки ( Enter ). После ввода последнего значения следует нажать Enter .

Оператор readln аналогичен оператору read , разница заключа-

ется в том, что после считывания последнего в списке значения для одного оператора readln данные для следующего оператора

readln будут считываться с начала новой строки. Но следует по-

мнить, что Enter переведет курсор на новую строку независимо от того, как именно происходит считывание данных.

Для вывода информации на экран служат операторы write и writeln . В общем случае эти операторы имеют вид:

write(x1, x2, …, xn); writeln(x1, x2, …, xn);

где x1 , x2 , …, xn представляют собой список выводимых перемен-

ных, констант, выражений. Если элемент списка — текстовая информация, ее необходимо взять в кавычки.

Операторы write и writeln последовательно выводят все переменные. Если используется оператор writeln , то после вывода

информации курсор перемещается в новую строку.

Итак, в нашем примере оператор write('gradus='); выводит на экран символы gradus= , которые подсказывают пользователю, что он должен ввести значение переменной gradus , а оператор readln(gradus); предназначен для ввода значения переменной gradus . Оператор writeln('radian=', radian); выводит на экран два значения: строку radian= и значение переменной radian .

0.35469000000Е-01=0.35469000000*10 -1 =0.035469, -5.43286710000Е+02=-5.43286710000*10 2 =-543.28671.

Алексеев Е.Р., Чеснокова О.В., Кучер Т.В. Самоучитель по программированию на Free Pascal и Lazarus

Чтобы выводить числа в формате с фиксированной точкой, необходимо использовать форматированный вывод . Для этого оператор write или writeln нужно задать следующим образом:

идентификатор — это имя переменной, которая будет выводит-

ся на экран; ширина_поля_вывода — количество позиций (целая часть,

точка, дробная часть), которое будет занимать значение переменной при выводе;

дробная_часть — количество позиций, необходимых для

дробной части числа.

Например, пусть результат работы нашей программы имеет вид gradus=165

Понятно, что оператор writeln('radian=', radian); вывел на экран значение переменной radian в формате с плавающей точ-

Если воспользоваться оператором writeln('radian=', radian:5:3);

то результат работы программы будет таким: gradus=165

где значение переменной radian представлено в формате с фиксиро-

ванной точкой (все число занимает пять позиций и три из них после запятой).

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Читайте также: