Комбинированный тип данных RECORD. Массив записей.

Download Report

Transcript Комбинированный тип данных RECORD. Массив записей.

Slide 1

Комбинированный тип
данных RECORD.
Массив записей.

Евграфова Ольга Владимировна
2009 г.


Slide 2

План:
Организационный момент.
Повторение основных определений и понятий.
Изучение нового материала:
Ввод понятия «запись». Объявление записи в
программе.
Оператор присоединения.
Массивы записей.
Запись с вариантами.
Закрепление изученного материала:
Ответы на вопросы.
Работа парами с взаимопроверкой.
Разбор готовых программ.
Практическая работа на компьютере.
Задание на дом.
Подведение итогов занятия.


Slide 3

Повторение основных
определений и понятий:
Что понимают под термином «массив
данных»? В каком случае
целесообразно использовать такую
организацию данных в программе?
Что такое размер массива? Что такое
размерность массива? Какие виды
массивов вы знаете?
Как объявляют массивы в программе?
Могут ли элементы массива быть
разного типа?


Slide 4

Повторение основных
определений и понятий:
Что такое сортировка одномерного
массива? Какие виды сортировок
массивов вы знаете?
Как осуществляется сортировка, если
используется метод «простого обмена»
(«метод пузырька»)?
Как осуществляется сортировка, если
используется метод «простого выбора»
(последовательное выделение
минимального элемента)?


Slide 5

Повторение основных
определений и понятий:
Дан одномерный массив А,
каждый элемент которого имеет
формат Byte (Word). В
результате вычислений элементу
массива с индексом 4
присваивается отрицательное
число -2. Какое число будет
хранится в элементе А(4)?

Ответ


Slide 6

Составить план решения задачи (ЕГЭ - С4)
На школьной олимпиаде по информатике участники выполняли
три задания, каждое из которых оценивалось по 25 баллов.
Общее количество участников олимпиады не превосходило 60
человек.
На вход программы подаются следующие сведения: в первой
строке вводится количество участников N, а далее следуют N
строк, имеющих следующий формат:
<Фамилия> <Имя> <Баллы>
<Фамилия> - строка, состоящая не более чем из 20 символов;
<Имя> - строка, состоящая не более, чем из 15 символов;
<Баллы> - три целых числа, разделенных пробелом.
При этом <Фамилия> и <Имя>, <Имя> и <Баллы>, разделены
одним пробелом. Примеры входных строк:
Петрова Ольга 25 18 16
Калиниченко Иван 14 5 20
Для участия в городской олимпиаде необходимо набрать не
менее 50 баллов. Вывести список претендентов в порядке
занятых мест. Участников с одинаковым количеством баллов
расположить в произвольном порядке.


Slide 7

План решения задачи:
Как минимум необходимо будет
организовывать два массива:
FI - для хранения фамилии и имени,
SUM - для хранения суммы баллов.
После чтения данных и размещения их по
массивам, необходимо произвести
сортировку массива SUM, выполняя
соответствующие перестановки в массиве FI.
Затем произвести вывод данных из массивов
FI и SUM до тех пор, пока сумма баллов
больше 50.


Slide 8

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

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


Slide 9

Объявление записи в программе
можно производить двумя
способами:

В разделе
объявления
переменных

В разделе
объявления
типов

VAR

TYPE


Slide 10

Объявление записи в разделе
VAR:
VAR <имя записи>: RECORD
<имя поля 1> : тип;
<имя поля 2> : тип;
...
<имя поля n> : тип;
END;


Slide 11

Объявление записи в разделе
VAR (пример)
VAR Z : RECORD
city : String; {Название города}
street: String; {Название улицы}
house: Integer; {Номер дома}
flat : Integer; {Номер квартиры}
end;


Slide 12

Объявление записи в разделе
TYPE:
TYPE <имя типа> = RECORD
<имя поля 1>: тип;
<имя поля 2>: тип;
...
<имя поля n>: тип
END;

VAR <имя записи> : <имя типа>;


Slide 13

Объявление записи в разделе
TYPE (пример):
TYPE Address = RECORD
city : String; {Название города}
street: String; {Название улицы}
house: Integer; {Номер дома}
flat : Integer; {Номер квартиры}
END;
VAR Z, SS : Address;


