русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Прості нестандартні типи даних


Дата додавання: 2014-11-28; переглядів: 1590.


У мові програмування Паскаль, крім стандартних типів (integer, real, char, boolean), можна використовувати й ін­ші типи даних. Використання в програмі таких типів мож­ливі тільки після відповідного їх визначення в спеціально­му розділі. Типи можна поділити на прості (скалярні, неструктуровані) і складені (структуровані). Стандартні типи даних належать до простих типів. До простих не­стандартних типів даних належать перелічувальні i інтервальні типи.

Перелічувальний тип. Цей тип означається перелічень ням по порядку всіх його значень. Значення нового типу подаються iменами (ідентифікаторами), які є константами цього типу. Означення типу має вигляд

TYPE ім'я типу = (список констант-iдентифікаторів);

TYPE day = (monday, tuesday, wednesday, thursday. friday, saturday» sunday);

month = (january, february, march, april, may, june, july, august, september, oktober, november, december);

znak = (plus, minus, multiply, divide);

color = (red, orange, yellow, green, lightblue, blue, violet);

{тип день = (понеділок, вівторок, середа, четвер, п'ятниця, су­бота, неділя);

місяць == (січень, лютий, березень, квітень, травень, червень, липень, серпень, вересень, жовтень, листопад, грудень);

znak = (плюс, мінус, множити, ділити);

колір = (червоний, оранжевий, жовтий, зелений, голубий, синій, фіолетовий);}

Тут означаються чотири перелічувальні типи, імена яких day, month, znak, color. Тепер ці iмена такі ж iдентифікатори типу, як inte­ger або real.

Для будь-якого перелічувального типу t, який означа­ється записом

TYPE t = (v1, v2 , ..., vn ),

де tім'я типу; v1, v2 , ..., vn— константи-ідентифікатори, повинні задовольнятися вимоги:

1) vi¹ vj, якщо i¹j;

2) vi<vj, якщо і < j(впорядкованість), тобто впоряд­кованість у перелічувальних типах визначається порядком, в якому значення перелічені в означенні типу;

3) значення типу t можуть бути лише v1, v2 , ..., vn.

До перелічувальних типів можна застосовувати опера­ції відношення =, <>,<,< =, >, > =, якщо обидва компоненти відношення одного типу. Отже, для наведено­го прикладу можна записати вирази

monday < thursday

minus > plus які мають значення true.

Для аргументів перелічувального типу можна застосо­вувати стандартні функції знаходження попереднього і наступного елементів:

pred (vi)= ,i=2,3, .... n;

succ (vi) = vi+1 , i=2,3, .... n-1.

Функція ord для перелічувального аргументу видає чис­ло, яке є порядковим номером заданого значення в списку означення. При цьому порядковий номер першого значення списку дорівнює нулю, тобто

ord (v1) =0; ord (vi) = ord (pred (vi)) + 1, і= 2, 3, ..., n.

Таким чином, ord (red) = ord (January) = 0;

ord (green) = 3; ord (divide) = 3.

Зауважимо, що стандартний булевий тип автоматично означається як

TYPE boolean = (false, true);

До перелічувального типу можна віднести також стан­дартний тип char. Його, як і булевий тип, не треба оз­начати програмісту, оскільки він означається автома­тично.

Типи, що означаються програмістом, використовують­ся так, як і стандартні. Наприклад,

VAR winterm, summerm : month;

op : znak;

workinghours, dayoff : day;

kolir : color;

Тут описано шість змінних. Змінні winterm (зимовий місяць: winter — зима) і summerm (літній місяць, sum­mer — літо) мають тип month (тобто кожна з них може мати одне з дванадцяти значень January, February, march, april, may, June, July, august, september, oktober, november, december і ніяких iнших), змінна op має тип znak, змінні workinghours (working hours — робочий день) і dayoff (вихідний день) мають тип day, змінна kolir — тип color. У програмі, яка містить такі описи змінних, синтаксично правильними будуть такі оператори присвоювання:

winterm: = february; summerm: = august;

op: = minus; dayoff := sunday;

Означення типу i опис змінних можна, взагалі кажучи, замінити одним описом змінних. Наприклад, замість озна­чення

TYPE znak = (plus, minus, multiply, divide);

i опису

VAR op : znak;

можна записати

VAR op : (plus, minus, multiply, divide);

Перелічувальні типи часто використовуються в опера­торах циклу з параметром, а також в операторах вибору. Наприклад,

FOR kolir:= red TO violet DO

BEGIN

Cерія

END;

FOR kolir: = violet DOWNTO red DO

BEGIN

Серія

END

Обмежені типи. Для всіх скалярних типів, крім дійс­ного, можна означити новий тип, накладаючи обмеження на початковий. Останній при цьому називається базовим ти­пом. Обмеження визначає діапазон допустимих значень: вказуються мінімальне i максимальне значення в діапазоні. Означення обмеженого типу має форму:

TYPE ім'я типу = константа 1.. константа 2;

Перша константа визначає нижню межу і не повинна пе­ревищувати верхньої. Обмежений тип зберігає всі власти­вості базового скалярного типу з урахуванням діапазону його значень.

Використання обмежених типів має ряд переваг. Це унаочнення програми (вказуються додаткові відомості про діапазон значень, які може набувати змінна); зменшення пам'яті, яку займає програма, контролювання під час вико­нання програми присвоювання змінним обмеженого типу.

Наприклад:

TYPE masa = 10..100;

index = 0..10;

letter = ‘A’..’Z’;

working = monday..friday;

Тут working (робочий) — це обмеження перелічувального типу day з розглянутого вище прикладу.

Базовим типом для masa і index є цілий (integer) для letter — символьний (char), для working — перелічуваль­ний простий тип day.

Використовуючи відповідні імена типів, можна, напри­клад, записати такі описи змінних:

VAR mas1, mas2: masa;

і, beta: index;

lit, symbol: letter;

work: working;

Тип даних можна було б описати і безпосередньо в роз­ділі опису змінних:

VAR mas1, mas2: 10..100;

i, beta: 0..10;

lit, symbol: ‘A’..’Z’;

work: monday..friday;

 

Приклади

1. Скласти програму, яка б визначала, чи є заданий рік з проміжку [1001; 9999] — високосним.

Високосним, як відомо, є роки, номери яких діляться на 4, крім тих, номери яких діляться на 100, але не діляться на 400.

Програму мовою Паскаль можна записати у вигляді:

PROGRAM lead_year ;

VAR rik: 1001.,9999;

sign: boolean;

BEGIN

write (‘Який рік бажаєте перевірити ?’);

readln (rik);

sign:=false;

IF (rik MOD 4=0) AND (rik MOD 100<>0)

THEN sign:=true;

IF rik MOD 400=0

THEN sign:=true;


<== попередня лекція | наступна лекція ==>
GOTO мітка | IF sign


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн