Помощь - Поиск - Пользователи - Календарь
Полная версия: Понятия идентичности и совместимости
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость
Помогите разобраться
VBproffi
вопрос вообщето дли теории (ИМХО), но я отвечу, а модерация, по своему усмотрению поступит с этой темой.
Идентичность.
Два типа могут быть идентичны, если они эквивалентны друг другу
или если они эквивалентны третьему типу
Примеры

1)
Код
type
   Mas    = 222..2222;
   Netto  = Mas;
   Brutto = Netto;


2)
Код
type
   Price = 12..12000
   Nal   = Price
   BNal  = Price


Совместимость

I. Совместимость типов
II. Совместимость по присваиванию

1.1. Наиболее понятный это если они оба принадлежат целочисленным (Byte, Integer, Word, LongInt, ShortInt)
или вещественным (Real, Double, Single, Extended)
1.2. Один типа представляет из себя диапазон другого
1.3. Оба типа представляют из себя диапазон другого - стандартного типа
1.4. Идентичность типов (см. выше)

Примеры
2)
Код
type
       Max = 50..100;
       Min = 60..70;


3)
Код
type
     Words = 'A'..'D';
 
  var
     ch : Char;
Здесь words - поддиапозон Char.

2.1. Идентичность типов выражений
2.2. Совместимость может быть между двумя выражениями если тип первого выражения - вещественный, а другой - целочисленный (но не наоборот)

Пример

Код
Var
      a : real
      b:  byte;
begin

      b:= 5;
     a:= b (True-  a = 5.0.)
end;
volvo
Если уже давать такой развернутый ответ, то надо давать его полностью:
Цитата(VBproffi @ 23.06.05 6:47)
Совместимость
1.1. Наиболее понятный это если они оба принадлежат целочисленным (Byte, Integer, Word, LongInt, ShortInt)
  или вещественным (Real, Double, Single, Extended)
1.2. Один типа представляет из себя диапазон другого
1.3. Оба типа представляют из себя диапазон другого - стандартного типа
1.4. Идентичность типов (см. выше)

+ к этому:
1.5. Оба типа являются множественными типами, и при этом их базовые типы совместимы
1.6. Один тип является строковым, а другой - строковым или символьным типом
1.7. Один тип является бестиповым указателем (Pointer), а другой - указателем или ссылкой

Цитата(VBproffi @ 23.06.05 6:47)
2.1. Идентичность типов выражений     
2.2. Совместимость может быть между двумя выражениями  если тип первого выражения - вещественный, а другой - целочисленный  (но не наоборот)

И это всё? Попробуй тогда сделать вот так (из твоего описания не видно, что это запрещено):
Var f_in, f_out: text;
begin
  f_in := f_out; { <--- Типы эквивалентны друг другу, почему не работает?}
end.
VBproffi
Цитата
Если уже давать такой развернутый ответ...

А кто скзал, что ядаю развёртнутый ответ :D . Я привожу даю справку согласно имеющимся (не ошибочным) сведениям.

Цитата
+ к этому:

Вот это я понимаю. Просто я самоучка - прошу читающих не ухмыляться, я отнюдь не считаю что я такой единственный... но просто я привожу те сведения, из теории, которые узнаю из книг. Эти знания я почерпнул из книги Элиота Б.Коффмана. Но есть тут фишка, :nono: я вот не полно ответил, ты дополнил, кто - то ещё добавит и ... так происходит обмен информацией, преобретение опыта и улучшение умственных способностей. А разве не для этого мы здесь седим. Я прав брат? :D

Цитата
И это всё? Попробуй тогда сделать вот так (из твоего описания не видно, что это запрещено):

Var
      f_in, f_out: text;
begin
  f_in := f_out; { <--- Типы эквивалентны друг другу, почему не работает?}
end.


Хммм... ну не знаю, знаю что на заработает, но почему не знаю...
Поделишся опытом? rolleyes.gif
volvo
Цитата(VBproffi @ 23.06.05 15:49)
знаю что на заработает, но почему не знаю...

Потому, что совместимость по присваиванию подразумевает нечто иное... Вот 10 правил этой совместимости:

Значение типа Т1 может быть присвоено значению типа Т2, если ...
  1. Т1 и Т2 - тождественные типы, и ни один из них не является файловым типом или структурным типом, содержащим компонент файлового типа;
  2. Т1 и Т2 - совместимые перечислимые типы, и значения типа Т2 попадают в диапазон возможных значений Т1;
  3. Т1 и Т2 - вещественные типы, и значения типа Т2 попадают в диапазон возможных значений Т1;
  4. Т1 - вещественный тип, Т2 - целочисленный тип;
  5. Т1 и Т2 - строковые типы;
  6. Т1 - строковый тип, Т2 - символьный тип;
  7. Т1 и Т2 - совместимые множественные типы, и все члены значения множества типа Т2 попадают в диапазон возможных значений Т1;
  8. Т1 и Т2 - совместимые адресные типы;
  9. Тип объекта Т2 совместим по присваиванию с типом объекта Т1, если Т2 находится в области типа объекта Т1;
  10. Тип ссылки Ptr2, указывающий на тип объекта Т2, совместим по присваиванию с типом ссылки Ptr1, указывающим на тип объекта Т1, если Т2 находится в области типа объекта Т1
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.