Лекції >> Програмування, комп’ютери і кібернетика >> Записи

§1. Записи

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

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

Type

     Day=1..31;

     Month=1..12;

     Era=1900..2000;

     Date=Record

            ;  Month=1..12;

     Era=1900..2000;

     Date=Record

                 Chislo : Day;

                Mesayc : Month;

                    God : Era;

             End;

Над записами припустимі операції присвоєння, перевірки на рівність і нерівність, ввід та вивід       Chislo : Day;

                Mesayc : Month;

                    God : Era;

             End;

Над записами припустимі операції присвоєння, перевірки на рівність і нерівність, ввід та вивід.

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

ім'я запису. ім'я поля

Робота з записами

Program Rec;

Type

  Book = record

    Tittle: string [80];     {назва}

    Author: string [20];  {автор}

p;          God : Era;

             End;

Над записами припустимі операції присвоєння, перевірки на рівність і нерівність, ввід та вивід.

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

ім'я запису. ім'я поля

Робота з записами

Program Rec;

Type

  Book = record

    Tittle: string [80];     {назва}

    Author: string [20];  {автор}

    Year : integer;          {рік видання}

  End;

Var

  X,Y: Book;

  Z: Array [1.. 100] Of Book;

Begin

  X.Tittle:='Війна та мир';

  X.Author:=‘Толстой';

  X.Year:=1980;

  Y:=X'

  WriteLn(Y. Head, Y. Author);

  Z[5]:=X

End.

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

Type

  Full Name=Record

    Surname: String;

    Name: String[20];

  End;

  Book=Record

    Tittle: String;

    Author: Full Name;

    Year: Integer;

  End

Якщо поле є записом, звертання до його елементів відбувається по імені, що складається з трьох частин, наприклад, X.Author.Surname. Глибина вкладення описів не обмежена.

Оператор WITH

Цей оператор для тих, хто не любить багато писати. Він дозволяє скоротити звертання до полів запису. Його схема така:

WITH ім'я запису DO оператор

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

Type

     Bal=2..5;

     Month=1..12;

     Ocenca=Record

                  Matem : Bal;

                  Pedag : Bal;

                  Phiz : Bal;

                End;

Var

    Dipl : Ocenca;

    With Dipl do

       Begin

          Write('Матeматика - ');

          ReadLn(Matem);

          Write('Педагогика - ');

          ReadLn(Pedag);

          Write('Физика - ');

          ReadLn(Phiz);

        End

Послідовний пошук

Комп'ютер ідеально пристосований для роботи з великим обсягом інформації: телефонним довідником, адресною книгою, бібліотечним каталогом. Для схову такої інформації підходить масив записів.

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

Самий простий алгоритм пошуку - послідовний. Він полягає в тому, що у всіх записах послідовно, починаючи з першого, перевіряється значення ознаки, по якому ведеться пошук. Нехай потрібно знайти всіх осіб жіночої статі. Це можна зробити так

    For I:=1 to N Do

     If Body[I].Sex=’ж’ Then WriteLn(I:5, Body[I].Famel)

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

Двійковий пошук

Загальною властивістю алгоритмів послідовного пошуку є те, що час пошуку прямопропорційний кількості записів. Чи можна шукати швидше? Виявляється що так, якщо масив записів відсортований за значенням шуканої ознаки.

Розглянемо такий алгоритм пошуку слова в словнику.

1.    Відчинити словник посередині.

2.    Порівняти шукане слово з тим, що всередині словника.

3.    Якщо слова збігаються, пошук завершений.

4.    Якщо слово всередині більше шуканого, продовжити пошук у першій половині словника.

5.    Якщо слово всередині менше шуканого, продовжити пошук у другій половині словника.

Слова "продовжити пошук" означають застосування алгоритму в цілому до половини словника. Зрештою, або слово буде знайдено, або поділяти навпіл буде нічого, виходить, слова в словнику немає.

Словник можна зберігати в масиві записів, початок і кінець області пошуку запам'ятовувати в особливих змінних. Запис словника повинен мати окреме поле, значенням якого є слово.

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

Приклад програми

Program Spisok;

Const

     N=15;

Type

     Day=1..31;

     Bal=2..5;

     Month=1..12;

     Era=1900..2000;

     Ocenca=Record

         Matem : Bal;

         Pedag : Bal;

          Phiz : Bal;

     End;

     Date=Record

         Chislo : Day;

         Mesayc : Month;

            God : Era;

      End;

     Student=Record

         Famel : String[15];

          Name : String[15];

          Born : Date;

           Sex : Char;

          Dipl : Ocenca;

      End;

Var

    I : Integer;

    Body : Array [1..N] of Student;

BEGIN

    For I:=1 to N do

      Begin

         With Body[I] do

            Begin

                Write('Фамилия - ');

                ReadLn(Famel);

                Write('Имя - ');

                ReadLn(Name);

                Write('Число рождения - ');

                ReadLn(Born.Chislo);

                Write('Месяц рождения (1 - 12)- ');

                ReadLn(Born.Mesayc);

                Write('Год рождения - ');

                ReadLn(Born.God);

                Write('Пол (м/ж) - ');

                ReadLn(Sex);

                With Dipl do

                  Begin

                    Write('Матeматика - ');

                    ReadLn(Matem);

                    Write('Педагогика - ');

                    ReadLn(Pedag);

                    Write('Физика - ');

                    ReadLn(Phiz);

                  End

            End;

         End;

    For I:=1 to N Do

     If Body[I].Sex=’ж’ Then WriteLn(I:5, Body[I].Famel)

END.

Схожі матеріали
05.10.2012 Введення та виведення даних, розробки та опису лінійних програм.
20.12.2011 Pascal - лабораторні роботи - для студентів III-го курсу (лекції Ляшенко Б.М.)
12.12.2010 Робота з підпрограмами
12.12.2010 Робота з рядковими та символьними величинами.
12.12.2010 Робота з циклічними програмами
12.12.2010 Робота з масивами даних.
12.12.2010 Розробка та описання програм з розгалуженнями
12.12.2010 Початки програмування
12.12.2010 Етапи розв’язання задач з використанням ЕОМ
12.12.2010 Поняття про алгоритм

Тести даної категорії
12.12.2010 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ

Останні створені тести
28.03.2016 Ахметов Р. Ф. Основи наукових досліджень. Тести. 500 питань
16.11.2015 Олімпійські ігри Стародавньої Греції. Відродження олімпійських ігор. Олімпійський рух сучасності.
28.10.2015 British Writers. Тест для студентів 4 курсу ННІ педагогіки
27.10.2015 The Passive Voice. Тест для студентів 2 курсу ННІ педагогіки
27.10.2015 Articles. Тест для студентів 1 курсу неспеціальних факультетів
27.10.2015 The Active Voice. Тест для студентів 2 курсу ННІ педагогіки
08.10.2014 INTEL
22.10.2012 Цивільний захист
28.09.2012 Питання для поточного контролю
26.09.2012 Мовнокомунікативна компетентність. Орфографічна складова
Рекомендовані лекції
28.03.2016 ОС та СП. Тема 6. Планування. Слайди
28.09.2014 Лекції з курсу "Сучасні підходи у психології особистості" для студентів VІ курсу спеціальностей 8.03010201 Психологія та 8.03010301 Практична психологія
12.12.2010 Обробка графічної інформації
12.12.2010 Введення, виведення даних. Лінійні програми
12.12.2010 Рядки символів
09.12.2014 Лекції з ЦЗ для студентів 6-х курсів денної форми навчання
12.12.2010 Константи, змінні. Типи даних
12.12.2010 РЕДАКТОР TURBO PASCAL 5.5
12.12.2010 Переборні задачі
28.09.2014 Лекції з курсу "Основи психокорекції"