Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Labs7-12.doc
Скачиваний:
10
Добавлен:
10.05.2015
Размер:
131.58 Кб
Скачать

Лабораторная работа n 10.

Тип запись.

Цель и задача работы: изучить тип запись. Рассмотрение понятия запись.

Теоретические положения.

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

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

Каждому полю записи дается имя и задается тип этого поля. На тип ограничений не накладывается, т.е. полем записи в свою очередь может являться тоже запись.

Формат описания:

тип-RECORD = "RECORD" список-полей "END"

список-полей = [фиксированная-часть][вариантная-часть]

фиксированная-часть = секция-записи (* ";" секция-записи *)

секция-записи = идентификатор-поля (* "," идентификатор-поля *) ":" тип

идентификатор-поля = идентификатор

вариантная-часть = "CASE" [поле-признака ":"] идентификатор "OF" вариант (* ";" вариант *)

поле-признака = идентификатор

вариант = метка-случая (* "," метка-случая *) ":" [ "(" список-полей ")" ]

метка-случая = константа.

Пример описания переменной, являющейся комплексным числом:

TYPE COMPL=RECORD

RE, IM: REAL;

END;

VAR A, B: COMPL;

Это описание говорит, что создана структура данных (тип) COML, являющийся записью, состоящей из двух полей с именами RE и IМ и имеющих тип REAL. Переменная A является переменной типа COMPL.

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

<составное имя переменной>.<Имя поля>

Например, требуется A присвоить 5.68-I7.32

A.RE:=5.68;

A.IM:=7.32;

Для переменных одного и того же типа записи в языке программирования Паскаль предусмотрено только присваивание: B:=A; более сложным является тип запись в котором поля являются так- же типом записи.

Пример:

TYPE ST=RECORD

FIO: RECORD

F, I, O: PACKED ARRAY [1..15] OF CHAR;

END;

GR: INTEGER;

END;

VAR STUDENT: ST;

STUDENT.FIO.F:='Сычев ';

STUDENT.FIO.I:='Владимир ';

STUDENT.FIO.O:='Станиславович ';

STUDENT.GR:=2114;

При работе с записями обращение к ее элементам приводит к на- писанию достаточно длинных имен, причем имена могут повторятся. Например в нашем случае 4 раза был написан идентификатор STUDENT и 3 раза FIO. Для сокращения таких имен в Паскале введен специальный оператор присоединения.

WITH R DO S, Где R - переменная типа запись, S - любой оператор языка формат оператора:

оператор-WITH = "WITH" список-переменным-записи "DO" оператор

список-переменная-записи = переменная-запись (* "," переменная- запись *)

переменная-запись = идентификатор.

С использованием этого оператора присваивания можно выполнить в виде:

WITH STUDENT DO BEGIN

WITH FIO DO BEGIN

F:='сычев ';

I:='владимир ';

O:='станиславович ';

END;

END;

Вариант заданий:

1) TYPE масть=(пик,трефы,бубны,червы);

достоинство=(шесть,семь,восемь,девять,десять,валет,дама,король, туз);

карта=RECORD

M: масть;

Д: достоинство;

END;

Описать логическую функцию KICK(K1,K2,KM), проверяющую, "бьет" ли карта K1 карту K2, с учетом того, что масть KM является ко- зырной

2) TYPE LINE=PACKED ARRAY [1..15] OF CHAR;

PIC=RECORD

NAME:LINE;

PIC:1000..9999;

END;

SPISOK=ARRAY [1..30] OF PIC;

Описать процедуру, печатающую название самой высокой вершины из списка

3) TYPE POINT1=ARRAY [(X,Y)] OF REAL;

POINT2=RECORD

X, Y: REAL;

END;

VAR P1: POINT1; P2: POINT2; D: REAL;

Переменной D присвоить расстояние между точками P1 и P2.

4) Описать переменную "студент", содержащую: имя, фамилию, отчество студента, название учебного заведения, номер группы. Создать список студентов (N>10). Определить фамилии студентов, учащихся в одной и той же группе, в одном и том же заведении

5) Описать переменную "адрес", содержащую: название города, название улицы, номер дома, корпус, номер квартиры. Создать массив адресов. Поменять местами номер дома в N-ом адресе и номер квартиры в M-ом адресе

