Мансуров. Основы программирования в среде Lazarus. 2010
.pdfГлава 2 Введение в язык программирования Pascal
____________________________________________________________________
Как уже отмечалось, в операторах write и writeln можно использо-
вать любые допустимые выражения, т.е. можно записывать так:
writeln('Квадрат числа (b + b)= ', sqr(b + b));
2.1.17Операции с вещественными числами (тип real).
Свещественными числами можно выполнять различные операции. Все возможные операции иллюстрируются следующей программой:
program real_numbers; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
a, b, c: real; begin
a:= 17.3; b:= 3.4; c:= a * b;
writeln(UTF8ToConsole('Умножение вещественных чисел c = '), c);
c:= a / b;
writeln(UTF8ToConsole('Деление вещественных чисел c = '), c);
c:= a + b;
writeln(UTF8ToConsole('Сложение вещественных чисел c = '), c);
c:= a - b;
writeln(UTF8ToConsole('Вычитание вещественных чисел c = '), c); writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
101
2.1 Основные элементы языка
____________________________________________________________________
2.1.18 Форматирование вывода
При выводе значений вещественного типа используется так называемое экспоненциальное представление, в котором используется степень десяти. Вы это могли видеть при выполнении предыдущего примера. Такой вид чисел на экран часто неудобен. В операторах вывода можно использовать форматиро-
вание для указания ширины поля вывода. Вид оператора вывода в этом случае будет таким:
write(переменная_1:w:d, … переменная_n:w:d);
writeln(переменная_1:w:d, … переменная_n:w:d);
где w – общая ширина поля вывода, d – количество знаков после запя-
той, т.е. дробной части числа. w и d должны быть константами или выраже-
ниями целого типа. Для того чтобы общая ширина поля вывода определялась автоматически, указывайте w = 0. Например:
writeln('a * b = ', c:0:2);
В этом случае на экран будет выведено
a * b = 58.82
вместо
a * b = 5.882000000000000Е+001
2.1.19 Одновременное использование вещественных и целых чисел.
В программе могут встречаться переменные разных типов:
program int_real; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
102
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
n, k: integer;
a, b: real;
begin
a:= 3.6;
n:= 4;
b:= n;
writeln(UTF8ToConsole('Вещественная переменная b= '), b);
n:= trunc(a);
writeln(UTF8ToConsole('Операция truncate n= '), n);
k:= round(a);
writeln(UTF8ToConsole('Операция round k= '), k); writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
В программе мы видим запись b:= n; где вещественной переменной b
присваивается значение целой переменной n. Кроме того, в таких записях как b:= n + 4.6; или b:= 3 * 7.2 + n; встречаются вещественные и це-
лые числа, стоящие в правой части выражения. Такие записи разрешены. Ком-
пилятор автоматически преобразует выражение в правой части оператора при-
сваивания к вещественному типу. И наоборот, присвоение вещественных зна-
чений целым переменным просто запрещены. Т.е. если написать оператор при-
сваивания
n:= 3.14;
компилятор выдаст ошибку.
Для этого используются стандартные функции trunc и round. С помо-
щью функции trunc производится преобразование вещественного числа в целое путем отбрасывания всех цифр, стоящих после десятичной точки (trun-
103
2.1 Основные элементы языка
____________________________________________________________________
cate – усекать), round – позволяет преобразовать вещественное число в це-
лое путем округления (round – округлять).
2.1.20 Другие стандартные функции с вещественными аргументами
|
|
|
Таблица 2.2 |
Функция |
Запись на Паскале |
||
|
|
||
x2 |
sqr(x) |
||
|
|
|
sqrt(x) |
|
x |
||
|
|
||
sin x |
sin(x) |
||
|
|||
cos x |
cos(x) |
||
arctgx |
arctan(x) |
||
ln x |
ln(x) |
||
ex |
exp(x) |
Еще раз напоминаю, что аргументом функции (т.е. то, что стоит в скобках)
может быть выражение. Например,
s:= sin(a + b * 2 / 5.2 - sqr(a));
2.1.21 Булевы переменные
Булевы переменные (логические переменные) – это переменные, имеющие
только два значения false (ложь) и true (истина). Над булевыми пере-
менными определены логические операции not (логическое отрицание, "НЕ"), and (логическое "И"), or (логическое "ИЛИ"), xor (исключающее "ИЛИ").
Кроме того, определены следующие операции отношения:
= |
равно, |
<> не равно, |
< |
меньше, |
> больше |
104
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
<= меньше или равно, >= больше или равно
Результатом этих операций отношения являются логические false или
true.
Рассмотрим следующее выражение:
x > 3
В зависимости от значения x это выражение будет либо истинным
( true), либо ложным (false).
Пример.
program logic; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x: integer; flag: boolean;
begin x:= 4;
flag:= x > 3; writeln('flag = ', flag); flag:= x < 3; writeln('flag = ', flag);
writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
Допускается размещать справа и слева от знаков отношений арифметиче-
ские выражения: x + 6.5 < x + 5 такие выражения называются логически-
ми или булевыми выражениями.
105
2.1 Основные элементы языка
____________________________________________________________________
Рассмотрим программу, где используются логические функции:
program logic_1; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x: integer;
L1, L2, Result: boolean; begin
x:= 4; L1:= x > 3; L2:= x < 3;
writeln(UTF8ToConsole('Булева переменная L1= '), L1); writeln(UTF8ToConsole('Булева переменная L2= '), L2); Result := L1 AND L2;
writeln(UTF8ToConsole('L1 AND L2 равно '), Result); Result := L1 OR L2;
writeln (UTF8ToConsole('L1 OR L2 равно '), Result); Result := NOT Result;
writeln (UTF8ToConsole('NOT Result равно '), Result); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
2.1.22 Условные операторы.
Условные операторы – это такие операторы, с помощью которых можно изменять последовательность выполнения операторов программы.
106
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
2.1.22.1 Оператор if …. then
Этот оператор имеет вид:
if условие then
оператор;
где оператор – любой оператор Паскаля, условие – логическое выражение.
Если это условие выполняется (т.е. это условие дает значение true), то будет выполнен оператор стоящий после слова then.
Рассмотрим пример:
if X < 3 then
writeln(X);
Здесь записано: "Если X < 3 , то вывести на экран значение X".
Оператор if…then можно представить в виде структурной схемы, с
помощью которой показывается ход выполнения программы:
да (true)
X<3 |
|
|
|
|
|
|
|
||
|
|
|
|
|
нет (false) |
writeln (X) |
|||
|
|
|||
|
|
|
|
|
|
|
|
|
|
Рис.2.51. Блок-схема выполнения условного оператора if…then
2.1.22.2. Оператор if …then ... else
Этот оператор записывается следующим образом:
107
2.1 Основные элементы языка
____________________________________________________________________
if условие then
оператор 1
else
оператор 2;
Обратите внимание, что перед else точка с запятой (;) не ставится. В
этом операторе, в зависимости от значения условия, будет выполняться либо оператор 1, либо оператор 2 , что иллюстрирует структурная схема.
|
|
|
условие |
|
|
|
|
(false) |
(true) |
||||
|
|
|||||
|
ложь |
|
истина |
|||
|
|
|
|
|
|
|
Оператор 2 |
|
|
|
Оператор 1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 2.52. Блок-схема выполнения условного оператора if…then…else
Из этой структурной схемы видно, что выбирается либо один, либо другой вариант продолжения программы.
Например, после выполнения оператора:
if X < 2 then
X1:= 0
else
X1:= 1;
переменной Х1 будет присвоено значение 0, если Х меньше 2 или 1, если Х больше или равно 2.
Пример. Вычислить значение функции:
108
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
x, x |
0 |
y 0, x |
0 , |
x2 , x |
0 |
значение x ввести с клавиатуры.
В приведенных далее примерах мы не будем составлять блок-схемы в тайной надежде, что читатель сам их составит в случае необходимости.
program ex1;{Вариант 1 - использование оператора if…then } {$mode objfpc}{$H+}
uses
CRT, FileUtil; var
X, Y: real; begin
writeln(UTF8ToConsole('Введите значение Х' )); readln(X);
if X > 0 then Y:= X;
if X = 0 then Y:= 0;
if X < 0 then Y:= SQR(X);
writeln('X= ', X:0:2, '; Y= ', Y:0:2); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
program ex2;{Вариант 2 - использование оператора if…then…else } {$mode objfpc}{$H+}
109
2.1 Основные элементы языка
____________________________________________________________________
uses
CRT, FileUtil; var
X, Y: real; begin
writeln(UTF8ToConsole('Введите значение Х')); readln(X);
if X > 0 then Y:= X
else
if X = 0 then Y:= 0
else
Y:= sqr(X);
writeln('X= ', X:0:2, '; Y= ', Y:0:2); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
Часто бывает необходимо, чтобы выполнялись или не выполнялись группа из нескольких операторов. Для этого эти операторы объединяются в блок, в
котором перед первым оператором ставится слово begin, а после последнего слово end. Все операторы между begin и end образуют так называемый со-
ставной оператор, а begin и end как бы выполняют роль скобок. Их часто так и называют – операторные скобки.
Пример:
program demo; {Демонстрация применения составного оператора}
{$mode objfpc}{$H+}
uses CRT, FileUtil;
110