28634

Структурный тип - Запись

Лекция

Информатика, кибернетика и программирование

Запись как объединение неоднородных данных. Запись как объединение неоднородных данных. Объединение таких данных общий структурный типанкета затруднительно сделать в рамках массива или множества. Этот структурный тип специально введен для объединения любого конечного числа неоднородных данных.

Русский

2013-08-20

49.5 KB

4 чел.

Лекция 16: Структурный тип - Запись.

1. Запись как объединение неоднородных данных.

2. Описание типа Запись и доступ к полям записи.

3. Обработка записей.

4. Примеры программ обработки записей.

1. Запись как объединение неоднородных данных.

До сих пор мы имели дело только со структурными типами, объединяющими в одно целое однотипные данные (массивы или множества). Однако во многих задачах управления и в других областях часто необходимо структурировать неоднородные (разнотипные) данные. Например, анкета служащего содержит такие данные, как фамилия, имя, отчество (строковый тип), год рождения (целый тип), разряд (целый тип) и многие другие данные. Объединение таких данных общий структурный тип-анкета затруднительно сделать в рамках массива или множества.

Естественным средством структурирования в этом и подобных случаях является структурный тип - Запись. Этот структурный тип специально введен для объединения любого конечного числа неоднородных данных. Объединяемые данные составляют поля записи.

Однако, объединяя неоднородные данные, мы уже не можем рассчитывать иметь эффективный доступ к полям посредством их индексации (т.е. вычислимых имён), как это было в случае массивов: это может привести к несоответствию типов в выражениях. Доступ к полям записи осуществляется посредством составных имён (имён с точкой), имеющим, как и простые имена переменных, статическую природу  (имена, неизменяемые в процессе выполнения программы).

Запись является одной из наиболее общих форм композиции неоднородных данных. Она распространяется не только на объединение полей-типов данных, но и на объединение полей-типов данных с процедурами и функциями, приводя к понятию объекта, как новой категории программных структур. Рассмотрим структурный тип Запись применительно к объединению полей-типов данных.

2. Описание типа Запись и доступ к полям записи.

Тип Запись описывается в следующей форме:

type < имя типа-запись> = record < список полей > end;

где: < список полей > - последовательность разделов, разделяемых точкой с запятой; каждый раздел  имеет структуру < список имен полей > : < тип поля >. Типом поля может быть любой тип, кроме типа файл. Если тип поля также является записью, мы имеем дело с иерархической структурой записей. Например:

type stud = record  numb:byte;name:string[16]; aver:real end;{запись о студенте}

       gr = record title:string; studs: array[1..15] of stud; end; {данные о группе }

Для работы с записями необходимо описать переменные типа-запись.

Например: var stud1:stud; {данные о студенте styd1}  grA1:gr; {группа А1}

Допустимы также типизированные константы типа-запись, устанавливающие значения полям записи в виде списка констант-полей, перечисляемых через точку с запятой. Например:

const st00:stud = (numb:0; name:''; aver:0.0);

Доступ к элементам записи осуществляется посредством составного имени, в котором указывается имя переменной-записи и имя поля записи, разделяемые точкой. Так, например, доступ к полю среднего балла студента stud1 имеет вид: stud1.aver. Если запись описывает иерархическую структуру с несколькими уровнями, то составное имя содержит кроме имени записи также имена всех промежуточных полей-уровней, разделяемые точками. Например, для доступа к полю среднего балла 8 студента группы следует использовать составное имя: grA1.studs[8].aver.

3. Обработка записей.

Для составных имён допустимы все те же средства обработки, что и для простых переменных: операторы присваивания и использование имен при построении выражений или условий. Так для составных имен оператор присваивания имеет вид:

< составное имя > := < выражение соответствующего типа-поля >;

Например: gr1.studs[8].aver:=4.6;

При обработке записей можно избежать использования полных имен полей записей, используя специальный оператор with. Оператор присоединения with  позволяет упростить доступ к полям записей за счёт выделения "общих частей" в составных именах. Оператор with имеет следующую синтаксическую структуру:

with < переменная > do < оператор >;

где: < переменная > - имя переменной-записи, за которым может также следовать иерархический список полей (разделяемых точкой);

      < оператор > - любой оператор Турбо Паскаля. В нём можно использовать имена полей вместо составных имён. Последовательность операторов, выполняемых внутри оператора with должна заключаться в скобки begin  end .

Оператор with является единственным видом операторов, введенным специально для обработки записей. Во всем остальном обработка записей опирается на обычные средства Турбо Паскаля, доступные для большинства типов.

Удобным оператором обработки записей является оператор выбора case-of , ветви которого можно эффективно использовать для обработки полей, сопоставляя каждой ветви поле записи.

Тип Запись может иметь вариантную часть, которая способна изменяться при различных выполнениях программы, обеспечивая различную структуру записи при разных выполнениях. По структуре вариантная запись подобна оператору выбора case-of, но у ключа выбора может быть указан тип (любой порядковый тип). После of перечисляются поля записи в форме:

