
- •Лекция 1
- •Лексемы
- •Идентификатор
- •Ключевые (служебные) слова
- •Константы
- •Знаки операций
- •Логические операции
- •Разделители
- •Комментарий
- •Константы и переменные
- •Классификация типов данных
- •Целые типы данных
- •Вещественные типы
- •Лекция2. Символьный тип данных
- •Логический тип
- •Перечислимый тип данных
- •Порядковые и неизвестные типы
- •Порядковые типы данных
- •1 Целые типы
- •Лекция 3
- •2 Символьный тип char
- •3 Логический тип данных boolean
- •4 Перечислимый тип
- •Вещественные типы
- •Ограниченные (интервальные) типы
- •Структура программы
- •Заголовок программы
- •Раздел операторов
- •Заголовок программы
- •Раздел описания
- •Описание меток
- •Лекция 4 Описоние констант. Раздел констант.
- •Раздел описания типов
- •Раздел описания переменных
- •Раздел операторов
- •Пример программ на языке Турбо Паскаль
- •Программа решения примера имеет вид
- •Стиль программирования
- •Основные операторы языка Турбо Паскаль
- •Оператор присваивания
- •Выражения в языке Турбо Паскаль
- •Например, в выражении
- •В качестве операндов можно брать на первом шаге, например
- •Лекция 5
- •Стандартные функции языка Турбо Паскаль
- •Тригонометрические функции
- •Алгебраические функции
Логический тип
Логический тип Boolean имеет два возможных значения - «истина» (True) и «ложь» (False).
Эти значения считаются упорядоченными так что False < True.
Под значение логических переменных (или констант) отводится 1 байт памяти.
При работе с переменными логического типа используются логические операции.
Логическое отрицание NOT
Логическое И AND
Логическое ИЛИ OR
исключающее ИЛИ XOR
Рассмотрим таблицу истинности этих операций:
Логическое отрицание NOT A
A NOT A
FALSE TRUE
TRUE FALSE
Значение NOT A истинно (TRUE) тогда и только тогда, когда А - ложно (FALSE)
и NOT имеет значение FALSE (ложь), когда А имеет значение TRUE (истина).
Логическое И A AND B
A |
B |
A AND B |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
TRUE |
Значение A AND B принимает значение TRUE (истина) тогда и только тогда, когда истины оба операнда (т.е. и А и В имеют значение TRUE), во всех остальных случаях A AND B принимает значение FALSE (ложь).
Логическое ИЛИ A OR B
A |
B |
A OR B |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
TRUE |
TRUE |
TRUE |
Значение A OR B принимает значение FALSE (ложь) тогда и только тогда, когда ложны оба операнда (т.е. и А и В имеют значение FALSE), во всех остальных случаях A OR B принимает значение TRUE (истина).
Исключающее ИЛИ A XOR B
A |
B |
A OR B |
FALSE |
FALSE |
FALSE |
FALSE |
TRUE |
TRUE |
TRUE |
FALSE |
TRUE |
TRUE |
TRUE |
FALSE |
Значение A XOR B принимает значение TRUE (истина) тогда и только тогда, когда его операнды имеют разные значения, и значение FALSE (ложь),тогда когда его операнды имеют одинаковое значение.
Логические операции используются в логических выражениях. Логические операции могут включать в себя переменные логического типа, операции отношения и логические операции. Например (Х>=0) AND (X<=1).
Перечислимый тип данных
Перечислимый или перечисляемый тип данных - это тип данных задаваемый пользователем.
Перечислимые типы определяют упорядоченные наборы значений. Эти наборы задаются перечислением идентификаторов, которые обозначают эти значения. Например, запись
type
week = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
определяют перечислимый тип week как последовательность идентификаторов - Sunday, Monday, Tuesday и т.д..
Идентификаторы при определении типа задаются о правилам определения идентификаторов, в списке разделяются запятой и не заключаются в апострофы.
Они не являются строковыми или какими-то другими константами, а представляют собой константы соответствующего перечислимого типа.
Порядок констант (значений) перечислимого типа определяется последовательностью, в которой перечисляются идентификаторы при определении типа.
Первая перечисленная константа в списке имеет порядковый номер 0, следующая 1, затем 2 и т.д..
Результатом применения функции ord к значению перечислимого типа (переменной или константе перечислимого типа) является порядковый номер этого значения в списке констант в определении типа.
Например, для перечислимого типа week
ord (sunday) = 0
ord (monday) = 1
..................................
ord (friday) = 5 и т.д.
Два значения одного и того же перечислимого типа можно сравнивать посредством отношений <, >, <=, >=, =, <>.
При сравнении перечислимых значений сравниваются их порядковые номера.
Справедливы, например, такие отношения
sunday < monday < tuesday < wednesday < thurday < friday < saturday
и
sunday<=saturday
Значения, относящиеся к разным перечислимым типам, сравнивать между собой нельзя, т.к. это разные данные и никакое сравнение невозможно.
Компилятор языка Турбо Паскаль при этом выдает сообщение об ошибке
«type nusmatch - несоответствие типов».
Кроме того для перечислимого типа могут быть использованы функции Pred и Suce.
Функция Pred (предыдущий) возвращает значение, предшествующее ее аргументу. Например
Pred ( saturday ) = friday
Pred ( fridey ) = thirsday
Pred ( thirsday ) = wednesday
Pred ( wednesday ) = tuesday
Pred ( tuesday ) = monday
Pred ( monday ) = sunday
Функция Pred для значения sunday не определена так как значение sunday стоит первым в списке определения типа и не имеет предшествующего значения.
Функция Suce (следуюдщий) возращает значение, следующее за её аргументом.
Например:
Suce(Sundey) = monday
Suce(monday) = tuesday
Suce(tuesday) = wednesday
Suce(wednesday) = thirsday
Suce(thirsday) = friday
Suce(friday) = saturday
Значение функции Suce для значения saturday не определено, т.к. значение saturday стоит последним в списке определения типа и не имеет следующего значения.
Значение переменной перечислимого типа иожно задать только в операторе присваивания спомощю константы соответствующего типа или другой переменной этого же типа с уже известным значением, возможно с использованием функций Pred и Suce.
Например
Type
week = (sundey, mondey, tuesday, wednesday, thirsday. Friday, saturday );
Var
d1,d2,d3,d4 : week;
.................................
d1:= tuesday;
d2:= d1;
d3:= pred(d1);
d4:= suce(d2);
Здесь переменные d1 и d2 будут иметь значения tuesday, переменная d3 -значение monday, а d4 - значение ednesday.
Использовать в одном операторе присваивания переменные и/или константы разных перечислимых типов запрещено, т.к. система Турбо Паскаль не знает что делать с несопоставимыми данными.
При этом компилятор Турбо Паскаль выдаст сообщение
type mismatch - несоответствие типов.
Пример запрещенного использования переменных и констант перечислимых типов
type
week =(sunday, monday, tuesday, wednesday, thirsday, friday, saturday);
rainbow =(red, orauge, yellow, green, blue, indigo, violet);
Var
d,d1:week;
c, c1:rainbow;
c:=blue;
d:=succ(c);
d1:=violet;
c1:=pred(friday);
Здесь первый оператор присваивания является верным, т.к. в нем переменной с типа rainbow присваивается константа blue, также типа rainbow.
Во втором операторе присваивания переменной d типа week, присваивается следующее значение для переменной с типа rainbow, что является ошибкой (несоответствие типов).
В третьем операторе присваивания переменной d1 типа week, присваивается следующее значение константы violet типа rainbow, опять ошибка (несоответствие типов).
В
четвертом операторе присваивания
переменной c1
типа
rainbow,
присваивается значение предшествующее
константе friday
перечислимого
типа week
несоответствие
типов.
В трех последних рассмотренных случаях компилятор выдает сообщение о несоответствии типов и дальнейшая работа с программой будет возможна лишь при устранении всех этих ошибок.
Значение переменных любого перечислимого типа нельзя вводить с клавиатуры и выводить на экран дисплея.
Причина такого ограничения заключается в следующем: в памяти компьютера значения перечислимого типа представляются только набором правил, по которым они могут использоваться, и порядковым номером в списке определения типа. А для компилятора системы Турбо Паскаль нет никакой возможности установить соответствие между порядковым номером и рассматриваемой перечислимой константой. Компилятор просто не знает, каким образом задал программист соответствующую константу.
Например, компилятор не знает какая константа в типе week имеет порядковый номер 2
tuesday или wtornik.
Программист мог задавать и так и так при этом выполнение программы никак не изменилось бы.
Именно по этой причине, т.к. для компилятора нет никакого соответствия между константой и ее порядковым номером, не существует возможности отображения значения перечисленного типа на экране дисплея, при выводе на экран. Так же, не существует возможности контроля и правильной интерпретации вводимых значений перечисляемого типа.
Поэтому в языке (системе) Турбо Паскаль запрещен ввод с клавиатуры и вывод на экран значений перечисляемого типа. Данные перечисляемого типа можно использовать только в операторах присваивания и в различных условиях при определении хода выполняемых программ.
Поэтому, т.к. данные перечислимого типа нельзя вводить и выводить, и т.к. значения (и порядок следования) задается самим программистом и часто не несет никакой смысловой нагрузки, то перечислимый тип сложно использовать в программе.
По тексту программы нельзя сразу определить, что это переменная, константа и как ее можно (и нужно) использовать и т.д.
Поэтому при программировании перечислимый тип не используется, а соответствующие ему значения задаются либо числовыми, либо строковыми константами (значениями).
Например, целая переменная N -номер дня недели, может принимать значение от 0 до 7.
Или строковая переменная day - название дня недели, может принимать значения ‘sunday’, ‘monday’, ‘tuesday’, ‘wednesday’, ‘thirsday’, ‘friday’, ‘saturday’, где соответствующие значения уже являются строковыми константами.