Разделы презентаций


Записи

Содержание

Записи Запись – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры).Свойства:автор (строка)название (строка)год издания (целое число)количество страниц (целое число)

Слайды и текст этой презентации

Слайд 1Записи
Тема 7.

Записи Тема 7.

Слайд 2Записи
Запись – это тип данных, который может включать в

себя несколько полей – элементов разных типов (в том числе

и другие структуры).

Свойства:
автор (строка)
название (строка)
год издания (целое число)
количество страниц (целое число)

Задача: объединить эти данные в единое целое

Размещение в памяти

Записи Запись – это тип данных, который может включать в себя несколько полей – элементов разных типов

Слайд 3Одна запись
readln(Book.author); // ввод
readln(Book.title);
Book.year := 1998; //

присваивание
if Book.pages > 200 then // сравнение
writeln(Book.author,

'.', Book.title); // вывод

Объявление (выделение памяти):

var Book: record
author: string[40]; // автор, строка
title: string[80]; // название, строка
year: integer; // год издания, целое
pages: integer; // кол-во страниц, целое
end;

название

запись

поля

Обращение к полям:

Одна записьreadln(Book.author);  // вводreadln(Book.title);Book.year := 1998;   // присваиваниеif Book.pages > 200 then  //

Слайд 4Обращение к записи
Обращение к записи в целом допускается только

в операторах присваивания, где слева и справа от знака присваивания

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

Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:
str.fio, str.tel
Такое имя называется составным.
Обращение к записи Обращение к записи в целом допускается только в операторах присваивания, где слева и справа

Слайд 5Записи
Запись может входить в состав данных более сложной структуры.


Можно говорить, например, о массивах и файлах, состоящих из записей.


Запись может быть полем другой записи.
Записи Запись может входить в состав данных более сложной структуры. Можно говорить, например, о массивах и файлах,

Слайд 6Оператор присоединения
Обращение к компонентам записей можно упростить, если воспользоваться оператором

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

просто на имена полей, а имя записи определить в операторе присоединения.

Формат оператора:

With <переменная–запись>
{, <переменная–запись>} do
<оператор> ;

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

Слайд 7Оператор присоединения
Обращение к компонентам записей можно упростить, если воспользоваться оператором

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

просто на имена полей, а имя записи определить в операторе присоединения.

Формат оператора:

With <переменная–запись>
{, <переменная–запись>} do
<оператор> ;

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

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

Слайд 8Оператор присоединения
Оператор вида
With r1, ..., rn do


эквивалентен оператору
With r1 do
with

r2 ...
with rn do
<оператор> .
Оператор присоединенияОператор вида With  r1, ..., rn  do эквивалентен оператору	With  r1  do

Слайд 9Оператор присоединения:пример
Type Student = Record
F1, F2, F3 : Name;
Day

: 1..31;
Month : 1..12;
Year : integer;
StudDoc : integer
end;
Var A

: Student;

Значение переменной A можно изменить операторами:

A.F1 := 'Иванов ';
A.F2 := 'Илья ';
A.F3 := 'Иннокентьевич ';
A.Day := 14;
A.Month := 9;
A.Year := 1976;
A.StudDoc := 123;

Оператор присоединения:примерType Student = Record 		F1, F2, F3 : Name;		Day : 1..31;		Month : 1..12;		Year : integer;		StudDoc :

Слайд 10Оператор присоединения:пример
Предпочтительнее использовать следующий вариант:
with A do

begin
F1 := 'Иванов ';
F2 := 'Илья ';
F3 := 'Иннокентьевич ';
Day

:= 14;
Month := 9;
Year := 1976;
StudDoc := 123;
end; { оператора with }
Оператор присоединения:примерПредпочтительнее использовать следующий вариант:with  A  do  begin	F1 := 'Иванов ';	F2 := 'Илья ';	F3

Слайд 11Массив записей
Объявление (выделение памяти):
const N = 10;
var aBooks: array[1..N] of

record
author: string[40];
title: string[80];

year: integer;
pages: integer;
end;

Books[1] ... Books[10]

Массив записейОбъявление (выделение памяти):const N = 10;var aBooks: array[1..N] of record   author: string[40];

Слайд 12Массив записей
for i:=1 to N do begin
readln(aBooks[i].author);
readln(aBooks[i].title);


...
end;
for i:=1 to N do
if aBooks[i].pages > 200

then
writeln(aBooks[i].author, '.',
aBooks[i].title);

Обращение к полям:

Массив записейfor i:=1 to N do begin readln(aBooks[i].author);  readln(aBooks[i].title);  ...end;for i:=1 to N do if

Слайд 13Новый тип данных – запись
const N = 10;
var Book: TBook;

// одна запись
aBooks: array[1..N] of TBook; // массив
Объявление

типа:

type TBook = record
author: string[40]; // автор, строка
title: string[80]; // название, строка
year: integer; // год издания, целое
pages : integer; // кол-во страниц, целое
end;

Объявление переменных и массивов:

TBook – Type Book («тип книга») – удобно!

Новый тип данных – записьconst N = 10;var Book: TBook; // одна запись  aBooks: array[1..N] of

Слайд 14Записи в процедурах и функциях
Book.author := 'А.С. Пушкин';
ShowAuthor ( Book

);
Book.year := 1800;
writeln( IsOld(Book) );
Процедура:
procedure ShowAuthor ( b: TBook );
begin

writeln ( b.author );
end;

Основная программа:

