Лекция 01. Тема Общая характеристика языков программирования высокого уровня
Download 4,1 Mb. Pdf ko'rish
|
Lektsii po YaP Lukinova 2 sem
- Bu sahifa navigatsiya:
- 2.3.2. Эквивалентность типов
Пример1.
void main() { int a,b,c ; float d; a = b * d; } Язык С допускает смешанные выражения, поэтому компилятор приведет b к типу float, произведет умножение и результат преобразует к типу int. Хотя возможен и другой порядок действий: вначале преобразовать d к типу int, а потом совершать арифметику. Выбор варианта производится при разработке компилятора, но ни тот, ни другой не гарантирует правильность результата из-за использования суживающего приведения. В связи с этим в некоторых ЯП (АДА и Модула2) введено ограничение на смешения операндов. В большинстве же языков ограничений нет. Хотя наблюдение за приведением очень затратный процесс, т.к. и поверка, и преобразование происходит при выполнении программы. Контроль типов может выполняться: только при компиляции и, если все ошибки типов выявляются при компиляции, то такой язык называется с полным статическим контролем типов; только при выполнении – если все ошибки выявлены при выполнении, то такой язык называется с полным динамическим контролем типов; и при компиляции, и при выполнении (язык со смешанным контролем типов). 2.3.2. Эквивалентность типов Если реализуется оператор x := <выражение>, то он реализуется только в том случае, когда типы операторов справа и слева эквивалентны, т.е. необходимо определить правила вычисления эквивалентности типов данных. Существуют два способа определения эквивалентности типов, которые принято использовать для структурных типов данных: 1. Эквивалентность (совместимость) по структуре или структурная эквивалентность – две переменные имеют совместимые типы в том случае, если у их типов одинаковые структуры. 2. Эквивалентность типов по имени или именная эквивалентность – две переменные имеют совместимые типы в том случае, если имена их типов одинаковы (в независимости от того, какова их структура и множество значений). Пример 2. Program A; type Т1 = array (1. . 10) of integer; type Т2 = array (1..10) of integer; var X : array(1..10) of integer; У:Т1, Z: Т2; begin X:=Y; X:=Z; Z:=Y end. Здесь, в случае эквивалентности по структуре типы переменных X, У, Z будут считаться одинаковыми, а в случае эквивалентности по имени – различными. С точки зрения удовлетворения правилам эквивалентности, в языках вводится понятие производных типов и подтипов. Производный тип строится на основе базового типа путем определения именного, включающего логически связанные объекты, задачи. Производный тип наследует значения и операции базового типа. Пример 3. Type Возраст = integer end; var этот_возвраст, общий_возраст : Возраст; i : integer; begin общий_возраст:=0; while (i<=10) do readln (этот_возраст); общий_возраст:=общий_возраст+этот_возраст; end. Подтипы позволяют ограничивать множество значений и множество операций базового типа: subtype возраст range [15…30]:int; рост range [150…210]:int; индекс range [1…100]:int; Download 4,1 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2025
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling