- •Контрольные вопросы экзамену
- •2 Семестр
- •Группы символов языка Паскаль.
- •Структура языка Паскаль.
- •Понятие лексемы языка, категории лексем.
- •Зарезервированных слова в языке Паскаль.
- •Понятие идентификатора, допустимая длина идентификаторов, разновидности идентификаторов, стандартные идентификаторы.
- •Формы записи чисел в языке паскаль.
- •Использование комментариев.
- •Символы используемые в качестве разделителей лексем.
- •Разделы описаний и объявлений языка Паскаль.
- •Раздел операторов.
- •Виды констант.
- •Стандартные типы языка паскаль.
- •Интервальный и перечисляемый типы данных.
- •Порядковые типы и их свойства.
- •Совместимость типов данных.
- •Выражения и их использование.
- •Операции и операнды, приоритет и классификация операций.
- •Синтаксис выражений
- •Операции
- •Арифметические операции
- •Унарные арифметические операции
- •Логические операции
- •Булевские операции
- •Операция со строками
- •Операции над символьными указателями
- •Операции над множествами
- •Операции отношения
- •Сравнение простых типов
- •Сравнение строк
- •Сравнение упакованных строк
- •Сравнение указателей
- •Сравнение символьных указателей
- •Сравнение множеств
- •Проверка на принадлежность к множеству
- •Операция @
- •Использование операции @ для переменной
- •Использование операции @ для процедуры или функции или метода
- •Стандартные функции языка Паскаль. Арифметические функции
- •Функции преобразования типов
- •Функции для величорядкового типа
- •Функция ord
- •Функция chr
- •Функции succ и pred
- •3 Семестр
Логические операции
Типы логических операций показаны в Таблице 6.4.
Логические операции Таблица 6.4
-----------T---------------------T--------------T--------------¦
Операция ¦ Действие ¦Типы операндов¦ Тип результата¦
+----------+---------------------+--------------+---------------+
¦ not ¦ Отрицание (битовое) ¦ Целый ¦ Целый ¦
¦ and ¦ И (битовое) ¦ Целый ¦ Целый ¦
¦ or ¦ ИЛИ (битовое) ¦ Целый ¦ Целый ¦
¦ xor ¦ Исключающее ИЛИ ¦ Целый ¦ Целый ¦
¦ ¦ (битовое) ¦ ¦ ¦
¦ shl ¦ Сдвиг влево ¦ Целый ¦ Целый ¦
¦ shr ¦ Сдвиг вправо ¦ Целый ¦ Целый ¦
L----------+---------------------+--------------+----------------
Примечание: Операция not является унарной операцией.
Если операндом операции not является операнд целого типа, то результат будет также целого типа.
Если оба операнда в операциях or, and или xor целого типа, то тип результата будет таким же, как тип обоих операндов.
Операции i shl j и i shr j сдвигают значение i влево или вправо на j битов. Тип результата будет таким же, как тип i.
Булевские операции
Типы операндов и результат для булевских операций показаны в Таблице 6.5.
Таблица 6.5 Булевские операции
-----------T------------------T-----------------T--------------¦
Операция ¦ Действие ¦ Типы операндов ¦ Тип результата¦
+----------+------------------+-----------------+---------------+
¦ not ¦ Отрицание ¦ Булевский ¦ Булевский ¦
¦ and ¦ Логическое И ¦ Булевский ¦ Булевский ¦
¦ or ¦ Логическое ИЛИ ¦ Булевский ¦ Булевский ¦
¦ xor ¦ Логическое ¦ ¦ ¦
¦ ¦ исключающее ИЛИ ¦ Булевский ¦ Булевский ¦
L----------+------------------+-----------------+----------------
Примечание: Операция not является унарной операцией.
Результаты этих операций соответствуют обычной булевой логике. Например, выражение a and b является истинным (принимает значение Тruе) только в том случае, если оба операнда a и b имеют истинное значение (Тruе).
В Borland Pascal поддерживаются две различные модели генерации кода для операций or и and - полное вычисление и вычисление по короткой схеме (частичное вычисление).
При полном вычислении подразумевается, что каждый операнд булевского выражения, построенный с помощью операций or и and, всегда будет вычисляться, даже если результат всего выражения уже известен. Эта модель полезна в том случае, когда один или более операндов в выражении представляют собой функции с побочными эффектами, которые изменяют смысл программы.
Вычисление по короткой схеме обеспечивает строгое вычисление слева направо. Это вычисление прекращается, как только результат всего выражения становится очевиден. Во многих случаях эта модель удобна, поскольку она обеспечивает минимальное время выполнения и, как правило, минимальный объем кода. Вычисление по короткой схеме делает также возможными такие конструкции, которые в противном случае были бы недопустимы, например:
while (I<=Lenght(S)) and (S[I]<>' ') do
Inc(I);
while (P<>nil) and (P^.Value<>5) do
P:=P^.Next;
В обоих случаях, если результатом первого вычисления будет значение False, вычисление второго выражения не выполняется.
Схему вычисления можно задавать с помощью директивы компилятора $B. Значением по умолчанию является состояние {$B-} (пока оно не будет изменено с помощью "меню" возможностей компилятора). В этом случае генерируется код с вычислением по короткой схеме. В случае директивы {$B+} генерируется код с полным вычислением.
Поскольку в стандартном Паскале не определяется, какую схему следует использовать для вычисления булевских выражений, то программы, зависящие от действия какой-либо конкретной схемы, в действительности не являются переносимыми. Однако, если пожертвовать переносимостью, то очень часто можно получить значительный выигрыш во времени выполнения и простоте, которую позволяет получить вычисление по короткой схеме.