Комбінований тип даних

Все структуровані типи даних, з якими ми вже познайомилися, являють собою сукупності однотипних величин. Комбінований тип даних - це структурований тип, що складається з фіксованого числа компонент (полів) різного типу. Комбінований тип має ще й іншу назву - запис.

Зазвичай запис містить сукупність різнотипних атрибутів, що відносяться до одного об'єкту. Наприклад, анкетні відомості про студента вузу можуть бути представлені у вигляді інформаційної структури (рис. 35).

Така структура називається дворівневим деревом. У Паскалі ця інформація може зберігатися в одній змінної типу Record (запис). Задати тип і описати змінну можна наступним чином:

Curs: 1..5; (Або елементи)

Var Student: Anketa1;

Такий запис, так само як і відповідне їй дерево, називається дворівневою.

До кожного елементу записи можна звернутися, використовуючи складене ім'я, яке має наступну структуру:

<имя переменной>.<имя поля>

Наприклад, student. fio; student. dat і т.п. Якщо, наприклад, потрібно полю курс привласнити значення 3, то це робиться так:

Поля запису можуть мати будь-який тип, зокрема самі можуть бути записами. Така можливість використовується в тому випадку, коли у Вас можуть запитати багаторівневе дерево (більше 2 рівнів). Наприклад, ті ж відомості про студентів можна відобразити трирівневим деревом (рис.36).

Така організація даних дозволить, наприклад, робити вибірки інформації за роком народження або по місту, де живуть студенти. У цьому випадку опис відповідного запису буде виглядати так:

Var Student: Anketa2;

Поля такого запису, що знаходяться на третьому рівні, ідентифікуються потрійним складовим ім'ям.

Наприклад, student.Dat.God; student.Adres.Gorod.

Наведемо структурограмму завдання комбінованого типу (мал.37).

У програмі можуть використовуватися масиви записів. Якщо на факультеті 500 студентів, то все анкетні дані про них можна уявити в масиві:

Var Student: Array [1..500] Of Anketal;

В такому випадку, наприклад, рік народження п'ятого в списку студента зберігається в змінної student [5] .Dat.God.

Будь-яка обробка записів, в тому числі введення і виведення, проводиться поелементно. Наприклад, введення відомостей про 500 студентів можна організувати таким чином:

For I: = 1 Те 500 Do

With Student [I] Do

Write ( 'Пол (м / ж):'); ReadLn (Pol);

Write ( 'Дата народження:'); ReadLn (Dat);

Write ( 'Стипендія (руб.):'); ReadLn (Stip)

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

With <переменная типа запись> Do <оператор>;

Він дозволяє, один раз вказавши ім'я змінної типу запис після слова With, працювати в межах оператора з іменами полів як зі звичайними змінними, т. Е. Писати громіздких складових імен.

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

Приклад 1. Сформувати файл FM.dat, що містить екзаменаційну відомість однієї студентської групи. Записи файлу складаються з наступних елементів: прізвище, ім'я, по батькові; номер залікової книжки; оцінка.

Var Fstud: File Of Stud;

Write ( 'Кількість студентів в групі?');

Write (I: 1, '- й, Прізвище І.О.'); ReadLn (S.FIO);

Write ( 'Номер заліковки:'); ReadLn (S.Nz);

WriteLn ( 'Формування файлу закінчено!');

Перш ніж перейти до наступного прикладу, пов'язаного з обробкою сформованого файлу, розглянемо ще один засіб роботи з файлами, яке ми поки не обговорювали.

Прямий доступ до записів файлу

У стандарті мови Паскаль допустимо тільки послідовний доступ до елементів файлу. Однією з додаткових можливостей, реалізованих в Турбо Паскалі, є прямий доступ до записів файлу.

Тут FV - ім'я файлової змінної, n - порядковий номер елемента. У наступному прикладі ця процедура буде використана.

Приклад 2. Є файл, сформований програмою з попереднього прикладу. Нехай деякі студенти перездати іспит і отримали нові оцінки. Скласти програму внесення результатів переекзаменування в файл. Програма буде запитувати номер студента у відомості і його нову оцінку. Робота закінчується, якщо вводиться неіснуючий номер (9999).

Var Fstud: File Of Stud;

Write ( 'Номер в відомості?');

While N<>9999 Do

Write ( 'Номер в відомості?');

Приклад вимагає деяких пояснень. Список студентів у відомості пронумерований, починаючи від 1, а записи в файлі нумеруються від 0. Тому, якщо n - це номер у відомості, то номер відповідного запису в файлі дорівнює n-1. Після прочитання записи «номер n-1» покажчик зміщується до наступної n-й записи. Для повторного занесення на те саме місце виправленої записи повторюється установка покажчика.

Схожі статті