![](/user_photo/2706_HbeT2.jpg)
Лаб №4 (Информатика)
.pdfМинистерство образования и науки Российской Федерации Пермский национальный исследовательский политехнический университет
Кафедра ИТАС
Альмухаметов В.Ф., Лясин В.Н., Полевщиков И.С.
Информатика
Методическое пособие к выполнению лабораторной работы №4 по теме «Логический и символьный типы данных»
(для студентов 1 курса электротехнического факультета)
Пермь, 2013 год
2
Цель работы
Научиться разрабатывать простейшие линейные программы в системе Турбо-Паскаль с использованием логических выражений.
Краткие теоретические сведения [1, 2]
Основы алгебры логики
Прямое отношение к программированию имеет дисциплина, которая называется математической логикой. Основу математической логики составляет алгебра логики, или исчисление высказываний. Под
высказыванием понимается любое утверждение, в отношении которого можно однозначно сказать, истинно оно или ложно. Например, «Луна – спутник Земли» - истинно; «7 > 4» - истинно; «Пермь – столица России» -
ложно; «2 = 9» - ложно. «Истина» или «ложь» являются логическими величинами. Логические значения приведенных выше высказываний однозначно определены. Другими словами, их значения являются
логическими константами.
Логическое значение неравенства «x>5», где x – переменная, является переменной величиной. В зависимости от значения x оно может быть либо истиной, либо ложью. В связи с этим возникает понятие логической переменной.
Основы формального аппарата математической логики создал в середине XIX века английский математик Джордж Буль (Bool). В его честь исчисление высказываний называют «булевой алгеброй», а логические величины – «булевскими».
Одиночные высказывания могут быть объединены в составные логические формулы с помощью логических операций.
Имеются три основных логических операции:
1)отрицание;
2)конъюнкция (логическое умножение);
3)дизъюнкция (логическое сложение).
3
Операция отрицания обозначается в математической логике значком
« » и читается как частица «не». Это одноместная операция. Например,
(x y) читается «не (x равно y)». В результате получится «истина», если x
не равно y, и ложь, если x равно y. Отрицание изменяет значение логической
величины на противоположное.
Операция конъюнкции обозначается значком « » и читается как частица «и». Это двухместная операция. Например, (x 0) (x 1) . Данная логическая формула примет значение «истина», если x (0,1) , и «ложь» в
противном случае. Следовательно, результат конъюнкции – «истина», если истинны оба операнда.
Операция дизъюнкции обозначается значком « » и читается как частица «или». Это двухместная операция. Например, (x 0) (x 1) . Данная логическая формула примет значение «истина», если x 0 , либо x 1, и «ложь» в противном случае. Следовательно, результат дизъюнкции –
«истина», если хотя бы один операнд истинен.
Логические величины, операции и выражения в Турбо-Паскаль
В Паскале логические значения обозначаются служебными словами false (ложь) и true (истина), а идентификатор логического типа – boolean. Величины этого типа занимают в памяти 1 байт.
Кроме величин (констант и переменных) типа boolean, логические значения false и true принимают результаты операций отношения.
Операции отношения осуществляют сравнение двух операндов и определяют, истинно или ложно соответствующее отношение между ними.
В языке Паскаль используются следующие операции отношения:
= (равно);
<> (не равно);
> (больше);
< (меньше);
4
>= (больше или равно);
<= (меньше или равно).
Примеры записи отношений:
x>=y
a+b<c*d
10<=5
sqrt(z)=4.5
Примеры вычисления значений отношений:
1) Для отношения 15>=15 результатом будет true, т.к. число 15
действительно равно самому себе.
2) Для отношения 78>56 результатом также будет true, т.к. число
78 действительно больше 56.
3) Для отношения 10<=3 результатом будет являться false, т.к. в
действительности 10 больше 3.
Логические операции выполняются над операндами булевского типа.
Вязыке Турбо-Паскаль имеются четыре логические операции:
1)not – отрицание;
2)and – логическое умножение (конъюнкция);
3)or – логическое сложение (дизъюнкция);
4)xor – исключающее ИЛИ (двухместная операция, которая в результате дает значение «истина», если оба операнда имеют разные логические значения).
Операции перечислены в порядке убывания приоритетов. Результаты
логических операций для различных значений операндов приведены в табл.
1.
Таблица 1. Результаты логических операций для различных значений операндов
A |
B |
not A |
A and B |
A or B |
A xor B |
true |
true |
false |
true |
true |
false |
true |
false |
false |
false |
true |
true |
false |
true |
true |
false |
true |
true |
false |
false |
true |
false |
false |
false |
5
Операции отношения имеют самый низкий приоритет. Поэтому если операндами логической операции являются отношения, то их следует заключать в круглые скобки. Например, математическому неравенству соответствует 20 y 35 следующая логическая операция:
(y>=20) and (y<=35)
Логическое выражение есть логическая формула, записанная на языке программирования. Логическое выражение состоит из логических операндов, связанных логическими операциями и круглыми скобками.
Результатом вычисления логического выражения является булевская величина (false или true). Логическими операндами могут быть логические константы, переменные, функции, операции отношения. Один логический операнд является простейшей формой логического выражения.
Рассмотрим примеры логических выражений (обозначим a, b, c –
некоторые логические переменные; x, y –вещественные переменные; k –
целая переменная) и особенности нахождения значений этих выражений: 1) x<2*k
Пусть в данном примере переменная x принимает значение 1.5, а
переменная k значение 1. Изначально, в соответствии с приоритетом,
производится умножение числа 2 на значение переменной k, равное 1. В
результате получаем значение 2. Затем выполняется операция отношения:
1.5<2. Число 1.5 действительно меньше 2, поэтому значением логического выражения является true.
2) true
В данном случае приведена простейшая форма логического выражения – логическая константа. Значение этого выражения всегда равно true.
3) a
В данном случае приведена простейшая форма логического выражения – логическая переменная. Значение этого выражения равно
6
true, если переменная a принимает значение true, и false, если переменная a принимает значение false.
4) odd(k)
В примере использована логическая функция odd. Это функция от целого аргумента, которая принимает значение true, если значение аргумента – нечетное, и false, если значение аргумента – четное. Пусть k
принимает значение 104. Т.к. 104 – четное число, поэтому значением логического выражения является false.
5) not (x>y)
Пусть переменная x равна 14.35, а переменная y – 9.75. В
соответствии с приоритетом, сначала вычисляется часть выражения,
находящаяся в скобках. Подставляем вместо x и y соответствующие значения. Получаем выражение 14.35>9.75, равное true. Затем применяем логическую операцию not: согласно табл. 1, not true равно false.
7) a or c and b
В соответствии с приоритетом, в первую очередь выполняется логическая операция and, а затем or. Пусть переменная a равна false,
переменная b – true, переменная c – false. Подставляем значения вместо c и b. Согласно табл. 1, false and true равно false. Подставляем значение вместо a. Согласно табл. 1, false or false равно false.
8) (a or b) and (y>=k) or not c
В соответствии с приоритетом, сначала выполняются операции в круглых скобках. Сначала вычисляется значение выражения в скобках,
находящихся слева, т.е. значение выражения a or b. Пусть a=true, b=false. Согласно табл. 1:
true or false = true.
7
Затем вычисляем значением выражения в следующих скобках, т.е.
значение выражения y>=k. Пусть y=3.02, k=4. Подставляем значения вместо переменных и получаем:
3.02>=4 = false.
Затем, согласно приоритету, выполняется операция not. Пусть
c=false. Тогда, согласно табл. 1:
not false = true.
Затем, в соответствии с приоритетом, выполняем операцию and,
подставляя полученные значения выражений a or b и y>=k: true and false = false.
В последнюю очередь выполняем операцию or, и тем самым находим
значение всего выражения:
false or true = true.
Логический оператор присваивания
Рассмотрим примеры использования логического оператора присваивания. Слева от знака присваивания расположена логическая переменная, а справа – логическое выражение:
1)c:=false;
2)a:=(y>=x) and (z<>0);
3)b:=a or c and not(x>=100);
Символьный тип данных
Этот тип данных, обозначаемый ключевым словом char, служит для представления любого символа из набора допустимых символов. Под каждый символ отводится 1 байт.
К символам можно применять операции отношения (<, <=, >, >=, =, <>), при этом сравниваются коды символов. Меньшим окажется символ, код
8
которого меньше. Других операций с символами нет. Стандартных функций для работы с символами тоже немного. Они будут рассмотрены ниже.
Функции, связывающие различные типы данных
В табл. 2 приводится список стандартных функций, обеспечивающих связь между различными типами данных. Из простых типов к порядковым относят все, кроме вещественных (целые, символьный, логический). Все возможные значения порядкового типа представляют собой ограниченное упорядоченное множество.
Табл. 2. Стандартные функции для связи различных типов данных
Обращение |
Тип аргумента |
Тип результата |
Действие |
ord(x) |
любой порядковый |
целый |
Порядковый номер значения |
|
|
|
x в его типе. |
pred(x) |
любой порядковый |
тот же, что для x |
Предыдущее к x значение в |
|
|
|
его типе. |
succ(x) |
любой порядковый |
тот же, что для x |
Следующее к x значение в |
|
|
|
его типе. |
low(x) |
любой порядковый |
тот же, что для x |
Наименьшее значения |
|
|
|
величин данного типа. |
high(x) |
любой порядковый |
тот же, что для x |
Наибольшее значения |
|
|
|
величин данного типа. |
chr(x) |
целый |
char |
Символ с порядковым |
|
|
|
номером x. |
odd(x) |
целый |
boolean |
True, если x – нечетное; |
|
|
|
False, если x – четное. |
Функция ord, применяемая к целому числу, дает его собственное значение. Например, ord(-8)=-8, ord(254)=254.
Если аргумент целый, то, например, оператор y:=pred(x)
эквивалентен y:=x-1, а y:=succ(x) эквивалентен y:=x+1.
Для символьного типа аргумента эти функции дают, соответственно,
предыдущий и следующий символ в таблице внутренней кодировки.
Поскольку латинский алфавит всегда упорядочен по кодам, т.е. ord('a')<ord('b')<…<ord('z'), то, например, pred('b')='a', succ('b')='c'. То же относится и к цифровым литерам: pred('6')='5', succ('3')='4'.
9
Функция chr является обратной к функции ord(x), если x –
символьная величина. Например, для кода ASCII справедливо:
ord('a')=97
chr(97)='a'
Эту «взаимообратность» можно выразить формулой: chr(ord(x))=x,
где x – символьная величина.
В некоторых случаях возникает задача преобразования символьного представления числа в числовой тип. Например, нужно получить из литеры
'5' целое число 5. Делается это следующим образом:
N:=ord('5')-ord('0'),
где N – целая переменная. Здесь использован тот факт, что код литеры
'5' на пять единиц больше кода '0'.
Булевский тип также является порядковым. Порядок расположения двух его значений таков: false, true. Отсюда справедливы следующие отношения:
ord(false)=0, succ(false)=true, ord(true)=1, pred(true)=false.
Задания к работе
Задания №1, №2, №3 выполняются на доске, а задание №4 – на компьютере.
Задание №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) t and (P |
mod |
3 = 0) при t=true, P=10101; |
5) (x*y<>0) |
and |
(y>x) при x=2, y=1; |
10
6) a or (not b) при a=false, b=true.
Задание №2. Если a=true и x=1, то какое значение получит логическая переменная d после выполнения оператора присваивания?
1)d:=x<2;
2)d:=not a or odd(x);
3)d:=ord(a)<>x;
Задание №3. Написать оператор присваивания, в результате выполнения которого логическая переменная t получит значение true,
если выполняется указанное условие, и значение false в противном случае:
1)Из чисел x, y и z только два равны между собой.
2)x – положительно число;
3)Каждое из чисел x, y, z положительно.
4)Только одно из чисел x, y, z положительно.
5)p делится нацело на q.
6)Цифра 9 входит в десятичную запись трехзначного целого числа k.
Пример выполнения задания №3.
Рассмотрим следующее условие. Пусть для некоторого целого числа x
должны быть одновременно выполнены два требования: число больше 95 и
остаток от деления данного числа на 3 равен 1.
Пусть числу x соответствует некоторая переменная x типа integer.
Требование о том, что число должно быть больше 95, запишется следующим образом:
x>95
Требование о том, что остаток от деления данного числа на 3 должен быть равен 1, следует записать так:
x mod 3 = 1
Т.к. для числа должны быть одновременно выполнены два требования,
то воспользуемся логической операцией and и запишем необходимый оператор присваивания: