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