6) Описать переменную "студент" (см. Вариант 4). Создать список студентов (N>10). Определить названия учебных заведений в которых учатся однофамильцы и если у них одинаковые имена, то сообщить, что они тезки

7) Описать переменную "служащий", состоящую из: имени, фамилии, отчества служащего, даты рождения, полученного образования, домашнего адреса, профессии. Создать список служащих (N>10). Определить имена людей с высшим образованием. Выдать данные о служащем, который имеет ту или иную профессию.

8) Описать переменную "круг", в которой содержатся все данные для построения круга в декартовой системе координат. Определить площадь и длину окружности круга 9) Описать комплексное число. Умножить одно число на другое

10) Описать переменную "экзаменационная ведомость" (предмет, номер группы, список студентов данной группы, их оценки). Определить отличников, хорошистов, троечников и двоечников

11) Создать записи определяющие положение точки в декартовой и в полярной системах координат. Описать процедуру, преобразующую координаты точки на плоскости из декартовой в полярные

12) Создать записи определяющие положение точки в декартовой и в полярной системах координат. Описать процедуру, преобразующую координаты точки на плоскости из полярных в декартовые

13) Создать список студентов в группе. Определить средний рост и вес студентов

14) Даны комплексное число Z (пара вещественных чисел) и вещественное число EPS>0. Вычислить с точностью EPS значение следующей комплексной функции: E^Z=1+Z/1!+Z^2/2!+Z^3/3!+...+Z^N/N!

15) Найти корни квадратного трехчлена с заданными комплексными коэффициэнтами

16) Создать запись (см. Вариант 6). Упорядочить список по алфавиту пофамильно

17) Создать запись (см. Вариант 6). Упорядочить список по алфавиту по возрастанию номеров групп

18) Задать переменную круг (см. Вариант 8). Определить в каких четвертях плоскости лежит данная окружность. В какой четверти лежит ее большая часть

19) Задать две переменные круг (см. Вариант 8). Определить пересекаются ли две окружности, если да, то определить точки (точку) пересечений

20) TYPE COMPL=RECORD

RE, IM: REAL;

END;

COEF=RECORD

A, B, C: COMPL;

END;

VAR P: COEF; X, L: COMPL;

Определить процедуру, которая вычисляет значение квадратного трехчлена AX^2+BX+C с коэффициэнтами из P в комплексной точке X

21) Описать рациональные числа (поля содержат числитель и знаменатель)

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

а) последовательность положительных элементов и их количество

б) количество нулевых элементов

в) последовательность отрицательных элементов и их количество

23) TYPE TIME=RECORD

H:0..23;

M,S:

END;

VAR T1, T2: TIME;

Описать логическую функцию предшествует ли время T1 времени T2

24) TYPE TIME=RECORD

H:0..23;

M,S:

END;

VAR T1, T2: TIME;

Описать процедуру, которой вычислять время между T1 и T2

25) Вычислить квадратный корень из комплексного числа.

26) Описать переменную "расписание", содержащую:

1. День недели

2. Кол-во пар в этот день

3. Время начала и конца пары

4. Название предмета

5. Фамилия преподавателя

27) Описать переменную "валюта", содержащую:

1. Название страны

2. Название валюты

3. Достоинство купюры

4. Номерной знак (серия и номер)

28) Описать переменную "автомобиль", с полями:

1. Марка машины

2. Ф. И. О. владельца

3. Номерной знак

29) В библиотеке имеются: книги, газеты, журналы. Для каждого печатного издания указать:

1. Название

2. Год выпуска (для книги), дату выпуска (для газет и журналов)

3. Автора (для книги), редактора (для газеты), редколлегию (для журнала)

4. Объем (при описании переменной использовать оператор CASE)

30) Составить таблицу, содержащую данные о 20 участниках забега, включающую в себя : фамилию участника, время (в часах, минутах и секундах). Выбрать три лучших результата и вывести на экран фамилии и время призеров.

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

32) Описать переменную "квартира", для которой указать:

1. Кол-во комнат

2. Названия комнат

Для каждой комнаты :

1. Площадь

2. Кол-во мебели

Для каждого эл-та мебели :

1. Его стоимость

2. Название

3. Материал

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]