Slide 14

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

<имя_записи> . <имя_поля>



Присвоение данных компонентам переменной Z:

Z.city := ’Коломна’;
Z.house := 59;
 Вывод данных из переменной Z :
writeln(Z.city);
writeln(Z. house);


Slide 15

Замечания:
Имена полей могут совпадать с именами
других переменных в программе.
 Обращение к записи в целом, а не только к
её отдельным элементам, допускается
только в операторе присваивания.
При этом слева и справа от знака
присваивания должны использоваться имена
записей одинакового типа.
VAR Z, SS : Address;


.....

SS := Z;


Slide 16

Оператор присоединения
Использование каждый раз имени записи оказывается
неудобным. Оператор присоединения позволяет
упростить обращение к элементу (полю) записи. Имя
записи выносится в заголовок оператора
присоединения, а в блоке используются только имена
элементов записи.

WITH <имя записи> DO
Begin
{операторы, содержащие только
имена элементов записи}
End;


Slide 17

Оператор присоединения (пример)
WITH Z DO Begin
Write('Введите город ');
Readln(city);
Write('Введите улицу ');
Readln(Street);
Write('Введите номер дома '); Readln(house);
Write('Введите номер квартиры ');
Readln(Flat);
End;
Замечание: операторы присоединения могут быть
вложены друг в друга.


Slide 18

Массивы записей
Задача 1. Составить программу, которая
запрашивает данные о 5-и книгах и
заносит их в соответствующий
созданный массив. Формат записи о
книгах: автор, название, тема.
Задача 2. Допустим, что сформирован массив
записей - библиотечный каталог по
формату предыдущей задачи. Всего
500 книг. Выбрать из каталога и
распечатать полные данные о
книгах, на тему "физика" автора
Иванова Ю.П. (доработать
предыдущую программу).


Slide 19

