
- •Внимание! Серым цветом выделен необязательный материал! Глава «Введение» - также для общего развития.
- •Курс лекций по программированию на языке Pascal Содержание курса
- •Введение
- •Программное управление компьютером
- •Этапы разработки программного обеспечения. Языки программирования.
- •Языки программирования
- •Трансляция
- •Алгоритмы и структурное программирование
- •Основные структуры алгоритмов. Понятие о структурном подходе к разработке алгоритмов
- •Методы разработки программного обеспечения
- •Структуры данных
- •Сортировка
- •Стратегии распределения памяти
- •Объектно-ориентированное программирование
- •Базовые элементы языка тurbo рascal
- •Алфавит
- •Константы и переменные
- •Выражения и операции
- •Структура программы
- •Типы данных языка тр
- •Простые типы
- •Целые типы
- •Логический тип
- •Символьный тип
- •Перечисляемый тип
- •Вещественный тип
- •Математические функции
- •Математические процедуры
- •Структурированные типы
- •Массивы
- •Множества
- •Процедуры преобразования
- •Совместимость и преобразование типов
- •Управляюшие структуры языка turbo pascal Операторы
- •Простой и составной оператор
- •Условный оператор
- •Оператор множественного выбора
- •Оператор цикла "пока" (с предусловием)
- •Оператор цикла "до" (с постусловием)
- •Оператор цикла с параметром (цикл по счетчику)
- •Оператор безусловного перехода
- •Процедуры и функции
- •Особенности функций
Выражения и операции
Переменные и константы всех типов используются в выражениях. Выражение задает порядок выполнения действий над элементами данных и состоит из операндов (константы, переменные, обращения к функциям), знаков операций и круглых скобок. Операции определяют действия, которые надо выполнить над операндами. В примере (X + Y - 10)*4 X,Y,10,4 – операнды, "+", "-", "*" – знаки операций сложения, вычитания и умножения. Круглые скобки ставятся для управления порядком выполнения операций. Частным случаем выражения может быть одиночный элемент (константа, переменная или обращение к функции).
Операции в языке ТР подразделяются на арифметические, логические (булевские), отношения, строковые, операции с массивами и др. в зависимости от того какого типа операнды в них используются.
Операции могут быть унарные и бинарные. В первом случае операция относится к одному операнду и всегда записывается перед ним, во втором случае операция выражает отношение между двумя операндами и записывается между ними. Унарными операциями являются not (отрицание), @ (создание указателя на переменную), “+” (сохранение знака), “-“ (отрицание знака) (например, -Х, not Y). Последние две операции могут быть и бинарными (X + Y).
Рассмотрим три основных типа операций. Особенности остальных будут описаны при рассмотрении соответствующих типов данных.
Арифметические операции выполняют арифметические действия над значениями операндов целочисленных и вещественных типов.
Операции сложения “+”, вычитания “-“, умножения “*”, деления “/” выполняются как в обычных арифметических действиях. Для операций “+”, “-“, “*”, если операндами являются целые числа (типы Byte, ShortInt, Word, Integer, LongInt), то результат будет относится к целому типу, наименьшему, включающему типы операндов (общий тип). Т.е. X : Byte, Y : Word, Z := X + Y, Z : Word. Для тех же операций, если операнды – вещественные, то результат – Extended (при установленном сопроцессоре, если его нет – то Real). Аналогично, если один из операндов – целое число, а другой – вещественное. Операция деления “/” дает в результате тип Extended как при целых, так и вещественных операндах.
Целочисленное деление div отличается от обычного деления тем, что возвращает целую часть частного, а дробная часть отбрасывается. Оба операнда – целые, результат – общий тип. Примеры, 11 div 5 – результат 2, 2 div 3 – 0.
Деление по модулю mod восстанавливает остаток, полученный при выполнении целочисленного деления. Типы операндов такие же, как у div. Примеры, 11 mod 5 – 1, 2 mod 3 – 2.
Операции сдвига K shl N и K shr N оперируют с двоичным (битовым) представлением целых чисел. Они восстанавливают в качестве результата значение, полученное путем сдвига на N позиций влево или вправо числа К, представленного в двоичном виде. Оперируют с целыми числами, тип результата – общий тип. Например, 2 shl 7. (2)10 = (10)2. Сдвиг влево на 7 позиций приводит к (100000000)2 (освободившиеся младшие разряда заполняются нулями), что равно (256)10. Аналогично, 161 shr 2 дает 40. ((161)10 = 10100001, сдвиг на 2 вправо – (101000)2 = 8 + 32 = (40)10. Биты, которые уходят за край разрядности теряются).
Возможность работы с двоичным представлением чисел (так работают кроме рассмотренных операций shl и shr, также и логические операции) часто возникает при работе с видеопамятью в текстовом или графическом режимах. Кроме того, есть ряд число математических задач, которые удобно решать в двоичном представлении.
К логическим операциям относятся and – логическое И, or – логическое ИЛИ, not – логическое отрицание, xor – исключительное ИЛИ. Они применяются к операндам как логического типа, так и целого типа. Логические операнды (логическая константа, логическая переменная, элемент массива логического типа,...) могут принимать значения True или False. Логические операции над логическими данными дают результат логического типа по следующим правилам (табл.)
Операнд 1 |
Операнд 2 |
and |
or |
xor |
not |
False |
False |
False |
False |
False |
- |
True |
False |
False |
True |
True |
- |
False |
True |
False |
True |
True |
- |
True |
True |
True |
True |
False |
- |
True |
- |
- |
- |
- |
False |
False |
- |
- |
- |
- |
True |
Если операндами являются целые числа, то оперирование происходит с двоичным представлением чисел. При этом результат – общий тип. При использовании этих операций осуществляется побитное (поразрядное) сравнение операндов. Двоичные цифры результата образуются по следующим правилам (табл.)
Операнд 1 |
Операнд 2 |
and |
or |
xor |
not |
0 |
0 |
0 |
0 |
0 |
- |
1 |
0 |
0 |
1 |
1 |
- |
0 |
1 |
0 |
1 |
1 |
- |
1 |
1 |
1 |
1 |
0 |
- |
1 |
- |
- |
- |
- |
0 |
0 |
- |
- |
- |
- |
1 |
Например, 12 or 22 соответствует сравнению, соответственно, 01100 и 10110. В соответствии с правилами получаем 11110, что соответствует (30)10. Т.е. 12 or 22 = 30.
Некоторая особенность появляется при работе с типами целых чисел, которые могут принимать отрицательные значения. К таким типам относятся ShortInt (-128..127) – 8 бит, Integer (-32768..32767) – 16 бит, LongInt (-2 147 483 648..2 147 483 647) – 32 бита. У этих типов старший разряд отводится под знак (0 – при положительном, 1 – при отрицательном). Для остальных разрядов, если число положительное, то кодировка осуществляется обычным образом (если Х = 12 и Х:ShortInt, то (Х)2 = 0 0001100). Если число отрицательное, то в остальных разрядах записывается число, которое в сумме с исходным дает модуль максимально допустимого значения для данного типа. Т.е., если X = -12, Х:ShortInt, модуль максимально допустимого значения для данного типа – 128, 116 + 12 = 128, поэтому (Х)2 = 1 1110100 – последние 7 цифр образуют число 116.
Учитывая это обстоятельство, рассмотрим применение операции not к переменной, которая имеет определенное значение (Х = 5), но описывается с помощью разных типов.
Х:Byte, (X)2 = 00000101, not X = (11111010)2 = (250)10.
X:ShortInt, (X)2 = 0 0000101, not X = (1 1111010)2 = - (128-122)10 = -(6)10.
Операции отношения выполняют сравнение двух операндов и определяют, истинно значение выражения или ложно. Сравниваемые величины должны быть совместимыми (совместимость типов – далее). Результат всегда имеет логический (булевский) тип и принимает одно из двух значений: True или False.
Операция |
Название |
Выражение |
Результата |
= |
Равно |
А = В |
True, если А равно В |
<> |
Не равно |
A <> B |
True, если А не равно В |
> |
Больше |
А > B |
True, если А больше В |
< |
Меньше |
А < B |
True, если А меньше В |
>= |
Больше или равно |
А >= В |
True, если А больше или равно В |
<= |
Меньше или равно |
А <= B |
True, если А меньше или равно В |
in |
Принадлежность |
А in M |
True, если А находится в списке М |
Операции отношения, а также логические операции интенсивно используются для управления циклами и в условных операторах.
Приоритет операций.
Первый (высший) приоритет имеют унарные операции @, not.
Следующий (второй) приоритет у операций типа умножения *, /, div, mod, and, shl, shr.
Третий приоритет имеют операции типа сложения +, -, or, xor.
Четвертый (низший) приоритет - у операций отношения =, <>, <, >, <=, >=, in.
Имеются три основных правила для определения старшинства операций:
операнд, находящийся между двумя операциями с различными приоритетами, связывается с операцией, имеющей более высокий приоритет;
операнд, находящийся между двумя операциями с равными приоритетами, связывается с операцией, которая находится слева;
выражение, заключенной в скобки, перед выполнением вычисляется, как отдельный операнд;
Обобщение последних двух правил дает следующее: операции с равным приоритетом производятся слева направо с возможным регулированием порядка выполнения скобками.