Лекция 01. Тема Общая характеристика языков программирования высокого уровня


Download 4.1 Mb.
Pdf ko'rish
bet11/57
Sana12.11.2023
Hajmi4.1 Mb.
#1767546
TuriЛекция
1   ...   7   8   9   10   11   12   13   14   ...   57
Bog'liq
Lektsii po YaP Lukinova 2 sem

Пример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:
1   ...   7   8   9   10   11   12   13   14   ...   57




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling