Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 13: Складні типи. Масиви

Нестандартні типи. Тип, що перелічується. Обмежений (интервальный) тип.

Тип, що перелічується, складається зі списку констант. Змінні цього типу можуть приймати значення кожної з цих констант. Опис типу, що перелічується, має вид:

type ім'я типу = (список констант);

var ім'я змінної : ім'я типу;

Список констант являє собою перелік констант, розділених комами. Константи задає користувач, а сам список полягає в круглі дужки. Наприклад:

type

num = (one, twо, three, four, five);

var

n1 : num;

Тут num ім'я типу, що перелічується; (one, twо, three, four, five) – список констант; one – значення першої константи, two – другий і т.д.; n1 – змінна, котра може приймати значення будь-якої константи.

Кожна з констант, що перелічуються, у списку має свій порядковий номер. Перша константа має номер 0, друга – 1, і т.д., тобто константи в списку упорядковані, що дозволяє застосувати до них операції відносини <, <=, =, <>, >=, >. Результат операцій логічного типу – True чи False.

Якщо в програмному блоці описується кілька перечислювальних типів, то константи в їхніх списках не повинні повторюватися.

У Раsсаl-і неможна вводити і виводити дані типу, що перелічується, за допомогою операторів Read і Write.

До змінних і констант типу, що перелічується, можна застосовувати стандартні функції Ord, Pred, Succ.

Застосовуючи функцію Ord до значення типу, що перелічується, одержимо його порядковий номер у списку. Приклад.

type

num = (one, twо, three, four, five);

var

n1, n2: num;

pn1, pn2: integer;

begin

n1:= two;

n2:= succ(four);

pn1:= ord(n1)+1;

pn2:= ord(n2)+1;

writeln(‘порядковий номер two=’,pn1);

writeln(‘порядковий номер числа після four=’,pn2);

end.

У Pascal допускається вказувати константи типу, що перелічується, у розділі Var без використання роздягнула Type. Так, у попередньому прикладі можна було записати:

var

n1, n2: (one, twо, three, four, five);

pn1, pn2: integer;

begin

. . .

однак, це поганий стиль програмування.

Обмежений (інтервальний) тип. При описі обмеженого типу вказують дві константи початкового і кінцевого значення діапазону для даної змінної, розділені двома крапками. Значення першої константи завжди повинне бути менше значення другої.

Опис обмеженого типу має вид:

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

var ім'я перемінної: ім'я типу;

Обидві константи повинні належати одному зі стандартних типів. Тип Real – не допустим.

Приклад 1:

Const

Min = 1;

Max = 100;

Type

Tempersture = min .. max;

Var

Temp: temperature;

. . .

Приклад 2:

Type

x1 = 1 .. 10;

x2 = -100 .. 100;

x3 = ‘a’ .. ‘z’;

var

n1 : x1;

n2 : x2;

n3 : x3;

. . .

Якщо константи стандартного типу, то опис обмеженості типу (але не обмеженого типу) можна здійснювати безпосередньо в розділі Var, наприклад:

var temp : 1 .. 100;

Тип констант називається базовим. Над змінними обмеженого типу можна виконувати всі операції даних його базового типу.

Застосування обмеженого типу робить програми більш приємними і наочними. Наприклад, якщо в програмі змінна n приймає тільки цілі значення 2, 3, 4, 5, 6, 7, 8, 9 то краще дати опис

var n : 2 .. 9; ніж

var n : integer;

У випадку виходу змінної за межі діапазону 2 .. 9 у першому варіанті легше буде знайти помилку, ніж у другому. Другий варіант застосовується якщо діапазон значень змінної заздалегідь невідомий, чи змінна займає весь припустимий діапазон для даного типу.

Складні типи. Масиви.

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

1.5, 0.8, -6.34, 7.21, 0.43

Якщо її назвати ім'ям А, а конкретне число відзначити індексом:

А1, А2, А3, А4, А5,

то одержимо сукупність чисел, що у математиці та інформатиці називається масивом даних чи вектором.

Масив – це кінцева сукупність даних одного типу, упорядкованих за значеннями індексу. У Pascal кожен елемент масиву позначається ім'ям масиву з індексом, укладеним у квадратні дужки. Так, у приведеному прикладі елементами масиву А є

А[1]=1.5, А[2]=0.8, А[3]=-6.34, А[4]=7.21, А[5]=0.43.

У програмі масив описується або в розділі Var, або в розділі Type. Опис у розділі Var має вид

var ім'я масиву : array[t1] of t2;

де Array (масив) і Of (з) – службові слова; t1 - тип індексу. В якості типу може бути будь-як простий тип, крім Real і Integer; t2 - тип елементів масиву, що називається базовим типом. В якості базового типу може бути простий чи складний тип.

Для приведеного приклада опис масиву має вид

var a : array[1..5] of real;

де А – ім'я масиву, елементи якого мають базовий тип Real. Тип індексу обмежений від 1 до 5.

За причини того, що тип індексу не може бути типу Real чи Integer, опис масиву

var a : array[5] of real;

чи

var a : array[integer] of real;

є помилковим.

Нумерація індексу не обов'язково повинна починатися з 1 чи бути позитивним числом. Наприклад, опис у програмі, що обробляє чисельність населення міста з 1991 по 1996 рік:

var people : array[1991..1996] of integer;

чи з 875 по 1 р. до нашої ери:

var people : array[-875..-1] of integer;

Значеннями індексів можуть бути не тільки числа. Наприклад, опис масиву частоти появи латинських букв:

var chastota_symbol : array[‘A’..’Z’] of integer;

чи середньорічної температури в містах

type city = (Kiev, Zaporojie, Dnepropetrovsk, Alusta, Doneck);

var temperatura : array[city] of real;

Якщо кілька масивів мають однаковий тип індексів і однаковий базовий тип, то в їх опис можна об'єднати в один список. Наприклад. Три масиви A, B, C дійсних чисел, кожний з який містить по 20 елементів:

A[1], A[2], … A[20];

B[1], B[2], … B[20];

C[1], C[2], … C[20];

в описі можна об'єднати в список:

var a, b, c : array[1..20] of real;

В якості індексу може бути вираження (константа і змінна – це окремий випадок вираження). Елемент масиву звичайно називають змінною з індексом.

В операторах присвоювання елементи масиву можуть стояти як у лівій частині, так і в правій частині й у вираженнях:

A[5] := A[3]+2; Sum := Sum + B[2]; Result := A[2*1+2];

Над елементами масиву можна робити ті операції, що припустимі для даних його базового типу.

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

for i :=1 to 5 do

read(a[i]);

організує введення 5 значень елементів масиву А, а цикл

for i :=1 to 5 do

writeln(a[i]);

організує уведення висновок 5 значень елементів того ж масиву.

Приклад. Обчислити суму 20 цілих чисел.

Рішення. Для позначення чисел ведемо ім'я масиву М, елементи якого мають індекс і. Суму позначимо ім'ям Sum. Тоді

Sum = M[1]+M[2]+…+M[20];

Програма має вид:

var m : array[1...20…20] of integer;

i:1…20;{можна i : integer}

sum : integer;

begin

for i := 1 to 20 do begin

read(m[ i ]);

sum :=sum+m[ i ];

end;

writeln(`сума = `,sum)

end.

Тут змінна “i” з одного боку використовується як змінна циклу, а з іншого боку - як індекс. В розділі Var змінну “i” можна вказати обмеженого типу

var m : array[1…20] of integer;

i : 1…20;

чи, зважаючи на те, що елементами обмеженого типу є цілі числа, змінну можна описати як Integer

var m : array[1...20…20]ofinteger;

i:integer;

Опис масивів у розділі Type складається з двох етапів: спочатку в розділі Type указується тип масиву, а потім у розділі Var перелічуються масиви, що відносяться до зазначеного типу.

type ім'я типу = array[ t1 ] of t2;

var ім'я масиву : ім'я типу;

де t1 – тип індексу; t2 – базовий тип елементів масиву.

Приклад. Скласти програму, що визначає ріст найвищого гравця баскетбольної команди.

Програма має вид.

const n=10; {кількість гравців}

type massiv = array[1…n] of integer;

var

sportsman : massiv;

max, i : integer;

begin

{Введення значень росту десяти спортсменів}

writeln(`уведіть ріст 10 спортсменів у див.:`)

for i := 1 to n do

read (sportsman[ і ]);

{визначення найвищого спортсмена}

max :=sportsman [1]);

for i:= 2 to n do

if sportsman[1] >max then max := sportsman[i];

writeln(`ріст найвищого спортсмена = `,max);

writeln

end.

Питання для контролю.

1. Тип, що перелічується, і його опис.

2. Операції, застосовувані до констант типу, що перелічується.

3. Вимоги до констант типу, що перелічується, при описі в програмі декількох типів, що перелічуються.

4. Функції, застосовувані до констант типу, що перелічується.

5. Чи можна застосовувати процедури Read і Write для організації введення і виведення даних типу, що перелічується?

6. Чи можна описувати константи типу, що перелічується, у розділі Var без використання роздягнула Type?

7. Обмежений (інтервальний) тип і його опис.

8. Який тип констант інтервального типу неприпустимий?

9. Які операції можна виконувати над змінними інтервального типу?

10. Коли і з якою метою застосовують інтервальний тип у програмах?

11. Визначення масиву даних. Як у Pascal-і позначається елемент масиву?

12.Опис масиву.

13.Якого типу може бути базовий тип масиву?

14.Якою може бути нумерація індексів елементів масиву?

15.Що може бути в якості індексу елементів масиву?

16.В якому випадку кілька масивів при написанні поєднують в один список?

17.Застосування оператора присвоювання при обробці елементів масиву.

18.Які операції можна робити над елементами масиву?

19.Організація введення і виведення значень елементів масиву.