< константа выбора> : ( < список полей > );

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

     Замечание

В Турбо Паскале имеется стандартный тип-запись DateTime для представления даты и времени. Имеется ряд стандартных процедур и функций работы с этими типами, описываемые подробно в справочной литературе.

4. Пример программы обработки записей.

Приведем пример простой программы на Турбо Паскале, иллюстрирующей обработку записей:

 

      program stud_group;

       { Ввод списка группы и сортировка по убыванию среднего балла}

       uses CRT;

        type stud =record num:byte; {номер}

        name:string[15]; {Фамилия И.О.}

        average:real  {Средний балл}

       end; {тип  stud - Запись данных о студенте}

                  group =array[1..5] of stud; {тип group - список данных о 5 студентах}

          var A:group; {Список группы студентов}

      j,k,l:byte;max:real;

      begin ТextBackground(cyan); TextColor(white); ClrScr;

               window(10,5,60,22); TextBackground(green); ClrScr;

               writeln('Ввод данных о студентах:');writeln('N   Ф.И.О.       Средний балл');

                  for j:=1 to 5 do {чтение данных о студенте} with A[j] do                       readln(num,name,average);

                  writeln('Успеваемость группы:');max:=A[1].average;l:=1;

    { Вывод данных из А в порядке убывания среднего балла}

                  for j:=1 to 5 do {вывод данных с макс. средним баллом}

                            begin for k:=1 to 5 do { поиск элемента с макс.средним баллом}

                     with A[k] do if average>max then  begin max:=average;l:=k end;

                             with A[l] do {вывод и обнуление в А выведенных данных}

                  begin writeln(name,' ',average:1:2);average:=0;max:=0

                  end    end {Окончание вывода сортированных данных}

       end { stud_group}.

Запись stud можно спроектировать с вариантной частью, содержащей выбор поля-среднего балла или поля-оценки на экзамене, а в программе обработки записей предусмотреть ввод и вывод либо данных только со средним баллом, либо с экзаменационными оценками. Модифицированная таким образом программа stud_group имеет следующий вид:

 program stud_group1;

       { Ввод списка группы и сортировка по убыванию балла}

       uses CRT;

        type stud =record num:byte; {номер}

          name:string[15]; {Фамилия И.О.}

          case j:byte; of 0:(average:real);  {Средний балл}

                                                                1:(exam:0..5); {Балл на экзамене}

        end; {тип  stud - Запись данных о студенте}

                  group =array[1..5] of stud; {тип group - список данных о 5 студентах}

          var A:group; {Список группы студентов}

      j,k,l:byte;max:real; c:char;

 begin ТextBackground(cyan);TextColor(white);ClrScr;

               window(10,5,60,22);TextBackground(green); ClrScr;

               writeln('Ввод данных о студентах:');writeln(' Средний балл(Y) или Экзамен(N)');

               write('N   Ф.И.О. '); if c='Y' then write('       Средний балл')

                                                         else  write('      Оценка экзамена');

             for j:=1 to 5 do {чтение данных о студенте}with A[j] do 

                    if c='Y' then readln(num,name,average) else readln(num,name,exam);

                  writeln('Успеваемость группы:'); if c='Y' then max:=A[1].average

                                                                                 else  max:=a[1].exam;l:=1;

       { Вывод данных из А в порядке убывания балла}

   for j:=1 to 5 do {вывод данных с макс. баллом}

                            begin for k:=1 to 5 do { поиск элемента с макс. баллом}

            with A[k] do if (с='Y') and (average>max) then  begin max:=average;l:=k end else

                                 if (c<>'Y') and (exam>max)  then begin max:=exam;l:=k end;

                             with A[l] do {вывод и обнуление в А выведенных данных}

                  begin if (c='Y') then  begin writeln(name,' ',average:1:2);average:=0 end 

                                          else   begin writeln(name,' ', exam:1);  exam:=0 end;max:=0

                  end    end {Окончание вывода сортированных данных}

       end { stud_group1}.


 

А также другие работы, которые могут Вас заинтересовать

27246. Визначте характер попиту на ресурси. Розкрийте механізм розподілу доходів у відповідності з теорією граничної продуктивності 24.8 KB
  Визначте характер попиту на ресурси. Попит на ресурси на відміну від попиту на споживчі блага пов'язаний з виробництвом яке здійснює конкретне підприємство фірма. Оскільки метою підприємства є максимізація прибутку то нею визначається й обсяг попиту на ресурси. Для розуміння процесу формування попиту на ресурси необхідно враховувати два моменти: 1 попит на ресурси залежить від попиту на економічні блага вироблені з цих ресурсів тобто попит на ресурси має похідний характер від попиту на продукти; 2 ціни на ресурси залежать від типу...
