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

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

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

Глава 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