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;