Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Мансуров. Основы программирования в среде Lazarus. 2010

.pdf
Скачиваний:
45
Добавлен:
27.04.2021
Размер:
6.3 Mб
Скачать

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

Рис. 2.44. Выбор Lazarus для открытия файла проекта

2.1.12 Другие способы создания консольных приложений

Lazarus предоставляет и другие способы создания консольных приложе-

ний. Рассмотрим снова меню Проект-> Создать проект…, рис. 2.45.

Рис. 2.45. Другие способы создания консольных приложений

91

2.1 Основные элементы языка

____________________________________________________________________

Консольное приложение можно создать, выбрав пункты "Программа" и

"Программа пользователя".

При выборе "Программа" Lazarus сделает следующую заготовку:

program Project1; {$mode objfpc}{$H+} uses

{$IFDEF UNIX}{$IFDEF UseCThreads} cthreads,

{$ENDIF}{$ENDIF}

Classes

{ you can add units after this }; {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

begin

end.

Исходный код программы будет автоматически поддерживаться Lazarus и

будет сохранен в файле с расширением .lpr.

При выборе "Программа пользователя" Lazarus сделает следующую заго-

товку:

program Project1; {$mode objfpc}{$H+} uses

Classes, SysUtils

{ you can add units after this }; {$IFDEF WINDOWS}{$R project1.rc}{$ENDIF}

begin

end.

При этом исходный код программы будет сохранен в файле с расширением

.pas.

Сравнивая эти три способа создания консольных приложений, можно сде-

92

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

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

Дело в том, что заготовка программы, предложенная Lazarus, предполагает, что мы знаем объектно-ориентированное программирование (ООП) и еще много чего, например, обработку исключений. Нам до этого еще далеко!

Но мы, выбрав пункт "Консольное приложение" подтверждаем свою ре-

шимость "идти до конца" – изучить язык, изучить ООП и затем создавать кон-

сольные приложения "как положено"!

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

вится.

В заключение отметим, что создавать новые консольные проекты, а также множество других видов проектов и программных объектов можно через меню Файл -> Создать…, рис. 2.46.

Рис. 2.46. Меню "Создать"

93

2.1 Основные элементы языка

____________________________________________________________________

2.1.13 Типовой пустой проект

Как вы видели из 2.1.10 после создания нового проекта, его необходимо настраивать. В частности, включить в проект пакет LCL (см. рис. 2.24, 2.25), а в

Linux настроить параметры запуска (см. рис. 2.27, 2.28). При большом числе создаваемых проектов это напрягает. В нашей книге мы будем создавать до-

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

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

нять на компьютере. Ведь только так можно научиться программировать! Даже простой набор текстов программ в редакторе исходного кода Lazarus позволит вам намного быстрее освоить и запомнить многие синтаксические конструкции языка Паскаль. Как было сказано в 1.1.3 одного чтения и "понимания" приме-

ров книги будет совершенно недостаточно!

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

ступим следующим образом:

1.Создайте консольное приложение любым удобным для вас способом.

2.Вместо заготовки Lazarus введите в окне редактора исходного кода сле-

дующий текст:

program project1;

{$mode objfpc}{$H+}

uses

CRT, FileUtil, SysUtils; begin

{Вставьте сюда исходный код вашей программы}

94

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

3. Установите необходимые свойства проекта, т.е. включите в проект пакет

LCL, в Linux настройте параметры запуска.

4. Сохраните проект в папке "Типовой пустой проект для консольных при-

ложений". Не забывайте, что в Linux в названиях папок не допускаются пробе-

лы, поэтому присвойте этой папке имя без пробелов, например такое: "Типовой_пустой_проект_для_консольных_приложений".

Теперь, если вам необходимо создать новый проект, откройте этот пустой проект и тут же сохраните его в другой папке с помощью меню Файл-> Сохранить как… При этом можно и нужно сохранить проект под дру-

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

2.1.14 Операции с целыми числами

До сих пор мы рассматривали лишь одну операцию с целыми числами – сложение. Естественно в Паскале разрешены и другие операции. Рассмотрим программу, показывающую все возможные операции с целыми числами:

Пример.

program int_operations;

uses Crt, FileUtil;

var

A, B, C: integer;

begin

writeln(UTF8ToConsole('Введите два числа'));

95

2.1 Основные элементы языка

____________________________________________________________________

readln(A, B);

writeln('A= ',A,' B= ',B);

C:=A + B;

writeln(UTF8ToConsole('Демонстрация сложения, C= '),C);

C:=A * B;

writeln(UTF8ToConsole('Демонстрация умножения, C= '),C);

C:=A div B;

writeln(UTF8ToConsole('Демонстрация деления нацело, C= '),C);

C:=A mod B;

writeln(UTF8ToConsole('Остаток от деления, C= '),C);

C:=A - B;

writeln(UTF8ToConsole('Демонстрация вычитания, C= '),C); writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Из этой программы видно, что знак умножения * (а не буква х). Тем самым избегают возможности спутать его с буквой х.

Далее с целыми числами определены операции:

div (от английского divide – делить) – деление нацело.

Пусть А = 17, В = 3, отсюда 17:3 = 5*3+2 и

A div B

дает результат 5

mod (от английского modulo – определить остаток) – определение остатка от деления нацело.

A mod B дает результат 2

Откомпилируйте и выполните свою программу (клавиша F9).

Все нормально? Программа работает? У вас еще не выходило такое? (рис.

2.47, 2.48)

96

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

Рис. 2.47. Сообщение об ошибке

Рис. 2.48. Оператор, при выполнении которого произошла ошибка

В Linux окно вывода будет таким:

Рис. 2.49. Сообщение об ошибке в терминале

97

2.1 Основные элементы языка

____________________________________________________________________

Или, если вы запускаете программу в консоли, то окно будет иметь вид:

Рис. 2.50. Сообщение об ошибке в консоли

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

программе имеется операция деления. А ведь пользователь мог в качестве вто-

рого числа ввести ноль. Но делить на ноль, как известно, нельзя!

Здесь мне бы хотелось снова отступить от конкретики и порассуждать на

"общие" темы.

2.1.15Вместо лирического отступления 2

Впроцессе разработки программы многие начинающие программисты со-

вершенно не обращают внимания на такие, казалось бы, мелочи. А зря! Ваши программы должны быть защищены от любых мыслимых и немыслимых оши-

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

98

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

гом, его могли в этот момент чем-то отвлечь, он мог просто не обратить внима-

ния на ваше предупреждение или забыть о нем. В конце концов, он мог нажать не на ту клавишу! Например, цифра 9 на клавиатуре расположена рядом с циф-

рой 0. И, наконец, обязательно найдутся такие пользователи, которые захотят посмотреть, а что будет, если я все-таки введу ноль!

Ясно, что если в ваших программах будут встречаться такие "казусы", то вашему престижу как программиста будет нанесен невосполнимый урон, осо-

бенно если вы пишете программы на коммерческой основе, т.е. продаете их.

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

Таким образом, контроль за такими "не предусмотренными" действиями пользователя лежит на программисте! Есть такое понятие в программировании

– писать программы, рассчитанные на "дурака" (fool-tolerance).

Поэтому любите своего пользователя, уважайте его, заботьтесь о том, что-

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

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

Чаще всего такого рода ошибки возникают при вводе пользователем ка-

ких-то данных. Со способами защиты своей программы от таких непреднаме-

ренных действий пользователя мы познакомимся позже (см. раздел 2.1.25. и

6.3.7.). Здесь я просто заострил ваше внимание на этой проблеме, чтобы вы все-

гда помнили об этом в процессе написания своих программ.

2.1.16 Стандартные функции с целыми аргументами

Рассмотрим программу:

program functions;

{$mode objfpc}{$H+}

99

2.1 Основные элементы языка

____________________________________________________________________

uses

CRT, FileUtil;

var

a, b, c: integer;

begin

a:=-2;

b:= abs(a);

writeln(UTF8ToConsole('Абсолютная величина числа a= '), b);

c:= sqr(b);

writeln(UTF8ToConsole('Квадрат числа b= '), c);

c:= sqr(b + b);

writeln(UTF8ToConsole('Квадрат числа (b + b)= '), c); writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Оператор b:= abs(a); присваивает переменной b абсолютное значе-

ние числа a.

Под абсолютным значением числа понимается значение этого числа, если отбросить знак.

abs(-2)= 2

abs(-10)= 10

abs(5)= 5

Оператор c:= sqr(b)- присваивает переменной c квадрат числа b, т.е. c b2 , sqr (от английского square – квадрат). Число в скобках называется ар-

гументом функции. В качестве аргумента может быть выражение, например,

b2 4ac запишется на Паскале следующим образом: sqrt(sqr(b) 4 * a * c);

100