Структура програми на Паскалі
Програма на Паскалі в загальному випадку складається з декількох файлів. Один з них містить головну програму, а решта - модулі. Головна програма складається з заголовка, блоку і закінчується крапкою - ознакою кінця програми. У свою чергу, блок містить розділи описів і розділ операторів. У загальному випадку «скелет» програми можна уявити наступним чином:
{Специфікація програми}
program <ім'я програми> (заголовок програми);
uses (Розділ оголошення модулів);
label (розділ оголошення міток);
const (розділ оголошення констант);
type (розділ оголошення типів);
var (розділ оголошення змінних);
procedure (function) (розділ оголошення підпрограм: процедур або функцій);
begin
<Оператори> (розділ операторів, обов'язкова частина);
end.
Всі зазначені розділи відокремлюються один від одного крапкою з комою.
Розділ операторів повинен обов'язково бути присутнім у будь-якій програмі і є основним. Попередні розділи носять характер описів і не обов'язково міститися в програмі.
Тема програми складається з зарезервованого слова program та імені програми (зі списком параметрів, укладених в круглі дужки). Завершується заголовок крапкою з комою.
У Turbo Pascal є особливості в структурі програми. Так, заголовок програми необов'язковий, і ігнорується компілятором. Порядок розміщення розділів довільний, можна створювати кілька однакових розділів. Єдине правило, яке необхідно витримувати, - у будь-якому місці програми можна використовувати лише елементи (мітки, типи, константи, змінні, підпрограми і т. д.), які були визначені раніше по тексту програми або є зумовленими елементами мови. Винятком з цього правила може бути лише визначення типу-покажчика через невизначений до цього тип. Проте цей тип надалі повинен бути обов'язково визначений.
Оператори в розділі операторів відокремлюються один від одного крапкою з комою. Перед e nd крапка з комою не ставиться, але її наявність не є помилкою, а лише означає присутність між останнім виконуваним оператором і службовим словом end ще одного оператора - порожнього оператора. Закінчується програма словом end, після якого обов'язково ставиться крапка.
На початку програми необхідно розташовувати її специфікацію - коментар у фігурних дужках, що містить призначення програми, дані про програмістові, дату створення програми.
Мова програмування Паскаль є мовою структурного програмування. У ньому є всі необхідні керуючі конструкції для структурної побудови програми. Наочність такій побудові надає структуризація зовнішнього вигляду тексту програми. Основний використовуваний для цього прийом - зрушення рядків, які повинні підкорятися такими правилами:
§ конструкції одного рівня вкладеності записуються на одному вертикальному рівні (починаються з однієї позиції в рядку);
§ вкладена конструкція записується зміщеною по рядку на декілька позицій праворуч щодо зовнішнього для неї конструкції.
ТИПИ І ЗНАЧЕННЯ ЗМІННИХ
Рішення задач цього розділу не передбачає складання скільки-небудь складних алгоритмів, написання скільки-небудь серйозних програм і проектування хитромудрого інтерфейсу Windows-додатків за допомогою засобів Visual Basic 6.
Все, що потрібно для розв'язання цих задач, це знання типів змінних мови Visual Basic 6, способів оголошення типів і діапазонів зміни значень змінних різних типів.
Вам знадобляться знання різних типів числових змінних Byte, Integer, Long, Single, Double, Currency. Буде розглянутий і тип нечисловий (текстової) змінної String. Згадаємо тип логічної змінної Boolean. Розглянемо ми і тип Date для представлення дати числа, місяця і року будь-якого дня нинішнього (і не тільки нинішнього) тисячоліття. У мові Visual Basic ключове слово Date використовується не тільки як назва типу змінної, але і як ім'я функції. Ця функція не має аргументів. Вона повертає значення, яке є поточною датою.
Ви повинні мати уявлення і про особливий тип Variant, про те, що змінні цього типу можуть мати будь-який тип.
Для розв'язання задач потрібно знати способи оголошення типу змінною:
за допомогою оператора оголошення типу Def... (DefByte, DefInt, DefLng, DefSng і т.д.);
за допомогою операторів визначення змінної Dim. .. As. .. (або Private. .. As. .., або Public. .. As. ..);
за допомогою суфікса (одного із знаків %, &, !, #, @, $, який записується в кінці імені змінної).
Окремим випадком змінної є константа постійна величина. Вона оголошується за допомогою оператора визначення константи Const. .. As. ...
Ви повинні розуміти, що оголошувати тип змінної зовсім не обов'язково в цьому випадку він буде «оголошений» самою системою Visual Basic за замовчанням. Система буде вважати, що Ваша змінна має тип Variant. А після привласнення цієї змінної значення певного типу система автоматично змінить і тип змінної.
У задачах цього розділу використовується оператор привласнення X=Е, з допомогою якого змінній X привласнюється значення виразу Е. (Старомодне слово Let перед ім'ям змінної X ми не записуємо, хоч робити це не возбраняется.) І хоч обчислення значень виразів це тема наступного розділу, тут ми вимушені скористатися найпростішими арифметичними операціями додавання (+), відніманням ( - ), множенням (*) і ділення (/).
У деяких програмах цього розділу Ви можете побачити і один з методів Visual Basic це метод Print, за допомогою якого результат роботи програми можна просто «надрукувати» на екранній формі.
Під файлом розуміється іменована область пам'яті на носії, використовувана для довгострокового зберігання деякої логічно зв'язаної інформації. У цю область зовнішньої пам'яті можна як помістити певні дані, так і витягти їх з неї. Ці дії мають загальну назву - ввід-вивід.
Файл - це одномірний масив байтів, що має як мінімум один твердий зв'язок (ім'я файлу). Файли можуть містити інформацію у двійковому або в текстовому виді. Файли містять дані, сценарії оболонки або програми. Крім того, деякі імена файлів являють собою такі абстрактні об'єкти, як сокети й драйвери пристроїв.
Передбачено безліч функцій для роботи з файлами. Більшість цих функцій можна віднести до однієї з наступних двох категорій:
Функції для створення файлів.
Функції для керування файлами.
Наприклад у паскалі робота з файлами здійснюється через спеціальні типи. Це файлові типи, які визначають тип файлу, тобто фактично вказують його вміст.
За допомогою цієї змінної, котрої привласнений необхідний тип, і здійснюється вся робота з файлами - відкриття, запис, читання, закриття й т.п.
При роботі з файлами існує певний порядок дій, якого необхідно дотримуватися. От всі ці дії:
· Створення (опис) файлової змінної;
· Зв'язування цієї змінної з конкретним файлом на диску або із пристроєм вводу-висновку (екран, клавіатура, принтер і т.п.);
· Відкриття файлу для запису або читання;
· Дії з файлом: читання або запис;
· Закриття файлу.
Програмування доступу до файлу в язиці Turbo Pascal починається з опису файлової змінної (змінної файлового типу). Цей опис будується за допомогою службового слова file, після якого може бути зазначений тип окремих елементів файлу.
Залежно від способу опису можна виділити текстові файли, двійкові або типізовані й нетипизовані. Вид файлу визначає спосіб зберігання інформації у файлі.
Текстовий файл є файлом послідовного доступу, і його можна представити як набір рядків довільної довжини. Логічно послідовний файл можна представити як іменований ланцюжок байтів, що має початок і кінець. Послідовний файл відрізняється від файлів з іншою організацією тим, що читання (або запис) з файлу (у файл) ведуться байт за байтом від початку до кінця.
Також існують так називані "типізовані" файли, тобто файли, що мають тип. Цей тип визначає, якого роду інформація втримується у файлі й задається в параметрі.
Нетипизований файл - файл, у якому ми вказуємо як тип файлу просто File, тобто без типу.
Те одержуємо "нетипизований" файл, читання й запис у який відрізняється від роботи з файлами інших типів. Ці дії виробляються шляхом вказівки кількості байт, які потрібно прочитати, а також вказівкою області пам'яті, у яку потрібно прочитати ці дані.
Кожній програмі доступні два стандартних файли input (клавіатура) і output (екран). Це - текстові файли. Будь-які інші файли стають доступними після виконання спеціальних процедур.
Любий файл має три характерні риси. По-перше, у нього є ім'я, що дає можливість програмі працювати одночасно з декількома файлами. По-друге, він містить компоненти одного типу. По-третє, довжина знову створюваного файлу ніяк не обмовляється при його оголошенні й обмежується тільки ємністю пристроїв пам'яті.
Відкриття файлу - це вже більше ускладнений процес, ніж зв'язування з ним змінної. Тут ураховується, навіщо відкривається файл - для запису або читання, а також залежно від типу файлу процедури виконують різні дії.
Цей процес полягає у використанні однієї із трьох наявних процедур:
1. Відкриття файлу на читання. Це може бути текстовий, типізований або не типізований файл. У випадку з текстовим файлом, він відкривається тільки на читання. У випадку з типізованим і не типізованим файлом - він відкривається на читання й запис.
2. Процедура відкриття текстового файлу на запис. Вище було сказано, що при завданні параметра типу Text не дозволить писати в нього дані, відкривши файл лише для читання. Тобто якщо використається текстовий файл і необхідно робити в нього запис, використовується ця процедура.
3. Процедура створення нового файлу або перезаписування існуючого.
Читання файлів. Читання файлів виробляється за допомогою відмінно відомих нам процедур Read і Readln. Вони використаються також, як і при читанні інформації із клавітури. Відмінність лише в тім, що перед змінної, у яку міститься лічене значення, указується змінна файлового типу (дескриптор файлу).
Запис у файли вироблятися точно так само, як і запис на екран - за допомогою процедур Write і Writeln. Як і у випадку із читанням, перед записуваною у файл змінної вказується дескриптор файлу.
TURBO PASCAL уводить ряд процедур і функцій, застосовних для будь-яких типів файлів: Assign, Reset, Rewrite, Close, Rename, Erase, Eof,
Процедура Assign зв'язує логічний файл із фізичним файлом, повне ім'я якого задане в рядку FileName.
Процедура Reset відкриває логічний файл для наступного читання даних або, як говорять, відкриває вхідний файл. Після успішного виконання процедури Reset файл готовий до читання з нього першого елемента.
Процедура Rewrite відкриває логічний файл для наступного запису даних. Після успішного виконання цієї процедури файл готовий до запису в нього першого елемента.
Процедура Close закриває відкритий до цього логічний файл. Виклик процедури Close необхідний при завершенні роботи з файлом.
Логічна функція EOF Boolean повертає значення TRUE, коли при читанні досягнуть кінець файлу. Це означає, що вже прочитано останній елемент у файлі або файл після відкриття виявився порожній.
Процедура Rename дозволяє перейменувати фізичний файл на диску, пов'язаний з логічним файлом. Перейменування можливо після закриття файлу.
Процедура Erase знищує фізичний файл на диску, що був пов'язаний з файлової змінної. Файл до моменту виклику процедури Erase повинен бути закритий.
Пример. Запись текстового файла на диск и ввод в него текста.
program wtf;
type fil=text;
var f1:fil; name:string[35]; txt:string;
begin
write('Введите имя файла для записи текста>');
readln(name);
writeln;
assign(f1,name);
rewrite(f1);
writeln('Введите текст для записи (для окончания-Enter):');
writeln;
repeat
write(':>');
readln(txt);
writeln(f1,txt);
until txt='';
close(f1);
writeln;
writeln('Ввод окончен, нажмите Enter.');
readln;
end.
1. Логічний, символьний і рядковий типи змінних Turbo-Pascal.
У розділі var рядка описуються наступним образом1):
var <імя_строкі>: string [[<довжина>]] 2)
Максимальна довжина рядка - 255 символів. Нумеруються її компоненти починаючи з 0, але цей нульовий байт зберігає довжину рядка.
Якщо <довжина> не вказана, то вважається, що в рядку 255 символів. Тому дляекономії пам'яті слід по можливості точно вказувати довжину використовуванихрядків.
Приклади описів:
var s1: string [10]; (* рядок довжиною 10 символів *)
s2: string; (* рядок довжиною 255 символів *)
Необхідно відзначити, що один символ і рядок довжиною в одін3) символ
var c: char;
s: string [1];
абсолютно не еквівалентні один одному. Незалежно від своєї реальної довжини,рядок стосується конструйованих структурованим типам даних, а не до базовихпорядковим
Логічний тип boolean має два значення: false і true, і для них виконуються такі рівності:
ord (false) = 0, ord (true) = 1, false <true,
pred (true) = false, succ (false) = true,
inc (true) = false, inc (false) = true,
dec (true) = false, dec (false) = true.
У символьний тип char входить 256 символів розширеної таблиці ASCII (наприклад, 'a','b', 'я', '7 ','#'). Номер символу, що повертається функцією ord (), збігається з номеромцього символу в таблиці ASCII.
33.Пірамідальне сортування
var i, k, j, N, x: integer;
a: array [1..100] of integer;
begin
read(n);
randomize;
for i := 1 to n do
a[i] := random (50);
for i := 1 to N do
write(a[i],' ');
writeln;
for i:= (N div 2)downto 1 do
begin j:= i;
while j<=(N div 2) do
begin k:= 2*j;
if (k+1<=N) and (a[k]<a[k+1])
then k:= k+1;
if a[k]>a[j]
then begin x:= a[j];
a[j]:= a[k];
a[k]:= x;
j:= k
end
else break
end
end;
for i:= N downto 2 do
begin x:= a[1];
a[1]:= a[i];
a[i]:= x;
j:= 1;
while j<=((i-1)div 2) do
begin k:= 2*j;
if (k+1<=i-1) and (a[k]<a[k+1])
then k:= k+1;
if a[k]>a[j]
then begin x:= a[j];
a[j]:= a[k];
a[k]:= x;
j:= k
end
else break
end
end;
for i := 1 to N do
write(a[i],' ');
readln;
end.
27.Швидке сортування
var a: array [1..100] of integer;
n, i: integer;
procedure qsort(l, r: integer);
var middle, temp, i, j: integer;
begin
middle := a[(l+r) div 2];
i := l;
j := r;
while i<=j do
begin
while a[i] < middle do
inc(i);
while a[j] > middle do
dec(j);
if i <= j then
begin
temp := a[i];
a[i] := a[j];
a[j] := temp;
inc(i);
dec(j);
end;
end;
if l<j then
qsort(l, j);
if r>i then
qsort(i, r);
end;
begin
randomize;
writeln('vvedit kil-t elementiv:');
read(n);
for i := 1 to n do
begin
a[i] := random(50);
write(a[i],' ');
end;
writeln;
qsort(1, n);
for i := 1 to n do
write(a[i], ' ');
end.
30.Шейкерне сортування
var A:array[1..100] of integer;
N,i,k,x,j,d : integer;
begin
randomize;
read(N);
for i:=1 to n do
a[i] := random(50);
for i := 1 to n do
write(a[i],' ');
writeln;
d := 1;
i := 0;
for k:=n-1 downto 1 do { k - êîëè÷åñòâî ñðàâíèâàåìûõ ïàð }
begin
i := i+d;
for j := 1 to k do
begin
if (a[i]-a[i+d])*d>0 then
{ìåíÿåì ìåñòàìè ñîñåäíèå ýëåìåíòû}
begin
x := a[i];
a[i] := a[i+d];
a[i+d] := x;
end;
i := i+d;
end;
d := -d;
{ìåíÿåì íàïðàâëåíèå äâèæåíèÿ íà ïðîòèâîïîëîæíîå}
end;
for i := 1 to n do
write(a[i],' '); {óïîðÿäî÷åííûé ìàññèâ}
end.
32.шелла
var ii,m,x,s,p,t,k,r,i,j,n: integer;
a: array[1..100] of integer;
begin
randomize;
for i:=1 to 20 do
begin
a[i]:=random(50);
write(a[i],' ');
end;
writeln;
n:=20;
t:= trunc(ln(n)/ln(2));
repeat
t:= t-1;
k:= (1 shl t)-1;
p:= n mod k;
s:= n div k;
if p=0 then p:= k
else s:= s+1;
for i:= 1 to k do
begin
if i= p+1 then s:= s-1;
for j:= 1 to s-1 do
if a[i+(j-1)*k]>a[i+j*k]
then begin x:= a[i+j*k];
m:= i+(j-1)*k;
while (m>0) and (a[m]>x) do
begin a[m+k]:= a[m];
m:= m-k;
end;
a[m+k]:= x;
end;
for ii:= 1 to n do write(a[ii],' ');
writeln;
end;
until k=1;
end.
program sort_3;
{$APPTYPE CONSOLE}
uses
SysUtils;
var mass: array [1..100] of Integer;
i, j, n, temp, min, min_i, k: Integer;
begin
Writeln('Vvedit kilkist elementiv massiva:');
read(n);
Randomize;
for i := 1 to n do
begin
mass[i] := Random(50) - 25;
write(mass[i],' ');
end;
writeln;
Buble sort
{for i := 2 to n do
for j := n downto i do
begin
if (mass[j] < mass[j-1]) then
begin
temp := mass[j];
mass[j] := mass[j-1];
mass[j-1] := temp;
end;
end; }
Select sort
{for i := 1 to n-1 do
begin
min_i := i;
for j := i+1 to n do
begin
if (mass[min_i] > mass[j]) then
begin
min_i := j;
end;
end;
temp := mass[min_i];
mass[min_i] := mass[i];
mass[i] := temp;
end; }
Insert sort
for i := 2 to n do
begin
temp := mass[i];
j := 1;
while (temp > mass[j]) do
Inc(j);
for k := i-1 downto j do
mass[k+1] := mass[k];
mass[j] := temp;
end;
for i := 1 to n do
write(mass[i],' ');
readln;
readln;
end.
31.
Метод бінарних вставок
for i:= 2 to n do
if a[i-1]>a[i] then
begin x:= a[i];
left:= 1;
right:= n-1;
repeat
sred:= (left+right) div 2;
if a[sred]<x then left:= sred+1
else right:= sred-1;
until left>right;
for j:= i-1 downto left do a[j+1]:= a[j];
a[left]:= x;
end;
Злиттям.
const
n1 = 5;
n2 = 8;
var
P: array [1..n1 + n2] of integer;
M: array [1..n1] of integer;
N: array [1..n2] of integer;
i, j,l, x: integer;
begin
writeln('Заполните массив M (ввод ', n1, ' элементов )');
for i := 1 to n1 do
read(M[i]);
writeln('Заполните массив N (ввод ', n2, ' элементов )');
for i := 1 to n2 do
read(N[i]);
j := 1;
l := 1;
for i := 1 to n1+n2 do
if j>n1
then
begin
P[i] := N[l];
l := l+1;
end
else
if l>n2
then
begin
P[i] := M[j];
j := j+1;
end
else
if M[j]<=N[l]
then
begin
P[i] := M[j];
j := j+1;
end
else
begin
P[i] := N[l];
l := l+1;
end;
for i := 1 to n1 + n2 do
write(P[i]:3);
end.
Типы данных языка Pascal
Компілятори мови Pascal вимагають, щоб відомості про обсяг пам'яті, необхідної для роботи програми, були надані до початку її роботи. Для цього в розділі опису змінних (var) потрібно перерахувати всі змінні, використовувані в програмі. Крім того, необхідно також повідомити компілятору, скільки пам'яті кожна з цих змінних буде займати. А ще було б непогано заздалегідь домовитися про різних операціях, які можна застосувати до тих чи інших змінним ...
Все це можна повідомити програмі, просто вказавши тип майбутньої змінної. Маючи інформацію про тип змінної, компілятор "розуміє", скільки байт необхідно відвести під неї, які дії з нею можна робити і в яких конструкціях вона може брати участь.
Для зручності програмістів у мові Pascal існує безліч стандартних типів даних і плюс до того можливість створювати нові типи.
Конструюючи нові типи даних на основі вже наявних (стандартних або знову-таки визначених самим програмістом), потрібно пам'ятати, що будь-яка будівля має будуватися на хорошому фундаменті. Тому зараз ми і поговоримо про це "фундаменті".
На підставі базових типів даних будуються всі інші типи мови Pascal, які так і називаються: конструюються.
Поділ на базові та конструюються типи даних у мові Pascal показано в таблиці:
Базовые типы данных | Дискретные типы данных | Арифметические типы данных | Адресные типы данных | Структурированные типы данных | ||
Целые | Вещественные | |||||
Логический boolean | Символьный (литерный) char | shortint byteintegerwordlongint | realsingledoubleextendedcomp | Нетипизированный указатель pointer | ||
Конструируемые типы | Перечисляемый week = (su, mo, tu,we, th, fr,sa); | Типизированный указатель ^<тип> | Массив array | |||
Строка string | ||||||
Запись record | ||||||
Интервал (диапазон) budni = mo..fr; | Файл textfile | |||||
Процедурный | ||||||
Объектный1) | ||||||
Типы данных, конструируемые программистом | ||||||
1. Типи даних, конструюються програмістом, описуються в розділі type за наступним шаблоном:
type <імя_тіпа> = <опісаніе_тіпа>;
Наприклад:
type lat_bukvy = 'a' .. 'z', 'A' .. 'Z';
Базові типи даних є стандартними, тому немає потреби описувати їх у розділі type.Однак при бажанні це теж можна зробити, наприклад, давши довгим визначень короткі імена. Скажімо, ввівши новий тип даних
type int = integer;
можна трохи скоротити текст програми.
Стандартні конструюються типи також можна не описувати в розділі type. Проте в деяких випадках це все одно доводиться робити через вимоги синтаксису.Наприклад, у списку параметрів процедур або функцій конструктори типів використовувати не можна (див. лекцію 8).
Порядкові типи даних
Серед базових типів даних особливо виділяються порядкові типи. Таку назву можна обгрунтувати двояко:
1. Кожному елементу порядкового типу може бути зіставлений унікальний (порядковий) номер. Нумерація значень починається з нуля. Виняток - типи даних shortint, integer і longint. Їх нумерація збігається зі значеннями елементів.
2. Крім того, на елементах будь-якого порядкового типу визначено порядок (у математичному сенсі цього слова), який безпосередньо залежить від нумерації.Таким чином, для будь-яких двох елементів порядкового типу можна точно сказати, який з них менше, а який - больше2).
Стандартні підпрограми, обробні порядкові типи даних
Тільки для величин порядкових типів визначені наступні функції і процедури:
1. Функція ord (x) повертає порядковий номер значення змінної x (щодо того типу, до якого належить змінна х).
2. Функція pred (x) повертає значення, що передує х (до першого елементу типу непридатна).
3. Функція succ (x) повертає значення, що випливає за х (до останнього елемента типу непридатна).
4. Процедура inc (x) повертає значення, що випливає за х (для арифметичних типів даних це еквівалентно оператору x: = x +1).
5. Процедура inc (x, k) повертає k-е значення, що випливає за х (для арифметичних типів даних це еквівалентно оператору x: = x + k).
6. Процедура dec (x) повертає значення, що передує х (для арифметичних типів даних це еквівалентно оператору x: = x-1).
7. Процедура dec (x, k) повертає ke значення, що передує х (для арифметичних типів даних це еквівалентно оператору x: = xk).
На перший погляд здається, ніби результат застосування процедури inc (x) повністю співпадає з результатом застосування функції succ (x). Проте різниця між ними виявляється на кордонах допустимого діапазону. Функція succ (x) непридатна до максимального елементу типу, а от процедура inc (x) не видасть ніякої помилки, але, діючи за правилами машинного складання, додасть чергову одиницю до номера елемента. Номер, звичайно ж, вийде за межі діапазону і за рахунок усікання перетвориться на номер мінімального значення діапазону. Виходить, що процедури inc () і dec () сприймають будь-який порядковий тип немов би "замкнутим в кільце": відразу після останнього знову йде перше значення.
Пояснимо все сказане на прикладі. Для типу даних
type sixteen = 0 .. 15;
спроба додати 1 до числа 15 призведе до наступного результату:
+ 1 1 1 1
1
1 0 0 0 0
Початкова одиниця буде відсічена, і тому вийде, що inc (15) = 0.
Аналогічна ситуація на нижній межі допустимого діапазону довільного порядкового типу даних спостерігається для процедури dec (x) і функції pred (x):
dec (min_element) = max_element
Типи даних, пов'язані з порядковим
Наведемо тепер порядкові типи даних більш докладно.
1. Логічний тип boolean має два значення: false і true, і для них виконуються такі рівності:
2. ord (false) = 0, ord (true) = 1, false <true,
3. pred (true) = false, succ (false) = true,
4. inc (true) = false, inc (false) = true,
dec (true) = false, dec (false) = true.
5. У символьний тип char входить 256 символів розширеної таблиці ASCII (наприклад, 'a', 'b', 'я', '7 ','#'). Номер символу, що повертається функцією ord (), збігається з номером цього символу в таблиці ASCII.
6. Цілочисельні типи даних зведемо в таблицю:
Тип данных | Количество | Диапазон | ||
байтов | битов | |||
shortintbyteintegerwordlongint | 11224 | 88161632 | -128..1270..255-32768..327670..65535-2147483648..2147483647 | -27..27-10..28-1-215..215-10..216-1-231..231-1 |
2. Перераховуються 3) типи даних задаються в розділі type явним перерахуванням їх елементів. наприклад:
3. type week = (sun, mon, tue, wed, thu, fri, sat)
0 1 2 3 4 5 6
Нагадаємо, що для цього типу даних:
inc (sat) = sun, dec (sun) = sat.
4. Інтервальні типи даних задаються тільки кордонами свого діапазону. наприклад:
5. type month = 1 .. 12;
budni = mon .. fri;
6. Програміст може створювати і власні типи даних, що є комбінацією декількохстандартних типів. наприклад:
type valid_for_identifiers = 'a' .. 'z', 'A' .. 'Z','_',' 0 .. 9';
Цей тип складається з об'єднання кількох інтервалів, причому в даному випадкузмінений порядок латинських букв: якщо в стандартному типі char 'A' <'a', то тут,навпаки, 'a' <'A'. Для величин цього типу виконуються наступні рівності:
inc ('z') = 'A'; dec ('0')='_', pred ('9 ') = '8'; ord ('b') = 2.
Речові типи даних
Нагадаємо, що ці типи даних є арифметичними, але не порядковими.