www.ua5.org > Програмування мовою Pascal > Використання типу - Запис
Використання типу - Запис10 марта 2008. |
|
Записи дозволяють об'єднати під одним іменем дані різних типів. Це зручно для рішення різноманітних задач. Спочатку треба описати тип-запис за допомогою слова Record: Type Student=Record FIO:String[30]; Rogd:Integer; Zrist:Real; Ocinku:Array[1..5] of Byte; End; Запис складається з окремих полів, кожне поле має свій тип. Кількість полів необмежена, порядок їх проходження будь-який. Поле, в свою чергу, може бути записом, для цього попередньо, описують відповідний тип, наприклад: Type Data=Record Rik : Integer; Mis : 1..12; Chislo : 1..31; End; Тепер на тип Data можна посилатись в інших записах, наприклад: Rogd : Data; Змінні типу „запис” описуються звичайним способом, наприклад: Var StudEK, StudMO : Student; Для таких змінних компілятор розподілить пам’ять відповідно з проходженням полів і їх типом. Щоб звернутися до якого-небудь поля, вживають складені імена, перша частина яких — ім’я змінної, а друга — ім'я поля. Наприклад: StudEK.Fio := 'Петренко A.M.'; Якщо поле є в свою чергу запис, то складене ім'я подовжується, наприклад: StudEK.Rogd.Rik := 1975; Втому випадку, коли поле — масив, є можливість звернутися до його окремого елементу: StudEK.Ocinku[k]. Складені змінні вживають, як звичайні змінні в різних конструкціях програми. В одній програмі може бути декілька різних записів (без обмежень). Записи можна об'єднувати в масив, наприклад: Var Kurs1 : Array[l..25] of Student; I в цьому випадку можна звертатися до окремого запису або до конкретного поля якого-небудь запису, наприклад: Kurs1[i]; Kurs1[i].FIO; Kurs1[i].Rogd.Rik Kurs1[i].Ocinku[k]; Щоб ввести або вивести запис, треба ввести/вивести відповідні поля, наприклад: Readln(StudEK.Fio); For i:=l to 5 do Read(StudEK.Ocinku[i]); Writeln(StudEK.Fio); For i:=l to 5 do write(StudEK.Ocinku[i]); Для введення/виведення масиву записів використовують цикл. Деяка незручність виникає в зв'язку з використанням довгих складених імен. Конструкція With дозволяє в якійсь мірі зменшити її. Для цього треба визначити область дії конструкції, наприклад: With StudEK do begin ..... End; В визначеній області замість довгого складеного вживають більш просте ім'я, наприклад: Readln(Fio); For i:=1 to 5 do Read(Ocinku[i]); Zrist := 180; Якщо в програмі використовується декілька записів з однаковими іменами полів, треба бути обережним з вживанням With, щоб не сталося плутанини. В загальному випадку виділяють два види задач: обробка одиноких записів та обробка масивів записів. Перший вид зустрічається, наприклад, в інформаційно-довідкових системах, коли вся інформація зберігається в файлі і треба одержати яку-небудь довідку, наприклад, скільки в групі студентів вчиться на 4 та 5. Для розв'язання такої задачі достатньо читати з файлу запис за записом і аналізувати відповідне поле. Масив записів вживають в тих випадках (хоча це не є економне використання пам'яті), коли для розв'язування задачі треба мати в пам'яті всі записи, наприклад, при сортуванні записів по якій-небудь ознаці (середній бал успішності, зріст студентів, тощо). Приклад. Вивести список студентів, що навчаються на 4 та 5. Програма: Type S=Record FIO:String; GR:Word; GP:Word; O:Array[1..3] of Byte; End; Var a:Array[1..10] of S; i,j,n:Byte; B:Boolean; Begin Write('Kolichestvo students:'); Readln(n); For i:=1 to n do Begin Writeln('Student-',i); Write('Input FIO:'); Readln(a[i].FIO); Write('Input god rogdenia:'); Readln(a[i].GR); Write('Input god postuplenia:'); Readln(a[i].GP); For j:=1 to 3 do Begin Write('Input ',j,' ocenku:'); ReadLn(a[i].O[j]); End; End; For i:=1 to n do Begin B:=True; For j:=1 to 3 do If a[i].O[j]<4 Then B:=False; If B=True Then Writeln(a[i].FIO:30); End; End. |