8. Совместимость типов
Необходимым условием корректного вычисления выражений или выполнения операторов присваивания является совместимость типов входящих в них компонент.
Суть совместимости типов удобнее пояснить на примере простейших выражений, которые состоят из одного (для одноместных операций) или двух (для двухместных операций) компонент (операндов) и одной операции.
8.1. Совместимость по вычислению
Вычисление выражений возможно только при соблюдении следующих условий.
Типы операций и операндов эквивалентны.
Например, нельзя применять арифметические операции к логическим переменным и, наоборот, логические операции – к арифметическим переменным:
Type
R1, R2 : Real;
L1, L2 : Integer;
B1, B2: boolean;
...
Not (R1 + R2) B1 + B2 'Иванов' + ' ' + 'Петр' {недопустимые выражения}
Типы операндов эквивалентны.
Типы операндов целые или вещественные, например:
R1 + R2 L1 + R2 L2 / R1 / L1 {допустимые выражения}
Один тип является базовым, а второй – ограниченным типом этого же базового типа.
Type
L11, L12 : Integer;
K : -199 .. 199;
Типы являются множествами, причем их базовые типы совместимы.
Type
L : set of 21 .. 2141;
K : set of -199 .. 199;
Один тип является строковым, а другой – также строковым либо символьным.
Type
L : String [34]; Q : String [23]; K: Char;
Один тип является ссылочным, а другой – также ссылочным либо безтиповым указателем.
Оба типа являются упакованными символьными массивами с одинаковым числом элементов.
Один тип является строковым, а другой – также строковым типом, либо упакованным символьным массивом, либо символьным типом.
Один имеет тип Variant, а другой – тип integer, real, string, character или Boolean.
Оба типа операндов являются процедурными типами с одинаковым количеством параметров и идентичными порядковыми типами этих параметров. Для функций должны быть идентичны и типы результата.
8.2. Совместимость по присваиванию
Оператор присваивания считается корректным, если тип переменной, расположенной в его левой части, совместим с типом выражения, располо-женного в правой части. Выражение T2 может быть присвоено переменной T1, если будут соблюдены следующие условия.
Оба типа T1 и Т2 идентичны. Недопустимо присваивание файловых типов или структур, содержащих файловые типы (о файловых типах подробнее см. гл. 17).
T1 и Т2 имеют совместимые простые типы.
T1 и Т2 имеют вещественные типы.
T1 и Т2 имеют целые типы.
T1 и Т2 имеет тип PChar или другой строковый тип, и выражение представляет строковую константу.
T1 и Т2 имеют строковые типы.
T1 имеет строковый тип, а Т2 – символ или упакованная строка.
T1 – длинная строка, а Т2 имеет тип PChar.
T1 и Т2 имеют совместимые типы упакованных строк.
.T1 и Т2 имеют совместимые множественные типы.
.T1 и Т2 имеют совместимые Pointer-типы.
.T1 имеет тип PChar или PWideChar, а T2 есть символьный массив вида array[0 .. n] of Char.
.T1 и T2 имеют совместимые процедурные типы.
.T1 имеет тип Variant, а T2 – один из типов integer, real, string, character или Boolean.
.T1 имеет тип integer, real, string, character или Boolean, а Т2 – тип Variant.
9. Выражения
Вычислительная система выполняет вычислительные и управляющие операции по командам, которые представлены в программе с помощью операторов. Большинство таких операторов строится с использованием выражений, которые в практике программирования играют большую роль, определяя способ и порядок преобразования данных. Выражения состоят из операндов (значений, констант, переменных, функций), соединенных с помощью операций. Для изменения порядка выполнения операций могут быть использованы круглые скобки. Наиболее важную роль играют арифметические, логические и строковые выражения.
9.1. Арифметические выражения
При описании арифметических выражений для простоты типом Integer обозначен любой целый тип, а типом Real – любой вещественный тип. Выражение строится с помощью арифметических значений, констант, переменных, функций, арифметических операций. В выражениях можно применять круглые открывающие и закрывающие скобки. При этом количество открывающих скобок должно быть равно количеству закрывающих скобок.
При вычислении выражения операции выполняются в строго определенной последовательности в соответствии с их приоритетом. Порядок выполнения операций можно изменить применением блоков, включающих подвыражения, заключенные в круглые скобки.
В языке Object Pascal существует шесть арифметических операций. Учитывая, что арифметические операции образуют подмножество множества всех операций языка, в табл. 7 показано абсолютное значение приоритета каждой операции.
Таблица 7
Операция | Наименование | Приоритет |
+ - * / div mod | Сложение Вычитание Умножение Деление Деление нацело Остаток от деления | 2 2 1 1 1 1 |
При вычислении выражения его тип определяется типами операндов. Операндом называется любая компонента, к которой применяется операция. Операндом может быть, например, значение, константа, переменная или выражение, заключенное в скобки. Типы элементарных выражений показаны в табл. 8.
Таблица 8
Операция | Тип операндов | Тип результата | Пример |
+ – * / div mod | Integer, real Integer, real Integer, real Integer, real Integer Integer | integer, real integer, real integer, real real integer integer | X + Y Result - 1 P * InterestRate X / 2 Total div UnitSize Y mod 6 |
Примеры:
4*5 = 20, 6/5 = 1.2, 8+7 = 15, 7-3 = 4, 16 div 5 = 3, 16 mod 5 = 2.
Порядок выполнения операций определяется приоритетом операций и расположением внутренних выражений, заключенных в круглые скобки. Все операции в арифметическом выражении выполняются слева направо.
Пример:
Выражение: | 15 * ((25/5-5*9 + (j-8) * 7.55) / 8.67) |
Порядок выполнения операций: | 8 2 5 3 6 1 4 7 |
9.2. Логические выражения
Результатом вычисления логического выражения может быть одно из двух логических значений: True (истина ) или False (ложь).
Логическое выражение строится с помощью других выражений, (арифметических, строковых и др.), значений, констант, переменных, функций, логических операций и логических отношений.
В языке существует четыре логических операций. Приоритет операций показан в табл. 9.
Таблица 9
Операция | Наименование | Приоритет |
Not And Or Xor | Отрицание Конъюнкция Дизъюнкция Спец. дизъюнкция | 3 4 5 6 |
Значения элементарных логических выражений, поясняющих назначение этих операций, приведены в табл. 10.
Таблица 10
A | B | not A | A and B | A or B | A xor B |
True True False False | True False True False | False False True True | True False False False | True True True False | False True True False |
В табл. 11 представлены логические отношения.
Таблица 11
Отношение | Наименование |
> < >= <= = <> | Больше Меньше Больше или равно Меньше или равно Равно Не равно |
Все отношения равноприоритетны.
Порядок выполнения операций при вычислении логического выражения следующий:
сначала вычисляются арифметические выражения;
затем – отношения;
в последнюю очередь вычисляются логические операции.
Примеры (для x=12, z = 0, y=1):
Таблица 12
Выражение | Результат |
5 > 8 (5 < 3) and (z = 0) ((4 + 8) < 0) or not (y = 0) not ((x < y) and (z > y)) ('ab' = 'ac') and (x=z) (4 in [ 2 .. 23 ]) | True False True True False True |
Пример, демонстрирующий порядок выполнения операций при вычислении логического выражения:
Выражение: | Not ((x > 6 + 8 * 2) and (y < 7) or (z > 7)) and (x <> y) |
Порядок: | 9 3 2 1 6 4 7 5 10 8 |
9.3. Строковые выражения
Строковые выражения, частными случаями которых могут быть пустой символ '' или одиночный символ (например 'A'), строятся из строковых или символьных значений, констант, переменных и строковых функций при помощи строковой операции конкатенации (присоединения). Эта операция обозначена символом + (плюс). Скобки в строковых выражениях не применяются.
Пример:
Выражение: | 'Object '+'Pascal '+' для Delphi' |
Результат: | 'Object Pascal для Delphi' |
10. Операторы
Оператор – языковая конструкция, представляющая описание команды или комплекса команд по обработке и преобразованию данных.
Все операторы делятся на две части – простые операторы и структурные операторы.
11. Простые операторы
К их числу относятся: оператор присваивания, оператор безусловного перехода, составной оператор, оператор процедур, специальные операторы.
11.1. Оператор присваивания
В параграфе 1.4 было дано краткое определение этого оператора – одного самых простых и наиболее часто используемых операторов. Напомним, что его синтаксис имеет вид
x := y;
где x – имя переменной или функции; y – совместимое по типу выражение (о совместимости типов см. гл. 8). Символы ":=" обозначают операцию присваивания, в соответствии с которой вычисленное значение выражения y присваивается переменной x.
Примеры операторов присваивания (комментарии показывают присвоенные значения):
Var
Ch: Char;
S: String[5];
Q: String[18];
L, J: Integer;
P: Byte;
R: Real;
B: Boolean;
Rec: Record
A: Word;
B: String[20];
End;
…
Таблица 13
Оператор присваивания | Значение |
Q:= 'd:\Dir1\Word\a.txt'; S:= Q; Q:= S+'r\'; Ch:=Q[2]; L:= 450; P:= L; J:= 100; R:= -L / J; J:=-L / J; J:=-L - 200; B:= J > L; B:= (J < L) and (Q[5] = 'i'); Rec.A:= J-20; Rec.B:= 20; Rec.B:= S[1]+S[3]+'\d'; | 'd:\Dir1\Word\a.txt' 'd:\Di' 'd:\Dir\' ':' 450 Ошибка, т. к. max P = 255 100 -4.5 Ошибка. Несоответствие типов 250 False True 230 Ошибка. Несоответствие типов 'd\\d' |
... в среде Delphi). Задачи использовались как с данного сайта, так и из других источников – книг и семинарских занятиях по информатике в МГОУ. Курс завершается разработкой игры. Программное обеспечение: свободно распространяемая версия объектно-ориентированной среды программирования Delphi. Методы обучения: метод проектов, лекции, проблемный метод, частично-поисковый метод. Контроль знаний и умений ...
... // ... if(condition1) { j = 4; goto label1; } // ... for(j = 0; j < 10; j++) { // ... label1: // ... if(condition2) { i = 6; goto label2; } } // ... label2: // ... } 2.2 Разработка программы В среде программирования Borland Delphi создадим новое приложение (пункт меню File New Application). ...
... так называемые указатели. Указатель - это переменная, которая в качестве своего значения содержит адрес байта памяти. С помощью указателей можно размещать в динамической памяти любой из известных в Object Pascal типов данных. Лишь некоторые из них (Byte, Char, ShortInt, Boolean) занимают во внутреннем представлении один байт, остальные - несколько смежных. Поэтому на самом деле указатель адресует ...
... групп нулей и единиц. Каждая группа отделяется друг от друга одним или несколькими пробелами. Найти и вывести на экран группы с четным количеством символов. Лабораторная работа №6 Программирование АЛГОРИТМОВ с использованием записей Цель лабораторной работы: создать приложение, в котором используются данные типа запись. 6.1.Пример создания приложения Задание: создать Windows-приложение для ...
0 комментариев