ТЕМА: "КОМБИНИРОВАННЫЕ ТИПЫ (ЗАПИСИ)".
Ход урока.
I. Самостоятельная работа с теоретическим материалом.
Ребята получают листочки с теоретическим материалом. Разбиваются на группы 2-3 человека. Ребята должны по тексту найти ответы на вопросы и ответить на каждый вопрос устно.
ЗАДАНИЕ ДЛЯ РАБОТЫ В ГРУППАХ
II. Теоретический материал.
По способу организации и типу компонент выделяют четыре основные разновидности структурированных типов: регулярный тип (массивы); комбинированный тип (записи); файловый тип (файлы); множественный тип (множества).
Во многих экономических и информационных задачах обрабатываются ведомости, документы, каталоги, списки. При этом появляется необходимость объединять данные различного типа в одну группу. Для работы с группой данных в языке программирования Паскаль введено понятие запись. Запись представляет собой совокупность ограниченного числа данных различного типа. Понятие записи рассмотрим на примере ведомости списка учащихся с их оценками
N
п/п |
Фамилия И.О. |
Оценка |
1 | Андреев С.Р. | 5 3 4 |
2 | Павликова Л.П. | 5 5 5 |
3 | Ростоцкий Ю.Т. | 4 4 5 |
Каждая строка в этой ведомости состоит из отдельных элементов - данных различного типа:
а) порядковый номер - целое
десятичное число;
б)
Фамилия И.О. - массив символов;
в) Оценки - массив целых чисел.
Эти данные можно объединить в одну группу и считать записью.
Для представления такой разнородной, но логически связанной информации удобно использовать комбинированный тип. Необходимо отметить, что в данном случае отдельные компоненты комбинированного типа, ввиду их различной природы, не могут идентифицироваться поряд-ковыми номерами (индексами), как в массивах; поэтому для обозначения компонент используются индикаторы. Таким образом, описание комбинированного типа представляет собой список описаний его элементов (которые называются также полями записи); каждое описание похоже на описание простой переменной. Список полей начинается служебным словом record и должен завершаться служебным словом end. Объявление записи в разделе переменных VAR имеет следующий вид:
VAR имя записи:
RECORD
имя элемента 1: тип;
имя элемента 2:
тип;
....................
имя элемента n: тип;
END;
Для примера, приведенного выше, описание комбинированного типа может выглядеть следующим образом:
VAR B: RECORD
N:
INTEGER;
FIO: PACKED ARRAY[1..20] OF CHAR;
OCENKA: ARRAY[1..3] OF
INTEGER;
END;
Рассмотрим более универсальную форму объявления записи - с использованием раздела типов TYPE.
TYPE имя типа =
RECORD
имя элемента 1: тип;
имя элемента 2:
тип;
...................
имя элемента n: тип;
END;
VAR имя
записи: имя типа;
TYPE BEDOM=RECORD
N: INTEGER;
FIO: PACKED
ARRAY[1..20] OF CHAR;
OCENKA: ARRAY[1..3] OF INTEGER;
END;
VAR
B:BEDOM;
Доступ к элементам (полям) записей производится с помощью конструкции, называемой селектором записи и имеющей следующий общий вид: R.F, где R - переменная комбинированного типа; F - идентификатор поля.
Примеры. Порядковому номеру N записи B присвоить значение 2: B.N:=2; Найти сумму 3 оценок S:=b.ocenka[1]+b.ocenka[2]+b.ocenka[3]
ЗАДАЧА 1. Для каждого студента указаны фамилия и оценка по 5 дисциплинам. Вычислить средний балл для каждого студента. (Программа находится на диске c:\tp7\z1.pas)
Решение. При вводе данных необходимо помнить, что под фамилию отводится 15 символов, следовательно, оценки необходимо вводить, начиная с 16 позиции. Например, Иванов С.А. 4 3 5 5 4
program bal;
type
str=record
fam:string[15] ;
b1, b2, b3, b4,
b5:2..5;
sb:real;
end;
var tbl: array[1..25] of str;
i:
integer;
begin
for i:=1 to 5
do
begin
read(tbl[i].fam);
read(tbl[i].b1,tbl[i].b2,tbl[i].b3,tbl[i].b4,tbl[i].b5);
readln;
end;
for
i:=1 to 5
do
begin
tbl[i].sb:=(tbl[i].b1+tbl[i].b2+tbl[i].b3+tbl[i].b4+tbl[i].b5)/5;
write(tbl[i].fam,tbl[i].sb);
writeln;
end;
end.
Для более компактной записи селекторов Pascal имеет специальный оператор присоединения, позволяющий в ряде случаев опускать левые части секторов. Обращение к элементам записи происходит с помощью уточненного имени. Оператор присоединения позволяет упростить обращение к элементу записи. Имя записи выносится в заголовок оператора присоединения, а в блоке используются только имена элементов записи. Общая форма оператора присоединения:
WITH имя записи
DO
begin
операторы, содержащие имена элементов записи
end;
WITH B
DO
begin
N:=2;
S:=ocenka[1]+ocenka[2]+ocenka[3];
read(n);
end;
РЕШЕНИЕ задачи № 1 с
оператором присоединения:
(Программа находится на диске
c:\tp7\z2.pas)
program sbal;
type
str=record
fam:string[15];
b1,b2,b3,b4,b5:2..5;
sb:real;
end;
var
tbl:array[1..25]
of str;
i,j,k,m:integer;
x:real;
begin
readln(m);
for i:=1 to m
do
with tbl[i]
do
begin
read(fam,b1,b2,b3,b4,b5);
readln;
end;
for i:=1 to m
do
with tbl[i]
do
begin
sb:=(b1+b2+b3+b4+b5)/5;
write(fam,sb);
writeln;
end;
end.
ЗАДАЧА №2. Дан многочлен: 4A+7B-3A+8A-2K+1P-5R-2B. Найти подобные члены для переменной a и вычислить суммарный коэффициент.
РЕШЕНИЕ. Один элемент многочлена можно считать записью, т.к. он состоит из данных различного типа - коэффициента (числа) и буквы. (Программа находится на диске c:\tp7\z3.pas)
М1 - элемент многочлена (запись); М2 - результирующий элемент (запись); COEF - коэффициент (элемент записи); BUK - буква (элемент записи); ELEM - тип записи; SUM - сумма коэффициентов.
program ex4;
type
elem=record
coef:integer;
bukwa:char;
end;
var
m1:elem;
m2:elem;
sum:integer;
begin sum:=0;
writeln('введите
многочлен:');
while not eoln
do
begin
readln(m1.coef);readln(m1.bukwa);
if m1.bukwa='a' then
sum:=sum+m1.coef
end;
m2.coef:=sum;
m2.bukwa:='a';
writeln('Подобный
член',m2.coef:3,m2.bukwa);
end.
III. Домашнее задание.
Телевизор | ||||||
Название |
Цена
|
Диагональ |
Цветной или ч/б |
Производитель | ||
Город |
Завод
|
Фамилия директора |
Запрос выводится с новой строки для каждого поля. Например:
Телевизор 1
Название .
. . . . . РЕКОРД
Цена (тыс.). . . . . . 3000
Диагональ . . . . . . 59
Изображение (ц/ч). . . Ц
Производитель. . . . .
Завод . . . . . . .
Фотон
Город . . . . . . . Москва
Директор. . . . . . Иванов
После ввода массива записей программа осуществляет в нем поиск следующей информации: