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

лабораторные на Pasca (Кудрявцев)l

.pdf
Скачиваний:
32
Добавлен:
18.03.2015
Размер:
1.63 Mб
Скачать

Типы данных. Функции преобразования типа

43

 

 

Тип Real, который используют, не задумываясь, многие програм- мисты при разработке вычислительных программ на Turbo Pascal, самый медленный из всех вещественных типов.

Для работы с вещественными данными могут использоваться встроенные математические функции abs(х), arctan(x), cos(х), sin(х),

exp(х), In(х), random, sqr(х), sqrt(х), а также функции fгас(х) и int(x).

Функция fгас(х) выделяет дробную часть х, а функция int(x) целую часть х, где х выражение любого вещественного типа. Результат имеет тип и знак аргумента. Например,

frac(3.14159) возвращает 0.14159, int(3.14159) возвращает 3.0.

Функции преобразования типа. Эти функции предназначены для преобразования типов величин, например, символа в целое число, вещественного числа в целое и т.д. К ним относятся следующие функции.

Chr(х) преобразование ASCIIкода в символ. Аргумент функции должен быть целого типа в диапазоне (0..255). Результатомявляется символ, соответствующий данному коду.

Ord(х) преобразование любого порядкового типа в целый тип. Ар-

гументом функции может быть величина любого порядкового типа (логический, литерный, перечисляемый). Результатом является ве- личина типа Longint.

Round(х) округление вещественного числа до ближайшего цело- го. Аргумент функции величина вещественного типа, а результат

округленная до ближайшего целого величина типа Longint.

Trunc(х) получение целой части вещественного числа. Аргумент функции величина вещественного типа, а результат целая часть этого числа. Тип результатаLongint.

Пример 3.

х:= 21.53; trunc(x) = 21, round(x) = 22;

х:= –2.7; trunc(x) = –2, round(x) = –3.

44

Лабораторная работа № 3

 

 

КОНТРОЛЬНЫЕ ЗАДАНИЯ

1. Определить тип (целый или вещественный) выражения:

1)

1 + 0.0;

4) sqr(5.0);

7) succ(–2);

2)

20/4;

5) sqrt(16);

8) trunc(–3.14);

3) sqr(4);

6) sin(0);

9) round(6.88).

2. Чему равно?

1) trunc(5.61);

6) round (–17.96);

2) trunc (–5.61);

7) frac(Pi);

3) round(17.16);

8) frac(–Pi);

4) round(17.96);

9) int(Pi);

5) round(–17.16);

10) int(–Pi).

Проверить правильность ответов, составив соответствующую программу.

3. Чему равно?

1) chr(65);

