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

§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.

Схожі матеріали
14.10.2024 ІНСТРУКТИВНО-МЕТОДИЧНІ МАТЕРІАЛИ ДО ОРГАНІЗАЦІЇ САМОСТІЙНОЇ РОБОТИ OK "ВЕРИФІКАЦІЯ, ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ"
14.10.2024 Матеріали лекційного курсу ОК "ВЕРИФІКАЦІЯ, ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ"
14.10.2024 Інструктивно-методичні матеріали до лабораторних занять ОК "Розподілені бази даних та знань"
14.10.2024 Інструктивно-методичні матеріали до лекційних занять ОК "Розподілені бази даних та знань"
14.10.2024 Інструктивно-методичні матеріали до лабораторних занять і самостійної роботи з дисципліни "Математичне моделювання динамічних систем і процесів"
14.10.2024 Інструктивно-методичні матеріали до самостійної роботи ОК "Розподілені бази даних та знань"
14.10.2024 Матеріали лекцій з дисципліни "Математичне моделювання динамічних систем і процесів"
14.10.2024 Інструктивно-методичні матеріали до лабораторних занять OK "АРХІТЕКТУРА ТА РОЗРОБКА ІНФОРМАЦІЙНИХ СИСТЕМ"
14.10.2024 Інструктивно-методичні матеріали до лабораторних занять ОК "ВЕРИФІКАЦІЯ, ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ"
13.10.2024 Методичні рекомендації до викoнaння квaліфікaційних (диплoмних) рoбіт здoбувaчaми вищoї oсвіти другoгo (мaгістерськoгo) рівня oсвітньo-прoфесійнoї прoгрaми «Кoмп’ютерні нaуки»

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

Останні створені тести
30.09.2021 Інтерпретація тексту. Доперекладацький аналіз і редагування письмових текстів.
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
26.09.2012 Мовнокомунікативна компетентність. Орфографічна складова
31.05.2012 Lexikalisch-grammatischer Test. Тест для студентів 1 курсу неспеціальних факультетів.
30.05.2012 Landeskunde (Schweiz,Österreich,Deutschland) Тест для студентів 2 курсу неспеціальних факультетів
12.12.2010 ПОЧАТКИ АЛГОРИТМІЗАЦІЇ. ВСТУП ДО ПРОГРАМУВАННЯ
Рекомендовані лекції
09.02.2023 Лекційний курс з ОК Основи медичних знань і безпека життєдіяльності
12.02.2023 Лекційний курс з ОК Фінансове та податкове право
15.10.2024 Цифрові трансформації в готельно-ресторанному бізнесі (лекції)
15.09.2020 Лекція.Торговельна та гуманітарна політика Європейського Союзу
24.04.2020 Практичні методи ознайомлення дітей з природою (праця дітей у природі)
21.09.2024 Тема 4-5: Психологічні засади педагогічного спілкування та управління. Психологічні основи педагогічної взаємодії.
09.03.2016 ОС та СП. Тема 3. Керування пам'яттю. Тези
20.04.2023 Епістемологія та методологія наукового пізнання
28.09.2014 Лекції з курсу "Диференціальна психологія"
27.09.2023 Ковтун Н. Матеріали лекції з ОК Філософія науки_Тема 1