Pascal. Перечислительный и интервальный типы данных

Перечислительный и интервальный типы данных


Содержание





1. Какие преимущества использования перечислительного и интервального типов в программе?

Перечислительный тип представляет собой ограниченную упорядоченную последовательность скалярных констант, составляющих данный тип. Значение каждой константы задается ее именем. Имена отдельных констант отделяются одна от другой запятыми.

Преимуществом использования такого типа есть то, что программист объединяет в одну группу всю совокупность значений соответственно некоторому признаку. Эти значения составляют перечислительный тип. Это, в свою очередь, повышает читабельность программ.

Значение перечислительного типа обязательно должны принадлежать к порядковому типу.

Интервальный или ограниченный тип данных задается диапазоном от минимального к максимальному значению констант, разделенных двумя точками ‘..‘.


2. Пример описания и использования перечислительного типа в программе (в разделе type).

Перечислительный тип может быть описан в разделах описания типов (type) и переменных (var).

Пример описания перечислительного типа с использованием раздела описания типов type:

type
  Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

var
  r1,r2:Rainbow;

После такого описания можно использовать переменные перечислительного типа:

...

r1:=YELLOW;
r2:=r1;

...


3. Какие функции и операции могут быть применимы к переменным перечислительного типа?

К переменным перечислительного типа чаще всего применяются три основных функции:

  • Pred – определение предшествующего элемента в множестве значений;
  • Succ – определение следующего элемента в множестве значений;
  • Ord – определение позиции элемента в перечислительном типе.

Пример использования функций Pred, Succ и Ord.

type
  Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

var
  r1,r2:Rainbow;

begin

  r1 := GREEN;
  r2 := Pred(r1); // r2 = YELLOW
  pos := Ord(r1); // pos = 3
  pos := Ord(RED); // pos = 0

end;

Как видно из примера, номера индексов перечислительного типа начинаются с 0.

Переменные перечислительного типа могут быть задействованы в логических операциях сравнения. Например:

type
  Rainbow = (RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

var
  r1,r2:Rainbow;

begin

  ...

  r1 := GREEN;
  r2 := Pred(r1); // r2 = YELLOW

  ...

  if r2>r1 then
    Label1.Caption := 'r2 is more than r1'
  else
    Label1.Caption := 'r2 is less of equal than r1';

  ...

end;


4. Пример описания и использования переменных перечислительного типа в программе (в разделе var).
var
 r1,r2:(RED, ORANGE, YELLOW, GREEN, LIGHT_BLUE, BLUE, VIOLET);

После такого описания можно использовать переменные перечислительного типа:

...

r1:=BLUE;
r2:=r1; // r2 = BLUE

...


5. Какой стандартный тип данных языка Паскаль совместим со значениями перечислительного и интервального типов данных?

Со значениями перечислительного и интервального типов данных совместимы порядковые типы данных. К таким типам можно отнести стандартные типы данных integer, boolean, char.

К переменным порядковых типов есть применимыми функции Pred и Succ.



6. Пример описания и использования интервального типа данных.

Интервальный тип данных можно описывать двумя способами, которые можно объединять между собой.

Способ 1. В разделе описания типов с использованием ключевого слова type.

type
  TYear = 1900..2000;
  TCharacter = 'A'..'Z';

var
  y,y2:TYear;
  ch,ch2:TCharacter;

begin

  ...

  y := 1905;   // правильно
  y2:=Succ(y); // y2 = 1906  
  y2:=y+10;   // y2 = 1915

  // ошибка компиляции
  // year := 1800;  

  ch := 'D';
  ch2:=Succ(ch); // ch2 = 'E'
  ch2:=Pred(ch); // ch2 = 'C'

  ...

end;

 

Способ 2. Описание в разделе описания переменных var.

var
  ch, ch2: 'a'..'z';
  y:1900..2100;

begin

  ...

  ch := 'h';
  ch2 := Pred(ch); // ch2 = 'g'
  y := 1905;

  // ошибка - несовместимые типы
  // ch2 := ch + 2;

  ...

end;