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

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

Схожі матеріали
07.03.2023 ІНСТРУКТИВНО-МЕТОДИЧНІ МАТЕРІАЛИ ЛАБОРАТОРНИХ ЗАНЯТЬ ОК "Технології комп’ютерного проектування"
07.03.2023 МАТЕРІАЛИ ЛЕКЦІЙНОГО КУРСУ ОК "Технології комп’ютерного проектування"
27.02.2023 ІНСТРУКТИВНО-МЕТОДИЧНІ МАТЕРІАЛИ ДО ДО ВИКОНАННЯ ТА ЗАХИСТУ КУРСОВИХ РОБІТ З ПРОГРАМУВАННЯ ІНСТРУКТИВНО-МЕТОДИЧНІ МАТЕРІАЛИ ДО ВИКОНАННЯ ТА ЗАХИСТУ КУРСОВИХ РОБІТ З ПРОГРАМУВАННЯ
21.02.2023 Web-технології та web-дизайн
21.02.2023 Web-технології та web-дизайн
14.02.2023 Булеві функції. Мінімізація булевих функцій
12.02.2023 Комбінаторний метод мінімізації булевих функцій
05.10.2012 Введення та виведення даних, розробки та опису лінійних програм.
20.12.2011 Pascal - лабораторні роботи - для студентів III-го курсу (лекції Ляшенко Б.М.)
12.12.2010 Робота з підпрограмами

Тести даної категорії
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.12.2010 Введення, виведення даних. Лінійні програми
09.02.2023 Лекційний курс з ОК Вступ до спеціальності
20.02.2023 ІММ до лабораторних занять з ОК Компютерно-аналітична діяльність (КН)
26.09.2012 Програмне забезпечення (ПЗ). Апаратне забезпечення інформаційної системи
20.04.2023 Сучасна система наукової інформації, наукометрія, трансфер технології та управління науковими проектами
10.02.2023 Тема 8. Елементи теорії ігор
18.02.2023 Тема 5. Хмарні сервіси для візуалізації даних
12.02.2023 Матеріали лекційного курсу з ОК Юридична психологія 081 Право
09.02.2023 Лекційний курс з ОК Операційний менеджмент