27247. Механізм ціноутворення на ринку праці. Проаналізуйте модель монопсонії і наведіть приклади монопсонічного ринку з української дійсності. Охарактеризуйте форми і системи заробітної плати 27.01 KB
  График спроса на труд монопсониста это снижающаяся часть кривой предельной доходности труда D = MRPL. Для получения максимальной прибыли монопсонист должен нанять такое количество рабочих при котором предельная доходность труда равна предельным издержкам труда MRPL = MRCL Для получения максимальной прибыли монопсонист должен нанять такое количество рабочих при котором предельная доходность труда равна предельным издержкам труда MRPL = MRCL. Однако монопсонист не будет устанавливать рабочим ставку заработной платы соответствующую...
27249. Проаналізуйте концепції еластичності попиту та пропозиції. Як їх можна застосувати на практиці 32.51 KB
  Як їх можна застосувати на практиці Эластичность спроса или предложения вычисляется как отношение процентного изменения величины спроса предложения к процентному изменению какойлибо детерминанты. производная функции спроса или предложения по цене; рыночная цена; величина спроса или предложения при данной цене основные свойства эластичности: Эластичность это безмерная величина значение которой не зависит от того в каких единицах мы измеряем объем цены или какиелибо другие параметры. Эластичность взаимно обратных функций ...
27250. Обґрунтуйте передумови, сутність і теоретичні висновки базової моделі поведінки споживача. Поясніть “рівновагу споживача”, застосовуючи методологію кардиналістського (кількісного) та ординалістського (порядкового) аналізу 15.28 KB
  Поясніть рівновагу споживача застосовуючи методологію кардиналістського кількісного та ординалістського порядкового аналізу Поведінка споживачів це діяльність безпосередньо пов'язана з придбанням споживанням і позбавленням від продуктів послуг ідей включаючи процеси прийняття рішень Змістовну основу споживчої поведінки складають процес прийняття рішень споживачами Однією з найважливіших тенденцій сучасного бізнесу стає зміна ролі споживачів коли з пасивних покупців із заданою наперед функцією споживання вони перетворюються на...
27251. Визначте економічну природу витрат виробництва. За якими критеріями їх класифікують? Як співвідносяться економічний, бухгалтерський та нормальний прибуток 17.78 KB
  За якими критеріями їх класифікують Як співвідносяться економічний бухгалтерський та нормальний прибуток Економічні витрати це ті виплати які підприємство повинне зробити або ті доходи які підприємство повинно забезпечити постачальнику ресурсів для того щоб відволікти ці ресурси від використання в альтернативних виробництвах. Постійні і змінні витрати. Постійні витрати ПВ це витрати величина яких не залежить від зміни обсягу продукції. Які витрати підприємств є постійними Такі як орендна плата амортизація основного капіталу...
27252. Які витрати виробництва несе фірма (підприємство) в короткому періоді? Поясніть, в тому числі і графічно, взаємозв’язок між ними 35.44 KB
  Які витрати виробництва несе фірма підприємство в короткому періоді Поясніть в тому числі і графічно взаємозвязок між ними. Витрати виробництва за короткостроковий період Взаємозв'язок економічних і бухгалтерських витрат і прибутку Загальна виручка підприємства Економічні витрати Економічний прибуток Явні витрати Витрати на обладнання Сировина Електроенергія Заробітна плата Інші явні витрати Неявні витрати Процент на власний капітал Зарплата підприємця Нормальний прибуток Інші неявні витрати Бухгалтерські витрати Бухгалтерський прибуток У...
27253. Поясніть механізм дії закону спадної віддачі (спадного граничного продукту МР). В чому полягає взаємозв’язок загального (ТР), середнього (АР) та граничного продукту (МР). Чи є спадна продуктивність загальним явищем, притаманним діяльності фірми і в коротк 17.11 KB
  Чи є спадна продуктивність загальним явищем притаманним діяльності фірми і в короткому і в довгому періодах Закон спадної віддачі один із законів ринкової економіки який полягає в тому що з певного моменту послідовне приєднання одиниці змінного ресурсу наприклад праці до незмінного фіксованого ресурсу капіталу або землі дає додатковий або граничний продукт який зменшується в розрахунку на кожну наступну одиницю змінного ресурсу. Середній продукт МР показує середню віддачу продуктивність змінного фактора тобто загальний обсяг...
27254. Ґрунтуючись на характеристиці довгого періоду функціонування фірми, поясніть взаємодію середніх загальних витрат (АТС) у короткому і довгому періодах. Користуючись концепцією позитивного та негативного ефекту масштабу, поясніть форму кривої довгострокових 72.76 KB
  Середні сукупні витрати АТС кількість сукупних витрат виробництва що припадає на одиницю випуску продукції. Довгострокові середні витрати тобто витрати на одиницю продукції формують ціну виробника від рівня якої залежить результат діяльності фірми її успіх на ринку. Якщо ціна виробника виявиться нижчою за ринкову ціну фірма одержить економічний прибуток в іншому разі вона матиме збитки і буде витіснена з ринку тому мінімізація середніх витрат складає основне завдання виробничої діяльності фірми.