- •Лабораторна робота № 2
- •1. Загальне завдання:
- •2. Порядок виконання лабораторної роботи:
- •4. Індивідуальне завдання
- •5. Теоретичні відомості
- •5.1. Тип даних «Запис»
- •5.2. Робота з типізованими файлами
- •6. Приклад виконання лабораторної роботи
- •Підпрограма LoadFromFile «Завантажити каталог книг з файлу»
- •Підпрограма SaveToFile «Збереження каталогу у файл»
- •Підпрограма SortCatalog «Сортування книг в каталозі за назвою»
- •Підпрограма PrintCatalog «Друк каталогу книг»
- •Підпрограма AddBook «Додавання книги до каталогу»
- •Var size : integer):boolean;
- •Val(s,year,er);
- •Val(s,number,er);
- •If (LoadFromFile(fname,books,n,size)) then
- •If (SaveToFile(fname,books,size)) then
- •If (AddBook(books,n,size)) then
- •Каталог
- •Каталог (сортування по назві)
- •7. Питання для захисту лабораторної роботи:
Var size : integer):boolean;
var
f : file of TBook; {файлова змінна для роботи з типізованим файлом}
i : integer; {номер книги в каталозі}
begin
assign(f,fname); {зв’язування файлової змінної з фізичним файлом fname}
{$I-}
reset(f); {відкриття файлу для читання}
{$I+}
if IOResult = 0 then {перевірка: чи відкрито файл?}
begin
size := FileSize(f); {визначення кількості книг у файлі}
if (size > max) then {якщо кількість книг в файлі перевищує максимальну,}
size := max; {тоді з файлу прочитати лише можливу кількість книг}
for i:=1 to size do {цикл читання з файлу книг у масив}
read(f,catalog[i]);
LoadFromFile := True; {каталог з файлу завантажено}
close(f); {закриття файлу}
end
else LoadFromFile := False; {каталог з файлу не завантажено}
end;
{Функція SaveToFile призначена для збереження каталогу книг у файл.
Вхідні дані:
fname – назва файлу, в якому зберігається каталог книг;
сatalog – каталог книг;
size – кількість книг у каталозі;
Вихідні дані:
True – каталог книг збережено у файл fname
False – файл не відкрито і каталог книг не збережено у файл.}
function SaveToFile(fname : string;var catalog : TCatalog; size : integer):boolean;
var
f : file of TBook; {файлова змінна для роботи з типізованим файлом}
i : integer; {номер книги в каталозі}
begin
assign(f,fname); {зв’язування файлової змінної з фізичним файлом fname}
{$I-}
rewrite(f); {відкриття файлу для запису}
{$I+}
if IOResult = 0 then {перевірка: чи відкрито файл?}
begin
for i:=1 to size do {цикл запису книг каталогу у файл}
write(f,catalog[i]);
SaveToFile := True; {каталог книг збережено у файл}
close(f); {закриття файлу}
end
else
SaveToFile := False; {каталог книг не збережено у файл}
end;
{Процедура SortCatalog призначена для сортування каталогу по назві книг за алфавітом.
Вхідні дані:
сatalog – каталог книг;
size – кількість книг у каталозі;
Вихідні дані:
сatalog – каталог книг, де книги розміщуються за алфавітом;}
procedure SortCatalog(var catalog : TCatalog; size : integer);
var
i,j : integer; {номера книг в каталозі}
book: TBook; {змінна для перестановки двох книг в каталозі}
begin
{Сортування каталогу методом обміну}
for i:=2 to size do
begin
for j:=size downto i do
if (catalog[j-1].name > catalog[j].name) then
begin
book := catalog[j];
catalog[j] := catalog[j-1];
catalog[j-1] := book;
end;
end;
end;
{Процедура PrintCatalog призначена для виводу книг з каталогу на екран монітору.
Вхідні дані:
сatalog – каталог книг;
size – кількість книг у каталозі;
Вихідні дані:
каталог книг на екрані монітору в табличному вигляді;}
procedure PrintCatalog(var catalog : TCatalog; size : integer);
var
i : integer; {номер книги}
begin
writeln('Назва книги':25,'Автори':25,'Жанр':12,'Рiк':5,'Том':5);
for i:=1 to size do
with catalog[i] do
writeln(name:25,author:25,style:12,year:5,tom:5);
end;
{Функція AddBook призначена для додавання нової книги у каталог. Книга додається вкінець каталогу. Якщо каталог вже заповнено, то нова книга не буде додана до каталогу.
Вхідні дані:
сatalog – каталог книг;
max – максимальна можлива кількість книг в каталозі;
size – кількість книг у каталозі;
Вихідні дані:
True – нова книга додана до каталогу книг та розміщена під номером size,
кількість книг в каталозі збільшилась на 1;
False – нова книга не була додана до каталогу оскільки немає місця.}
function AddBook(var catalog : TCatalog;max : integer;var size : integer):boolean;
var
s : String; {рядок для вводу чисел}
er : Integer; {ознака наявності помилки при перетворенні рядка в число}
begin
if (size + 1) <=max then {чи є вільний елемент в каталозі?}
begin
size := size + 1; {додавання книги до каталогу}
writeln('Додавання книги');
with catalog[size] do
begin
write('Назва книги =>'); {завдання назви книги}
readln(name);
write('Автори книги =>'); {завдання авторів книги}
readln(author);
write('Жанр книги =>'); {завдання жанру книги}
readln(style);
repeat {завдання року видання}
write('Рiк видання =>');
readln(s);