6) ord('''');

2) chr(97);

7) ord(chr(49));

3) ord('A');

8) chr(ord(' '));

4) ord('a');

9) pred('B');

5) chr(7);

10) succ('B').

4.Вычислить значения выражений:

1)succ(round(a/b)) – pred(n);

2)ord('z') – ord('a') + 1.

5.Дано действительное число х. Получить целую часть числа х, затем число х, округленное до ближайшего целого, затем х без дробных цифр.

6.Используя типы Color и Month (пример 1), определить порядковые номера значений green, black, mar, dec, а также succ(nov) и pred(feb).

7.Используя типы Day и Ch (пример 2), определить порядковые номера зна-

чений 'a', 'z', 1, 31.

8.Составить программу «датчик случайных чисел», генерирующую случай- ное число в диапазоне 0 i < 1 и 0 i < n, а также в диапазоне a i b.

9.Составить программу, проверяющую на четность вводимое число.

45

Лабораторная работа № 4

ОПЕРАЦИИ ОТНОШЕНИЙ. ЛОГИЧЕСКИЕ ОПЕРАЦИИ

Операции отношений предназначены для сравнения двух разных величин (величины должны быть сравнимых типов). Результат сравнения имеет логический (Boolean) тип (Табл. 1). Все операции обладают одним и тем же приоритетом. Каждая из операций долж- на соединять два операнда.

Операнды этих операций (константы, переменные, функции, выра- жения, не содержащие отношений) могут быть вещественного, це- лого или логического (булевского) типа. Результат операции отно- шения равен True, если отношение удовлетворяется для значений входящих в него операндов, и False в противном случае.

Указанные два слова являются единственно возможной парой зна- чений стандартного типа Boolean.

 

Операции отношений

Таблица 1

 

 

 

 

 

 

Операция

Действие

Выражение

Результат

 

 

 

 

 

 

 

=

Равно

А = В

True, если А равно В

 

<>

не равно

А <> В

True, если А не равно В

 

>

Больше

А > В

True, если А больше В

 

<

Меньше

А < В

True, если А меньше В

 

>=

больше или

А >= В

True, если А больше или

 

 

равно

 

равно В

 

 

<=

меньше или

А <= В

True, если А меньше или

 

 

равно

 

равно В

 

 

 

 

 

 

 

 

Например, значение 5 < 2 есть False (ложно), а 0 <= 15 True (ис- тинно). В сравнении с арифметическими операциями ( , /, div, mod, +, –) операции отношений имеют меньший приоритет (см. табл. 2), т.е., например, значение отношения 2 5 <= 17 div 3 есть False, а от-

ношения 7+3>16 – 4 3 True.

46

Лабораторная работа № 4

 

 

Следует помнить, что к операндам вещественного типа не следует применять операцию отношения «=» (равно), условие может не вы-

полняться за счет неточного представления действительных чисел в памяти ЭВМ и неизбежных ошибок округления при вычислении выражений вещественного типа. Поэтому отношение а1 = а2 следу- ет заменить отношением abs (a1 – а2) < е, где е некоторая малая величина, характеризующая допустимую погрешность округления.

 

Приоритет операций

Таблица 2

 

 

 

 

 

Приоритет

Тип операций

Операции

 

 

 

 

 

 

 

1

Унарные операции

Not

 

 

2

Операции типа

, /, Div, Mod, And

 

умножения

 

 

 

 

 

3

Операции типа сложения

+, , Or, Xor

 

 

4

Операции отношений

=, 0, <, >, <=, >=

 

 

 

 

 

 

 

Логические операции. Помимо операций отношения в языке Turbo Pascal существуют 4 логических операции, применимые только к операндам целого и логического типа. Если операнды целые чис- ла, то результат логической операции тоже целое число. Логиче- ские операции над логическими данными дают результат логиче- ского (Boolean) типа.

Имеется одна унарная операция Not (исключение) и три бинарных операции And (и), Or (или), Xor (исключающее или) (Табл. 3).

В Turbo Pascal булевскоевыражение это выражение типа Boolean, т.е. такое, вычисление которого дает один из двух результатов: True (истина) и False (ложь). Элементами булевских выражений могут быть булевские константы (True или False), переменные и опять- таки выражения.

Рассмотрим пример:

Var

х, у, z: real; b: boolean;

Операции отношений. Логические операции

47

 

 

x := 4; у := 0; z := 1;

b := (x<у–1) or (у+z>=x) and (z<>0);

В этом примере присутствуют две булевские операции And и Or. Операция And, как более приоритетная, выполняется первой. Опе- рандами And служат два булевских выражения (у+z>=x) и z<>0). Первое дает False, второе True. Следовательно, результатом опе- рации And будет False. Затем выполняется Or с операндами (x<у1) и False. И то и другое равно False, поэтому операция Or дает False.

 

Логические операции

 

Таблица 3

 

 

 

 

 

 

 

Операция

Действие

Выражение

А

В

Результат

 

 

 

 

 

 

 

 

Not

Логическое

Not A

True

 

False

 

 

отрицание

 

False

 

True

 

And

Логическое и

A and В

True

True

True

 

 

 

 

True

False

False

 

 

 

 

False

True

False

 

 

 

 

False

False

False

 

Or

Логическое или

A or В

True

True

True

 

 

 

 

True

False

True

 

 

 

 

False

True

True

 

 

 

 

False

False

False

 

Xor

Исключающее или

А xor В

True

True

False

 

 

 

 

True

False

True

 

 

 

 

False

True

True

 

 

 

 

False

False

False

 

 

 

 

 

 

 

 

Поскольку логические операции имеют более высокий приоритет, чем операции отношения, в сложных логических выражениях необ- ходимо расставлять скобки. Если, например, A, В, C и D имеют тип Integer, то выражение

А = В and С < D

48

Лабораторная работа № 4

 

 

вызовет сообщение об ошибке. Правильным будетвыражение

(А = В) and (C < D).

С помощью скобок можно изменить порядок вычислений. Напри- мер, выражение

1

6

4

2

5

3

(–3>=5) or not (7<9) and (0<=3)

имеет значение False. Цифрами вверху показан порядок выполне- ния операций: результат выполнения операции 1 – False, операции 2 – True, операции 3 – True, операции 4 – False, операции 5 – False, операции 6 – False.

Следует иметь в виду, эти две логические операции могут быть за- писаны подряд, если второй из них является операция Not, напри- мер:

x1 and not x2.

В языке программирования Turbo Pascal нельзя записать дву- стороннее неравенство 1 < x < 2. Вместо этого необходимовосполь- зоваться логическим выражением (x > 1) and (x < 2).

Нельзя также записать x = у = z. Такой же смысл имеет логическое выражение (x = у) and (x = z). Если необходимо написать условие, заключающееся в том, что x лежит в диапазоне от –2 до + 2, его

можно записать в виде

not((х<–2) and (х>2)) или (х >=–2) and (x<=2).

Более сложным является условие, которое истинно, если точка ле-

жит внутри единичного круга с центром в начале координат

sqr(x)+ sqr(y) < 1.

Пример 1. Определить принадлежность некоторого действитель- ного числа х одному из двух отрезков [а, b] или [c, d]. Если х при- надлежит одному из этих отрезков, то переменной q присвоить зна- чение True. в противном случае False.

Program Primer1; Var

Операции отношений. Логические операции

49

 

 

a, b, c, d, x: real; q: boolean;

Begin

write ('Введите x, a, b, c, d ==>'); readln (x, a, b, c, d);

q:=(a<=x) and (x<=b) or (c<=x) and (x<=d); writeln ('Число принадлежит? ', q);

End.

Пример 2. Составить программу, позволяющую определить, нахо- дится ли точка с произвольно заданными координатами в заштри- хованной области. Если точка принадлежит заштрихованной облас- ти, то переменной q присвоить значение True, в противном случае

False.

y 1

1

x

Program Primer2;

Var

x,y: real; q,b: boolean;

Begin

write('Введите x,y ==>'); readln(x,y);

b :=(sqr(x)+sqr(y)<=1) and (abs(x)+abs(y)>=1); q :=((x<0) and b) or ((x>=0) and not b));

writeln ('Точка принадлежит? ', q); End.

Примечание.

В Turbo Pascal имеются два вида вычисления логических выра- жений: полное вычисление и укороченное вычисление. Полное вы-

50

Лабораторная работа № 4

 

 

числение означает, что вычисляется каждый операнд, даже если из- вестен результатвсего выражения. Предположим, что дано выраже- ние A and В, где А и В некоторые логические выражения (операн- ды). При полном вычислении в любом случае вычисляются и зна- чения А, и значения В, а уж затем формируется значение всего вы- ражения. При укороченном вычислении, если величина А = False, выражение В не вычисляется, т.к. его значение не влияет на резуль- тат, который в любом случае будетFalse.

Выбор вида вычисления осуществляется с помощью директивы компилятора . В случае директивы {$В–} (этот вариант выбирает- ся по умолчанию) производится укороченное вычисление. В случае директивы {$В+} производится полное вычисление.

 

КОНТРОЛЬНЫЕ ЗАДАНИЯ

1. Вычислить значения выражений:

 

1)

k mod 7 = k div 5 – 1

при k = 15;

2)

odd(trunc(10∙p))

при p = 0.182;

3)

not odd(n)

при n = 0;

4)

(x∙y <> 0) and (y > x)

при x = 2; y = 1;

5)

(x∙y <> 0) or (y > x)

при x = 2; y = 1;

6)

(a < b) and (x + a < b) or (с < m) or e

 

 

при a = 2.5; b = 7.8; с = 17.3; m = 5; x = 8.7; e = true;

7)

(a < 3) and (b = a+ 6) or not (c = 4)

при a=2; b=8; c=5;

8)

t and (р mod 3=0)

при t = true; p = 101010;

9) a or (not b)

при а = false; b = true;

10) (2–a > b) or not (c = b) and (d – 1 <= e)

при a = 2; b = 4; c = 7; d = 4; e = 3;

11)not ((a = b) and (c2 <= 100) or (d <> e div 8))

при a = 6; b = 7; с = 3; d = 2; e = 16;

12)not (a = b) and (c2 <= 100) or (d <> e div 8)

при a=1; b=18; c=6; d=42; e=8

13) p and q or r

при p = true; q = true; r = false;

14) p and q or r

при p = true; q = false; r = true;

15) p and q or r

при p = false; q = false; r = false;

2. Вычислить следующие выражения при а = true, b = false, с = true, p = true, q = false:

1) a or b and not a;

Операции отношений. Логические операции

51

 

 

2)(a or b) and not a;

3)not a and b;

4)not (a and b);

5)not (pred(c) = false) or (ord (c) = 1);

6)not a and not b or not c;

7)a and b < a or not b;

8)(ord (succ (false)) > 0) or (ord (false) <0)

9)a and b or not a;

10)(a = c) or (b = c) and (p > q);

11)(pred(q) = b) or (p > q);

12)(a = p) or (p = q) and not p;

13)(a > b) or not p and (b > c);

14)(a = q) and not ((a > b) and (p > q));

15)succ(pred(c = q)) and (ord(p = q)=1));

16)(a > b) and (p > q) or (a = p);

3. Даны значения переменных: a=10; b=20; t = true; f = false. Какими будут зна- чения выражений:

1)(t and f) or not (t or f);

2)t or f or (a > b);

3)not (not (not (a < b)));

4)not (a < 15) or not (b < 30);

5)(a < 5) and (b > 5) and (a < 20) and (b < 30);

6)(a < 5) and (b > 5) and (a < 10) and (b < 30);

7)(a < 5) and (b > 5) and (a < 20) or (b < 30);

8)(a < 5) and (b > 5) and (a < 10) or (b < 30);

9)not (pred(t) = false) or (ord(f) <> 1);

10)not (not (a = b));

11)not (not (not (a = b)));

12)(ord(succ (f)) > 0) or (ord(t) =1);

13)(a < 5) and (b > 5) or (a < 20) and (b < 30);

14)(a < 5) and (b > 5) or (a < 10) and (b < 30);

15)(a < 5) and (b > 5) xor (а < 20) and (b < 30);

16)(a < 5) and (b > 5) xor (a < 10) and (b < 30)?

52

Лабораторная работа № 4

 

 

4. Составить программу, позволяющую определить, находится ли точка с произвольно заданными координатами в заштрихованной области. Если точ- ка принадлежит заштрихованной области, то переменной q присвоить значе- ние True, в противном случае False.

1)

y

2)

 

y

1

 

 

 

 

1

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 x

 

 

 

 

1 x

1

 

 

 

 

1

 

 

 

 

 

1

3)

y

4)

 

y

 

2

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

1

x

1

1

x

 

 

 

 

 

5)

y

y = x2

 

6)

y

 

 

 

 

 

 

 

 

 

1

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

x

 

1

1

x

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7)

 

y

 

8)

y

 

 

 

 

1

 

 

1

 

 

 

1

1

x

1

1

x

 

 

 

1

 

 

1