лабораторные на Pasca (Кудрявцев)l
.pdfТипы данных. Функции преобразования типа |
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 |
|
|