Задача 1
program biblio;
type book = record
autor: string[20] ; name: string[70]; keyword: string[30];
end;
var kniga : book;
{запись}
catalog: array [1..5] of book; {массив записей}
n: integer;
begin
For n :=1 to 5 do
begin
with kniga do
begin
writeln(' автор: ‘);
readln(autor);
writeln('название: ‘); readln(name);
writeln(‘ тема: ‘);
readln(keyword); end;
catalog[n] := kniga;
end;
end.


Slide 20

Задача 2
.....

{изменить размер массива на 500}
.....

{вывод необходимых данных}
for n:=l to 500 do
with catalog [n] do
begin
IF (autor=’Иванов Ю.П.’) AND (keyword=’физика')
Then writeln (autor:20, name:40, keyword:20);
end;
readln;
end.


Slide 21

Запись с вариантами
Особой разновидностью записей
являются "записи с вариантами“.
 С помощью записей с вариантами можно
одновременно сохранять различные
структуры данных, которые имеют одну
большую общую часть, и небольшие
части, различные в разных структурах.
 Вариантная часть может быть только
одна и должна располагаться в конце
записи.



Slide 22

Запись с вариантами






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


Slide 23

Пример записи с вариантами
Для того чтобы описать содержимое библиотеки,
необходима следующая информация:
Для книг
Автор
Название
Год издания
Издательство

Для газет
Название
Дата выхода
(день, месяц, год)
Издательство

Для журналов
Название
Дата выхода (год
и месяц)
Номер
Издательство

Графы "Название" и "Издательство" являются
общими для всех трех вариантов.
Остальные поля зависят от типа печатного издания.


Slide 24

Для реализации этой структуры воспользуемся
записью с вариантной частью:
TYPE biblio = RECORD
name, publisher: string[20]; {общая часть}
CASE item: char of
'b': (author: string[20]; year: 0..2009);
'n': (year: 1700..2009; month: 1..12; day: 1..31);
'm': ( year: 1700..2009; month: 1..12; number:
integer);
end;

В зависимости от значения поля item, в записи
будет содержаться либо 5, либо 6 полей.


Slide 25

Вопросы для закрепления :











Что такое тип данных запись?
Как объявляются записи?
Что такое уточнённое имя?
Какие операции допустимы над элементами
(полями) записи?
Чем отличается запись от массива?
Какие операции допустимы над записью в
целом?
Каково назначение оператора
присоединения?
Можно ли использовать массив записей?


Slide 26

Работа парами с взаимопроверкой
Задания:





Объясните, что соответствует
имени a в точках {1} и {2}?
Какая команда программы
является некорректной.
Составьте трассировочную
таблицу и укажите, что будет
выведено на экран, если убрать
некорректную команду?


Slide 27

Вариант 1
program rec;
type MyRec = record
a: integer; b: char;
end;
var a, c: integer; b: MyRec;
begin
a:= 5; {1}
readln(b); b.a:= a;
with b do
begin
b:= 'a';
c:= a;
a:= 4; {2}
end;
writeln(b.a: 3, b.b: 3, a: 3, c: 3)
end.

Вариант 2
program rec;
type St = record
m: integer; r: char;
end;
var r, c: integer;
p: St;
begin
r:= 15; {1}
readln(p);
p.m:= r;
with p do
begin
r:= 'm';
c:= m;
m:= -4; {2}
end;
writeln(p.m: 3, p.r: 3, r: 3, c: 3)
end.


Slide 28

Ответы для взаимопроверки:
Номер
вопроса

Вариант 1

Вариант 2

1.

В точке {1} а - это
переменная типа
integer, в точке {2} это поле записи b.

В точке {1} r - это
переменная типа
integer, в точке {2}
- это поле записи p

2.

readln(b);

{нельзя readln(p);
считывать запись
{нельзя считывать
целиком}
запись целиком}


Slide 29

Ответы для взаимопроверки:
Номер
вопроса

3.

Вариант 1
a
c
b.a
b.b

5
5

5
4
‘a’

На экране будет
выведено: 4 а 5 5

Вариант 2
r
15
c
p.m 15
p.r

15
-4
‘m’

На экране будет
выведено: -4 m 15 15


Slide 30

var a: longint;
r1 : record a: word; ... end;
r2 : record a: integer; ...
end;
begin
a:= 0;
with r1 do begin
a:= 1000;
with r2 do begin
a:= 1000;
r1.a:= -a; end;
r2.a:= -100;
end;
a:= 100;
end.

Какое значение будет
храниться в поле a
записи r1 после
выполнения следующего
блока?
Ответы:
1. -1000
2. -100
3. 0
4. 100
5. 64536
6. 000
7. 65436
Ответ


Slide 31

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

const n=10;
type student = record
sname: string [30];
Программа
eval: 2..5;
end;
var group: array [1..n] of student;


Slide 32

Домашнее задание
Задача 1. Группу студентов нужно разделить на две
группы английского языка – начинающую и
продолжающую. Напишите программу, которая это
сделает и подсчитает, сколько человек знают
английский язык. Знание английского языка
проставьте случайным образом (0 или 1). Используйте
для решения задачи следующую структуру
организации данных:
const n=10;
type student = record
sname: string [30];
engl: 0..1;
end;
var group: array [1..n] of student;


Slide 33

Домашнее задание
Задача 2. Багаж пассажира характеризуется
количеством вещей и общим весом вещей. Дан
массив, содержащий сведения о багаже нескольких
пассажиров. Сведения о багаже каждого пассажира
представляют собой запись с двумя полями: одно
поле целого типа – количество вещей, второе поле
действительного типа – вес в килограммах.
Определите:
Имеется ли пассажир, багаж которого состоит
из одной вещи весом более 300 кг;
Число пассажиров, количество вещей которых
превосходит среднее число вещей.


Slide 34

Литература:









Окулов С.М. Основы программирования . – 2е изд., испр. – М.: БИНОМ. Лаборатория
знаний, 2005.
Немнюгин С., Перколаб Л. Изучаем Turbo
Pascal.– СПб.: Питер, 2004.
Знатнов С.Ю. Введение в программирование:
Начнем изучать Паскаль?: Учебное пособие
для учащихся старших классов.- Коломна:
КГПИ, 2004.
Фалина И.Н., Богомолова Т.С. и
др.Алгоритмизация и программирование:
Сборник контрольных работ с решениями (911 класс). – М.: КУДИЦ-ПРЕСС, 2007.
Материалы сайта http://festival.1september.ru