СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

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

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Работа с записями»

Тема: "Работа с записями".

Цель работы: 

Получение практических навыков по разработке алгоритмов с объединением разнородных элементов.


Количество часов на выполнение работы

Продолжительность выполнения данной практической работы составляет 2 академических часа.


Оборудование

Аппаратное обеспечение: персональный компьютер следующей конфигурации:

  • процессор не ниже Intel i3;

  • жесткий диском со свободным объемом не менее 1 Гб;

Программное обеспечение:

  • операционная система Windows 7 / 8 / 8.1 / 10.

  • установленная среда программирования PascalABC.


Краткие теоретические сведения

Как мы уже выяснили, массивы объединяют однородные единицы информации – элементы одного и того же типа. Но многообразие информации нельзя свести только к какому-то одному типу данных. Например, указывая положение точки в пространстве, мы можем воспользоваться одним и тем же типом для указания ее координат, но, описывая человека, мы должны указать его имя, рост, цвет глаз и волос, то есть в одном описании объединим разнородную информацию. Точно так же, описывая автомобиль, мы укажем не только его марку, но и год выпуска, модификацию, да и цвет кузова может нас заинтересовать. Составляя автоматизированный каталог книгохранилища, мы для каждой книги должны указать ее название, имя автора, область знания, количество страниц, год издания, а также, возможно, признак нахождения на руках или в хранилище.

Данные такого рода, описывающие существенные стороны того или иного объекта путем включения в описание нескольких, часто разнотипных, элементов, называют записью (record). В языке Паскаль запись определяется путем указания служебного слова record и перечисления входящих в запись элементов с указанием типов этих элементов.

Запись Паскаля – структурированный комбинированный тип данных, состоящий из фиксированного числа компонент (полей) разного типа.

Например, анкетные данные о студенте вуза могут быть представлены в виде информационной структуры

Рисунок 1 - Запись

Такая структура называется двухуровневым деревом. В Паскале эта информация может храниться в одной переменной типа record (запись). Задать тип можно следующим образом:

type =record

: тип;

: тип;

: тип 

end ;

где record – служебное слово, а и - правильные идентификаторы языка Паскаль.

Описание анкеты студента в Паскале будет выглядеть так:

Type anketa=record

fio: string[45]; 

pol: char;

dat_r: string[8]; 

adres: string[50]; 

curs: 1..5; 

grupp: string[3];

end;

Такая запись Паскаля, так же как и соответствующее ей дерево, называется двухуровневой.

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

Рисунок 2 – Многоуровневая запись

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

Пример фрагмента программы описания записи Паскаля

Type anketa1=record

   fio: string[45]; 

   pol: char;

   dat_r: record;

   god: integer; 

   mes: string[10]; 

   den: 1..31;

end; 

adres: record

   gorod: string[25]; 

   ulica: string [20]; 

   dom, kv: integer;

end; 

curs: 1..5; 

   grupp: string[3]; 

end;

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

var 

student: anketa; 

student 1: anketa 1;

Теперь нам нужно узнать, как правильно получать доступ к элементам записи Паскаля. Элементы записи называются полями, а обращение к ним производится через использование их имен – идентификаторов полей. Практически, поля записи обрабатываются точно так же, как и любые другие переменные. Но в отличие от обычной переменной имена полей должны предваряться ссылкой на идентификатор записи Паскаля и отделяться от него точкой. Такая запись называется уточняющий идентификатор:

.

Например, чтобы обратиться к полю curs переменной student , необходимо указать следующее составное имя:

student.curs :=3;

Для того чтобы обратиться к полю god в записи student 1, необходимо записать уточняющий идентификатор, состоящий из трех имен:

student1.dat_r.god:=1982;

Использование полей записи Паскаля в выражениях и условиях идентично использованию обычных переменных.

Операции над записями Паскаля (это важно!)

Единственная операция, которую можно произвести над однотипными записями Паскаля – это присваивание. Все другие операции производятся над отдельными полями записи.

Префикс – обязательная предшествующая часть составного идентификатора для имен полей в структуре типа запись Паскаля. Очень часто у программиста возникает желание не указывать префикс в имени полей, например, когда идет постоянное использование одних и тех же записей. В языке Паскаль предусмотрена такая возможность, реализуемая при помощи оператора присоединения, который в общем виде выглядит так:

with  do ;

Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end ).

Например, фрагмент из предыдущей программы с использованием оператора присоединения будет выглядеть так:

Пример фрагмента программы c записью и префиксом Паскаля


for I:=1 to 100 do 

   with student[I] do 

   begin 

      writeln ('введите сведения о', I , '-м студенте'); 

      writeln ('введите фамилию, имя и отчество'); 

      readln (fio); 

      writeln ('введите дату рождения'); 

      readln (dat_r); 

      writeln ('введите адрес'); 

      readln(adres); 

      writeln ('введите курс'); 

      readln(curs); 

      writeln ('введите группу'); 

      readln (grupp); 

   end;


Задания по практической работе

  1. Описать тип TDate — запись с полями целого типа Day (день), Month (месяц) и Year (год) — и функцию LeapYear(D) логического типа с параметром типа TDate, которая возвращает TRUE, если год в дате D является високосным, и FALSE в противном случае. Вывести значение функции LeapYear для пяти данных дат (предполагается, что все даты являются правильными). Високосным считается год, делящийся на 4, за исключением тех годов, которые делятся на 100 и не делятся на 400.

  2. Используя тип TDate и функцию LeapYear (см. задание 1), описать функцию DaysInMonth(D) целого типа с параметром типа TDate, которая возвращает количество дней для месяца, указанного в дате D. Вывести значение функции DaysInMonth для пяти данных дат (предполагается, что все даты являются правильными).

  3. Используя тип TDate и функцию DaysInMonth (см. задания 1-2), описать функцию CheckDate(D) целого типа с параметром типа TDate, которая проверяет правильность даты, указанной в параметре D. Если дата D является правильной, то функция возвращает 0; если в дате указан неверный номер месяца, то функция возвращает 1; если в дате указан неверный день для данного месяца, то возвращается 2. Вывести значение функции CheckDate для пяти данных дат.

  4. Используя тип TDate и функции DaysInMonth и CheckDate (см. задания 1-3), описать процедуру PrevDate(D) с параметром типа TDate, которая преобразует дату D к предыдущей дате (если дата D является неправильной, то она не изменяется). Запись D является входным и выходным параметром. Применить процедуру PrevDate к пяти данным датам.

  5. Используя тип TDate и функции DaysInMonth и CheckDate (см. задания 1-3), описать процедуру NextDate(D) с параметром типа TDate, которая преобразует дату D к следующей дате (если дата D является неправильной, то она не изменяется). Запись D является входным и выходным параметром. Применить процедуру NextDate к пяти данным датам.

  6. Описать тип TPoint — запись с полями вещественного типа X и Y (координаты точки на плоскости) — и функцию Leng(A, B) вещественного типа, находящую длину отрезка AB на плоскости по координатам его концов: |AB| =q(A.X −B.X)2 + (A.Y −B.Y)2( A и B — параметры типа TPoint). С помощью этой функции найти длины отрезков AB, AC, AD, если даны координаты точек A, B, C, D.

  7. Используя тип TPoint и функцию Leng (см. задание 6), описать тип TTriangle — запись с полями A, B, C типа TPoint (вершины треугольника) — и функцию Perim(T) вещественного типа, находящую периметр треугольника T (T — параметр типа TTriangle). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

  8. Используя типы TPoint, TTriangle и функции Leng и Perim (см. задания 6-7), описать функцию Area(T) вещественного типа, находящую площадь треугольника T (T — параметр типа TTriangle) по формуле Герона: SABC = √p·(p−|AB|)·(p−|AC|)·(p−|BC|), где p — полупериметр. С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

  9. Используя типы TPoint, TTriangle и функции Leng и Area (см. задания 6-8), описать функцию Dist(P, A, B) вещественного типа (P, A, B — параметры типа TPoint), находящую расстояние D(P, AB) от точки P до прямой AB по формуле D(P,AB) = 2·SPAB/|AB|, где SPAB — площадь треугольника PAB. С помощью этой функции найти расстояния от точки P до прямых AB, AC, BC, если даны координаты точек P, A, B, C.

  10. Используя типы TPoint, TTriangle и функцию Dist (см. задания 6-7, 9), описать процедуру Heights(T, h1, h2, h3), находящую высоты h1, h2, h3 треугольника T (T — входной параметр типа TTriangle, h1, h2, h3 — выходные вещественные параметры), проведенные соответственно из вершин T.A, T.B, T.C. С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.