Данная статья рассчитана на начинающих программистов, для тех, кто хочет сразу ощутить весомый вклад в изучении языка Паскаль.
Речь пойдет о IDE Lazarus. IDE расшифровывается как Integrated development environment, что переводится на русский язык как «Среда интегрированной разработки».
Автор данного учебного пособия занимается программированием как хобби с 2004 г., и уже более 15 лет как успешно справляется с поставленными задачами в освоении модной и необходимой профессии в 21 веке.
Безусловно, чтобы выучить язык Паскаль, надо читать именно самоучители по «языку Паскаль», в наше время, в 90-е и ранние «нулевые» все начинающие изучали ИДЕ «Turbo Pascal» версии 7.0.
В данной книге будет сделан основной упор на совсем начинающих, будет рассказано как и где найти дистрибутив, небольшой экскурс в историю языка и будут рассмотрены современные IDE для языка Паскаль. Но, в свою очередь, также будут освещены проблемы по написанию алгоритмов и подключении библиотек, таким образом, данная книга полезна не только для начинающих, но и для студентов 3 — 4 курса информационных факультетов, либо же для самоучек, которые решили начать писать программы.
В свое время, американская компания Borland, которая выпускала Turbo Pascal и Turbo C, и Turbo C++, создала проект Дэлфи, IDE Delphi был создан для операционных систем семейства Windows, и также использовала язык Паскаль, а если точнее Object Pascal, в данной статьемы не будет рассматривать разницу в языке Турбо Паскаль и Объект Паскаль, так как это будет выходить за рамки данной статьи. Но хочется отметить что разница там небольшая, и Вы как начинающий специалист попросту нечего не сможете понять.
И данная концепция была сохранена в новых свободных системах.
Также, использование бесплатного компилятора стало залогом бесплатного ИДЕ. И в Лазарусе и в Гетлазарусе используется компилятор FPC – free pascal compiler, переводится с английского на русский как Бесплатный компилятор Паскаль.
На данный момент система Лазарус доступна для множества операционных систем, таких как Windows, Linux, FreeBSD, продукция Apple.
В системах *nix, таких как Линукс, работа стала самой лучшей, программу можно просто скачать с репозитория из командной строки введя специальную команду и название пакета.
Например в системе GNU/Linux Debian можно просто открыть окно терминала и вызвать пакетный менеджер APT из консоли, введя команду apt-get install lazarus. Скажем спасибо за это Линусу Торвальдсу, создателю ядра Линукс...
Но и в других системах установка будет ничуть не сложнее, дабы система Лазарус распространяется бесплатно и Вам не понадобится вводить регистрационные пароли и прочее...
Итак, в начале данной книги, желаю Вам терпения и веры в себя... приступим.
Глава 1. Где взять Лазарус ?
Проект Лазарус является полностью бесплатным, распространяется под лицензией... .
И доступны различные редакции в сети Интернет по адресамwww.lazarus-ide.org
На сайте www.lazarus-ide.org, смотрим в правый угол вверху и видим надпись Download (англ. Скачать), и нажимаем туда, появится окно с выбором Вашей операционной системы, далее думаю объяснять не надо.
На сайте www.getlazarus.org также, вверху справа будет надпись Download и нажимаем ее, далее идет похожий выбор вашей операционной системы на компьютере.
Также, возможно скачивание и компилятора FPC из сети Интернет по адресу www.freepascal.org, и можно будет писать программы в простом текстовом файле с расширением *.pas. И в системе Windows (далее Виндоуз), вы сможете запустить командный терминал cmd.exe и зайти в папку с вашим проектом, и оттуда вызвать компилятор...
После того как Вы скачали в системе Виндоуз пакет дистрибутива из сети, его необходимо установить, для этого мы запускаем его и
На данный момент система гетлазарус более подходит под старые образцы делфи, имеет большее количество возможностей, который в данной книге будут рассмотрены не в полном объеме.
На первый взгляд эти системы легко отличить, у Лазаруса иконка с синем фоном с мордой гепарда, у Гетлазаруса фон золотистый, после запуска у Лазаруса будет главное окошко вверху, и независимые окна, у Гетлазаруса будет одно большое монолитное окно, как у поздних версий Делфи, и также будет напоминать Android Studio.
Глава 2. Основы языка Паскаль.
Как и любой язык программирования высокого уровня (hll – high level languages), язык Паскаль содержит в себе процедуры, функции, декларативную часть переменных и данных.
Блок кода начинается со слова Begin. А оканчивается словом End. (с точкой на конце при окончании программы, либо с точкой запятой — End; в случае окончания функции или процедуры).
Самая короткая и простая программа на Паскале выглядит так:
Begin
End.
Т.е., отображено начало программы и ее конец, программа делает «ничего».
Следующая функция выводит текст на экран: Write('Hello');
Очень легко запомнить что делает данная функция, т. к., write с английского переводится как «писать».
Другая разновидность функции – writeln('Hello'); выведет Hello на экран и переведет курсор (каретку) на новую строку к низу.
Т.е., «добавка» LN как бы говорит слово LiNe – т. е., новая ЛИНИЯ.
Сейчас мы рассмотрели самые азы рабочей программы на Паскале.
Но, и есть необходимость ввести данные от пользователя в терминал, либо в «никуда» либо записать в переменную (Var).
Тогда нам понадобится функция Read(); и Readln(); соответственно.
В данных функциях окончание LN также говорит нам о переводе на новую строку.
Впишите два варианта программы и запустите, первый вариант:
begin
Write('Hello');
end.
И второй вариант:
begin
Write('Hello');
readln();
end.
Что нибудь изменилось ?
Попробуйте подумать над этим.
Следующее ключевое слово языка — Program, пишетсяв самом начале программы и содержит название программы, примерно вот так — Program Name;
Какого либо технического предназначение у данного ключевого слова нет, можно писать и без него.
Теперь наша программа выглядит так:
Program Name;
begin
Write('Hello');
readln();
end.
В языке Паскаль пустые скобки и точка с запятой в конце — обязательны.
Но, допустим мы хотим сначала вписать данные, а потом на них посмотреть ? Что тогда ?
Тогда пишем так:
Program Name;
begin
readln();
Write('Hello');
readln();
end.
Мы разместили функцию readln(); в начале блока исполнения, но она ничего не записывает, точнее записывает, но в «никуда». Для того чтобы работать в данными в программах, были изобретены ПЕРЕМЕННЫЕ, или как принято в Паскале - VAR
Хочется заранее отметить тот факт, что язык Паскаль не воспринимает разницу в размерах букв, и слова var, VAR, Var, компилятор Паскаля поймет.
Значит дополняем нашу программ блоков переменных:
Program Name;
VAR
begin
readln();
Write('Hello');
readln();
end.
Но там пока пусто, если оставить так, то программа во время компиляции сборки не соберется и ваш ИДЕ будет писать про ошибку.
Дело в том что язык Паскаль содержит довольно большое количество ВИДОВ переменных, есть такие разные понятия, как:
Строка — для хранения строк, примерно как эта.
Целые числа — для хранения чисел, например 5 или 9999 в памяти программы, без запятой.
Вещественные числа — для хранения чисел с запятой, например 5,1 или 9999,1.
Это были основные параметры переменных, есть и другие, но они уже просто походят на эти.
Также в языке Паскаль присутствует тип логический, или булевый в терминах Паскаля, который может хранить параметры типа - «Ложь» или «истина».
Итак рассмотрим их подробнее:
Тип данных строка — string.
Целые числа –integer.
Вещественные числа – real.
Логический (булевый) тип — boolean.
Допустим мы хотим в нашу программу вписать число, целое, тогда пишем так:
Program Name;
VAR
z: integer;
begin
readln();
Write('Hello');
readln();
end.
В данном примере буква z – это просто название переменной, Вы можете ее назвать как угодно.
Но она по прежнему не работает в системе, и не содержит никакой в себе «функции» и пользы. Чтобы ее задействовать нам надо в нее вписать данные через read и показать их на мониторе через write.
Итак, пишем:
Program Name;
VAR
z: integer;
begin
readln(z);
Write('Hello',z);
readln();
end.
У Вас получилось ? Ничего не заметили ?
Правильно ! Слово Hello и введенная Вами цифра написаны слитно. Попробуем вот так:
Program Name;
VAR
z: integer;
begin
readln(z);
Write('Hello ',z);
readln();
end.
Теперь мы добавили два «пробела» после слова Hello в пределах кавычек, и значит функция Write думает что тоже надо вывести пробелы...
У меня теперь выводит на экран — Hello 5, а раньше было Hello5
Как вы теперь понимаете, в программе очень легко запутаться, особенно если она занимает тысячи строк кода и несколько файлов, так как быть тогда ?
Можно оставить себе подсказки, и для себя полезно и команде программистов тоже легче работать с вашим кодом.
Такие подсказки называются КОММЕНТАРИЯМИ.
А выводить их легко, достаточно написать // в начале строки.
// здесь комментарий.
Теперь может ваш код выглядеть так:
Program Name; // начало программы
VAR
z: integer; // переменная
begin // в начале строки
readln(z);
Write('Hello ',z); // вывод хелло и числа на экран
readln();
end. // конец программы
И в таком виде программа будет собираться и работать, компилятор просто не будет собирать в программу текст после //.
Для компьютера этих лишних букв как будто нет.
НО, есть и второй способ оставлять комментарий. Вот так {здесь комментарий }, но
в отличие от двойной черты // - которая действует ДО конца строки, комментарий который начинается с открывающейся фигурной скобки {, будет действовать до ближайщей закрывающей фигурной скобки }.
Program Name;
VAR
z: integer;
begin // в начале строки
readln(z);
Write('Hello ',z);
readln(); { здесь
комментарий
}
end.
Попробуйте понять, есть ли тут ошибка.
Также, многие программисты умудряются делать ASCII графику в комментариях, особенно в «шапке» программы, и получается как бы красиво... они там пишут свое имя, название программы, ее предназначение, и дату написание... примерно так.
{************************************
* Author -Aleksei Rybochkin
* Date – 07/02/2021 y.
* Данная программа выводит надпись Хелло на мониторы пользователей
*Все права защищены, вывод надписи Хелло является авторским правом ;-)
*************************************}
Program Name;
VAR
z: integer;
begin // в начале строки
readln(z);
Write('Hello ',z);
readln(); { здесь
комментарий
}
end.
Помимо переменных VAR есть еще и константы, CONST — как понятно из названия, они не изменяются в программе.
Пример:
Program Name;
Const x = 5; // константа всегда равна пяти, и ничего не поделать ;-(
VAR
z: integer;
begin
readln(z);
Write('Hello ',z);
readln();
end.
Надеюсь сейчас Вы все поняли, потом будет чуть чуть сложнее, но вы уже сможете писать все что угодно, осталось немного...
Допустим есть большая промышленная программа, которая сравнивает поступающие параметры от датчиков систем, и реагирует на них...
Например параметр температуры воздуха ниже +10 градусов, и надо включить обогреватель.
Значит на вход программе входят данные и сравниваются с каким нибудь эталоном, а потом происходят события в зависимости от этого сравнения...
Program name;
Begin
Если
Температура воздуха ниже + 10;
ТО
Включаем обогреватель;
ИНАЧЕ
Пока не холодно;
End.
Вот примерный алгоритм в шутливой форме, но за шутливой формой скрывается ветвление.
Всего в программировании известны ВЕТВЛЕНИЯи ЦИКЛЫразных вариаций.
Как Вы наверное уже догадались, во ВСЕХ приличных языках программирования обязаны присутствовать ВЕТВЛЕНИЯ И ЦИКЛЫ.
В терминах Паскаля теперь напишем приведенную выше программу с ветвлением:
Program Name;
Const x = 10;
VAR
z: integer;
begin
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < 10 then begin
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
begin
writeln('Poka ne holodno');
end;
readln();
end.
Теперь поиграйтесь с данной программой, есть ли тут логические ошибки ? Хотите ли что нибудь поменять ? Добавить проверку других температур ?
Обратите внимание, что Константа в блоке Const x = 10; никак не используется в программе...
Можете ли Вы ее как нибудь задействовать ? Пока подумайте и не читайте дальше...
Также хочу заранее сказать, что ВЕТВЛЕНИЯ могут быть фактически безграничного размере, все время если то иначе то иначе то иначе то иначе...
Теперь посмотрим программу где мы применим константу Х, вот она:
Program Name;
Const x = 10;
VAR
z: integer;
begin
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < Xthen begin // *** СЮДА ДОБАВИЛИ КОНСТАНТУ ВМЕСТО 10.
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
begin
writeln('Poka ne holodno');
end;
readln();
end.
Обратите внимание, что в программе ничего не поменялось, просто вместо Х программа автоматически вставляет цифру 10 которой Х равняется.
Но хорошо, скажете вы, обогреватели мы включать умеем, а если электронное оборудование перегреется ? То ничего не сделать ? Можно попытаться сделать вторую программу, где будет условие ЕСЛИ в виде z > X.
Но можно, проще, в одной программе сделать несколько условий... вот пример.
Program Name;
Const x = 10;
VAR
z: integer;
begin
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < X then begin
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
if z > x then begin
writeln('slishkom zharko ');
writeln('Vkluchaem Ventilator ');
end
else // второе Иначе
begin
writeln('Poka ne holodno i ne zharko ');
end;
readln();
end.
Вот рабочий пример... скажете Вы... а вот и нет... точнее почти нет... дело в том что нет второго диапазона температур.
Сейчас у нас либо +10 либо меньше 10 либо выше 10, получается 3 варианта.
Тогда добавим второю константу на +20 градусов...
Попробуйте сначала сами, потом проверим как у нас получилось.
Вот ниже мой вариант:
Program Name;
Const x = 10;
c = 20; // добавил вторую константу на + 20 градусов.
VAR
z: integer;
begin
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < X then begin // *** СЮДА ДОБАВИЛИ КОНСТАНТУ ВМЕСТО 10.
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
if z > c then begin // сравниваю z с нашей С ( +20 градусов )
writeln('slishkom zharko ');
writeln('Vkluchaem Ventilator ');
end
else // второе Иначе
begin
writeln('Poka ne holodno i ne zharko ');
end;
readln();
end.
Так то уже лучше... но наша программа умеет запускаться только один раз, что не годится для промышленного производства и процесса «висящего» в памяти компьютера...
На данном уроке мы рассмотрели возможности ВЕТВЛЕНИЙ, в том числе множественных ветвлений.
Но нужны и повторения действия, и или ЦИКЛЫ.
Всего в Паскале присутствует два варианта циклов, это цикл FOR и цикл WHILE.
Сейчас рассмотрим цикл FOR, давайте сделаем вышеприведенную программу, чтобы она миллион раз спрашивала на температуру ?!
for i:=1 to 10 do
end;
Вот пример из двух строк, который повторяется 10 раз.
А вот пустая программа которая «ничего не делает 10 раз»
var i: integer;
Begin
for i:=1 to 10 do
End.
Как вы поняли, для цикла нужна переменная, поэтому программа «пустышка» начинается с блока описания переменной, которая потом используется в цикле.
Конечно, для компьютера слово «пустышка» ничего не значит, так как используется время процесса и загрузка центрального процессора, такие программы даже вредны в какой то степени...
Вот измененная программе температур, которая НАС опрашивает миллион раз !!!
Program Name;
Const x = 10;
c = 20; // добавил вторую константу на + 20 градусов.
VAR
z, a : integer; // добавили А для главного ЦИКЛА FOR
begin
for a:=1 to 1000000 do BEGIN // от одного до миллиона раз
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < X then begin // *** СЮДА ДОБАВИЛИ КОНСТАНТУ ВМЕСТО 10.
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
if z > c then begin // сравниваю z с нашей С ( +20 градусов )
writeln('slishkom zharko ');
writeln('Vkluchaem Ventilator ');
end
else // второе Иначе
begin
writeln('Poka ne holodno i ne zharko ');
end
end; // здесь конец ЦИКЛА FOR
END.
Вот теперь готов маленький промышленный процесс, который может миллион раз опрашивать оборудование на заводе и в зависимости от ответов от датчиков включать вентиляторы или обогреватели...
Тут до полноценного приложения не хватает резидентной функции, резидентная программа, которая остается работать в оперативной памяти компьютера, и пользователь не видит ее на экране, ни окошек ни консолей.
По английски резидентная программа — TSR - Terminate and Stay Resident.
Теперь давайте попробуем программу переписать с помощью цикла WHILE.
Вы попробуйте сами, и я сам, и посмотрим у кого получилось ;- )
Вот моя версия программы температуры с циклом while:
Program Name;
Const x = 10;
c = 20; // добавил вторую константу на + 20 градусов.
VAR
z, a : integer; // добавили А для главного ЦИКЛА FOR
begin
while (a < 1000000) do BEGIN // от одного до миллиона раз
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if z < X then begin // *** СЮДА ДОБАВИЛИ КОНСТАНТУ ВМЕСТО 10.
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end
else // Иначе
if z > c then begin // сравниваю z с нашей С ( +20 градусов )
writeln('slishkom zharko ');
writeln('Vkluchaem Ventilator ');
end
else // второе Иначе
begin
writeln('Poka ne holodno i ne zharko ');
end
end; // здесь конец ЦИКЛА WHILE
END.
И третий вариант ЦИКЛА... REPEAT UNTIL.
Я помню, я сначала говорил про два цикла, про repeat until не хотел писать т. к., он очень редко используется и опять будет по факту копия текста, но все же изучим и его...
Program Name;
Const x = 10;
c = 20; // добавил вторую константу на + 20 градусов.
VAR
z, a : integer; // добавили А для главного ЦИКЛА FOR
begin
a:= 0; // присваиваем 0.
repeat
// от одного до миллиона раз
a:=a+1; // увеличила А на 1 для подсчета прохода.
Write('Vvedite temperatury vozduha ');
Readln(z);
// Если // ТО
if (z < X) then begin // *** СЮДА ДОБАВИЛИ КОНСТАНТУ ВМЕСТО 10.
writeln('Temperatura nizhe + 10;');
writeln('Vkluchaem obogrevatel');
end;
if (z > c) then begin // сравниваю z с нашей С ( +20 градусов )
writeln('slishkom zharko ');
writeln('Vkluchaem Ventilator ');
end;
until (a < 1000000); // здесь конец ЦИКЛА repeat until
END.
Рассмотрим далее такой вариант,
Глава 3. Консольные приложения в Лазарус.
Теперь давайте попробуем создать в Лазарусе консольное приложение, для этого нам понадобится запустить приложение, и в главном окне найти надпись FILE или Файл, потом Создать … - > далее появился окно выбора типа приложения, из таких вариантов как:
Модуль
Модуль Паскаля
Форма
Модуль данных
Фрейм
Текст
Текст FPCUnit
Сценарий InstantFPC
Файл сценария SQL
Унаследованный объект
Унаследованный от компонента проекта
Проект
Приложение
Простая программа
Программа
Консольное приложение
Библиотека
Консольное тестовое приложение FPCUnit
Программа InstantFPC
Пакет
Пакет
Шаблоны проектов
Для первоначального изучения языка Паскаль и среды Лазарус (Гетлазарус) Вам необходимо выбрать в появившемся окне в пункте «Проект» подпункт «Простая программа», причем справа от нее в справочной области будет написано - «Простейшая консольная программа на Free Pascal».
Глава 4. Простые средства в Лазарус.
В данное главе будем изучать основные методы взаимодействия с операционной системой, такие как создать файл, сохранить файл, закрыть приложение, проиграть музыку.
Чтобы создать приложение под операционной системой ОС Windows, Вам необходимо нажать на главное окно ИДЕ, выбрать меню Файл → Создать, в появившемся окне Вам необходимо выбрать в пункте «Проект» подпункт «Приложение», причем в описании справа будет написано - «Графическое приложение на Free Pascal, использующее кроссплатформенную библиотеку LCL для своего графического интерфейса пользователя».
После чего появится два окна, первое — окно набора текста, в второе, окно форма, которое мы и создаем в графическом виде.
Глава 5. End.
Вот так назвал главу окончания, просто «End.», прям как в Паскале, без артикля.
Надеюсь Вам понравилась данная книга, и я смог Вас в простой и понятной форме обучить основам языка, и среды.