function IsOld( b: TBook ): boolean;
begin
IsOld := b.year < 1900;
end;

Функция:

Записи в процедурах и функцияхBook.author := 'А.С. Пушкин';ShowAuthor ( Book );Book.year := 1800;writeln( IsOld(Book) );Процедура:procedure ShowAuthor (

Слайд 15Файлы записей
Объявление указателя на файл:
var F: file of TBook;
Assign(F, 'books.dat');

{ связать с указателем }
Rewrite(F); { открыть

файл для запись }
writeln(F, Book); { запись }
for i:=1 to 5 do
writeln(aBook[i]); { запись }
Close(F); { закрыть файл }

Запись в файл:

Файлы записейОбъявление указателя на файл:var F: file of TBook;Assign(F, 'books.dat'); { связать с указателем }Rewrite(F);

Слайд 16Чтение из файла
Известное число записей:
Assign(F, 'books.dat'); { связать с указателем

}
Reset(F); { открыть для чтения }
Read(F, Book);

{ чтение }
for i:=1 to 5 do
Read(F, aBook[i]); { чтение }
Close(F); { закрыть файл }

«Пока не кончатся»:

count := 0;
while not eof(F) do begin
count := count + 1; { счетчик }
Read(F, aBook[count]); { чтение }
end;

пока не дошли до конца файла F
EOF = end of file

Чтение из файлаИзвестное число записей:Assign(F, 'books.dat'); { связать с указателем }Reset(F);    { открыть для

Слайд 17Пример программы
Задача: в файле books.dat записаны данные о книгах в

виде массива структур типа TBook (не более 100). Установить для

всех 2008 год издания и записать обратно в тот же файл.

type Tbook … ;
const MAX = 100;
var aBooks: array[1..MAX] of TBook;
i, N: integer;
F: file of TBook;
begin
{ прочитать записи из файла, N - количество }
for i:=1 to N do
aBooks[i].year := 2008;
{ сохранить в файле }
end.

type TBook … ;

полное описание структуры

Пример программыЗадача: в файле books.dat записаны данные о книгах в виде массива структур типа TBook (не более

Слайд 18Пример программы
Чтение «пока не кончатся»:
Assign(f, 'books.dat');
Reset(f);
N :=

0;
while not eof(F) and (N < MAX) do begin

N := N + 1;
read(F, aBooks[N]);
end;
Сlose(f);

Assign(f, 'books.dat'); { можно без этого }
Rewrite(f);
for i:=1 to N do write(F, aBooks[i]);
Close(f);

Сохранение:

чтобы не выйти за пределы массива

Пример программыЧтение «пока не кончатся»: Assign(f, 'books.dat'); Reset(f); N := 0; while not eof(F) and (N <

Слайд 19Выделение памяти под запись
var pB: ^TBook;
begin
New(pB);
pB^.author := 'А.С.

Пушкин';
pB^.title := 'Полтава';
pB^.year := 1990;
pB^.pages := 129;

Dispose(pB);
end.

New(pB);

выделить память под запись, записать адрес в pB

pB^

Dispose(pB);

освободить память

pB: ^TBook;

переменная-указатель на TBook

Выделение памяти под записьvar pB: ^TBook;begin New(pB); pB^.author := 'А.С. Пушкин'; pB^.title := 'Полтава'; pB^.year := 1990;

Слайд 20Сортировка массива записей
Ключ (ключевое поле) – это поле записи (или

комбинация полей), по которому выполняется сортировка.
const N = 100;
var aBooks:

array[1..N] of TBook;
i, j, N: integer;
temp: TBook; { для обмена }
begin
{ заполнить массив aBooks }
{ отсортировать = переставить }
for i:=1 to N do
writeln(aBooks[i].title,
aBooks[i].year:5);
end.
Сортировка массива записейКлюч (ключевое поле) – это поле записи (или комбинация полей), по которому выполняется сортировка.const N

Слайд 21Сортировка массива записей
for i:=1 to N-1 do
for j:=N-1

downto i do
if aBooks[j].year > aBooks[j+1].year

then begin
temp := aBooks[j];
aBooks[j] := aBooks[j+1];
aBooks[j+1] := temp;
end;
Сортировка массива записейfor i:=1 to N-1 do  for j:=N-1 downto i do   if aBooks[j].year

Слайд 22Сортировка массива записей
Проблема: как избежать копирования записи при сортировке?
Решение: использовать

вспомогательный массив указателей, при сортировке переставлять указатели.
До
сортировки:
После
сортировки:
Вывод результата:
for i:=1

to N do
writeln(p[i]^.title, p[i]^.year:5);

p[i]^

p[i]^

Сортировка массива записейПроблема:  как избежать копирования записи при сортировке?Решение:  использовать вспомогательный массив указателей, при сортировке

Слайд 23Реализация в программе
type PBook = ^TBook; { новый тип данных

}
var p: array[1..N] of PBook;
begin
{ заполнение массива

записей}
for i:=1 to N do
p[i] := @aBooks[i];








for i:=1 to N do
writeln(p[i]^.title, p[i]^.year:5);
end.

for i:=1 to N-1 do
for j:=N-1 downto i do
if p[j]^.year > p[j+1]^.year then begin
temp := p[j];
p[j] := p[j+1];
p[j+1] := temp;
end;

вспомогательные указатели

меняем только указатели, записи остаются на местах

начальная расстановка

Реализация в программеtype PBook = ^TBook; { новый тип данных }var p: array[1..N] of PBook;  begin

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика