ТЕМА: "КОМБИНИРОВАННЫЕ ТИПЫ (ЗАПИСИ)".

Ход урока.

I. Самостоятельная работа с теоретическим материалом.

Ребята получают листочки с теоретическим материалом. Разбиваются на группы 2-3 человека. Ребята должны по тексту найти ответы на вопросы и ответить на каждый вопрос устно.

ЗАДАНИЕ ДЛЯ РАБОТЫ В ГРУППАХ

  1. Найдите ответ на вопрос "Какие структуированные типы данных существуют в Паскале?". Расскажите устно друг другу ответ на вопрос.
  2. Найдите ответ на вопрос "Что понимается под записью в Паскале?". Расскажите устно друг другу ответ на вопрос.
  3. Найдите ответ на вопрос "Как объявляются записи?". Расскажите устно друг другу ответ на вопрос.
  4. К какому типу относится следующее описание?
    kniga=record
    nazvan: string[25];
    godizdat:1000..1988;
    zena:real;
    end;
    Объясните друг другу, какие типы у компонентов записи?
  5. Найдите ответ на вопрос "Чем отличаются и чем сходны запись и массив". Расскажите устно друг другу ответ на вопрос.
  6. Найдите ответ на вопрос "Какие операции допустимы над элементами записи?". Расскажите устно друг другу ответ на вопрос.
  7. Найдите ответ на вопрос "Как осуществляется доступ к полям записей?". Расскажите устно друг другу ответ на вопрос.
  8. Познакомиться с условием задачи № 1.
  9. Вызвать с диска файл (c:\tp7\z1.pas). Запустить программу на выполнение.
  10. Найдите ответ на вопрос "Как организовать ввод и вывод данных записи?". Расскажите устно друг другу ответ на вопрос.
  11. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\z1.pas. Распечатку вклеить в тетрадь.
  12. Найдите ответ на вопрос "Зачем в Паскале используется оператор присоединения?". Расскажите устно друг другу ответ на вопрос.
  13. Объясните форму записи оператора присоединения.
  14. Вызвать с диска файл (c:\tp7\z2.pas). Запустить программу на выполнение.
  15. Выйти из Паскаля. Распечатать на принтере файл c:\tp7\z2.pas. Распечатку вклеить в тетрадь.
  16. Сравните программу z1.pas и z2.pas. В чем различие программ?
  17. Познакомиться с условием задачи № 2.
  18. Вызвать с диска файл (c:\tp7\z3.pas). Запустить программу на выполнение.
  19. Разобраться как работает данная программа.
  20. Известно, что
    TYPE TIME=RECORD
    CHAS:0..23;
    MINUT, SEKUND: 0..59;
    VAR T1,T2:TIME;

    Написать программу, которая вводит значения полей записей T1 и T2 и печатает TRUE, если T1 предшествует T2, и печатает FALSE в противном случае.

    (Решение.
    program DZ;
    type time=record
    chas:0..23;
    minut,sekund:0..59;
    end;
    var t1,t2:time; te1,te2:integer;
    begin
    read(t1.chas,t1.minut,t1.sekund,t2.chas,t2.minut,t2.sekund);
    te1:=t1.chas*3600+t1.minut*60+t1.sekund;
    te2:=t2.chas*3600+t2.minut*60+t2.sekund;
    if te1>te2 then writeln(false) else writeln(true);
    end.)

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. Конспект.
  2. ЗАДАЧА №3. Дана ведомость учащихся, занимающихся в кружке по программированию:
    Алешина Елена 5 Павликова Юля 5
    Ковалев Иван 5 Кемарская Ира 5
    Андрианов Глеб 4 Агафонов Стас 5
    Поддубный Игорь 4 Антонова Оля 5
    Определить количество учащихся, занимающихся в кружке на 5, число учащихся с фамилией, начинающейся на букву "А".
  3. Задание №4. Написать программу, которая вводит в режиме запросов заданное число записей вида :
Телевизор
Название
Цена
Диагональ
Цветной или ч/б
Производитель
Город
Завод
Фамилия директора

Запрос выводится с новой строки для каждого поля. Например:

Телевизор 1
Название . . . . . . РЕКОРД
Цена (тыс.). . . . . . 3000
Диагональ . . . . . . 59
Изображение (ц/ч). . . Ц
Производитель. . . . .
Завод . . . . . . . Фотон
Город . . . . . . . Москва
Директор. . . . . . Иванов

После ввода массива записей программа осуществляет в нем поиск следующей информации:

  1. Названия телевизоров с размером по диагонали больше 50 см.
  2. Фамилии директоров, производящих телевизоры стоимостью свыше 2000 тыс. руб.
  3. Названия городов, где выпускаются телевизоры стоимостью менее 1000 тыс. руб.
  4. Заводы, выпускающие телевизоры с самым большим размером экрана.
  5. Названия телевизоров с самым маленьким размером экрана.
  6. Фамилии директоров, выпускающих самые дешевые телевизоры.
  7. Города, где выпускают самые дорогие телевизоры.

Hosted by uCoz

к оглавлению     на домашнюю