Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Програмування.doc
Скачиваний:
7
Добавлен:
19.11.2019
Размер:
742.91 Кб
Скачать

2.4. Типізовані файли

2.4.1. Теоретичні відомості

Файл - структура даних з однорідними компонентами, які звуться записами. Існує три типи файлів: типізовані файли, записи яких мають жорстку структуру, частіше всього RECORD; текстові файли, що складаються з символів та рядків: нетипізовані файли, в які можуть передаватися блоки по 128 байт в кожний.

Процедури та функції для типізованих та текстових файлів:

ASSIGN(F,NAME)-ставить в відповідність файлову змінну F специфікації файлу NAME в вигляді: 'диск:\каталог\ім'я.розширення'

RESET(F)-відкриває вже існуючий файл F та позиціонує покажчик запису на початок файлу

REWRITE(Р)-створюється новий файл F, покажчик запису встановлюється на початок файлу.

CLOSE(F)-3aкриває файл F.

ЕОF(f)-функція приймає значення TRUE, якщо покажчик запису вказує на кінець файлу, інакше false.

ERASE(f)-знищується файл F, який перед тим треба закрити.

RЕNАМЕ(f,s)-переіменування закритого файлу F в файл S.

READ(f,S1,S2)-читання з файлу F змінні S1.S2.

WRITE(F,S1.S2)-3anис в файл F із змінних S1.S2.

Процедури та функції тільки для типізованих файлів

SЕЕК(F,N)-позиціонування покажчика запису на запис з номером N. Перший запис файлу має номер 0.

FILEPOS(F)-функція визначає номер запису, на який вказує покажчик.

FILESIZE(F) функція визначає кількість записів в файлі F.

2.4.2. Приклад програми

Умова задачі: Створити програму, яка працює з базою даних. В заданому файлі містяться відомості про іграшки: назва, їх ціна та вікові межі дітей, для яких вони створені. Програма повинна створювати базу, доповнювати її новими записами, вилучати старі записи, вставляти нові, сортирувати по назві, записувати на диск та читати з диску.

uses crt;

type toy=record { тип запису, що мiстить назву}

titl:string; {цiну та вiковi межi }

price:Integer;

age:integer;

end;

mas=array[1..20] of toy;

var a:mas; { заданий масив записiв }

f:file of mas; { заданий файл }

w,i1,l,J,k,i:integer; { робочi змiннi)

t:toy; {тимчасовий запис}

s:char; {змiнна для закiнчення вводу}

{ процедура вводу}

procedure vvod_1;

begin

writeln(' Створення бази:');

i:=0;

repeat {поки не натиснута клавiша 'n'}

clrscr;

i:=i+1;

with a[i] do begin

gotoxy(10,6);write('title of toy '); readln(titl);

gotoxy(10,8);write('price '); readln(price);

gotoxy(10,10);write('children age '); readln(age);

end;

writeln('continue? y/n');

s:=readkey;

until s='n';

i1:=i;

end;

procedure file_input;

begin

assign(f,'lab5_1.dat');

reset(f);

i:=0;

while not eof(f) do begin

i:=i+1;

with a[i] do read(f,a);

end;

i1:=i;

close(f);

end;

procedure file_output;

begin

assign(f,'lab5_1.dat');

rewrite(f);

for i:=1 to i1 do begin

with a[i] do write(f,a);

end;

close(f);

end;

procedure vvod_2;

begin

writeln('Доповнення бази:');

i:=i1;

repeat {поки не натиснута клавiша 'n'}

clrscr;

i:=i+1;

with a[i] do begin

gotoxy(10,6);write('title of toy '); readln(titl);

gotoxy(10,8);write('price '); readln(price);

gotoxy(10,10);write('children age '); readln(age);

end;

writeln('continue? y/n');

s:=readkey;

until s='n';

i1:=i;

end;

{--------вивiд на екран------}

procedure vivod;

begin

clrscr;

writeln('n-------Name--------price---age----');

for j:=1 to i1 do

begin

gotoxy(5,5+j); write(j:4);

with a[j] do

{для кожного запису вивести}

begin

gotoxy(10,5+j); write(titl);

gotoXY(20,5+j); write(price);

gotoXY(30,5+j); write(age);

end;

writeln;

end;

end;

procedure del;

begin

write('n=');readln(j);

for i:= j to i1-1 do a[i]:=a[i+1];

i1:=i1-1;

end;

procedure insert;

begin

write('n=');readln(j);

for i:= i1 downto j do a[i+1]:=a[i];

i1:=i1+1;

with a[j] do begin

clrscr;

gotoxy(10,6);write('title of toy '); readln(titl);

gotoxy(10,8);write('price '); readln(price);

gotoxy(10,10);write('children age '); readln(age);

end;

end;

procedure sort;

var

t:toy;

begin

for i:= 1 to i1-1 do

for j:= i+1 to i1 do

if a[i].titl>a[j].titl then begin

t:=a[i];

a[i]:=a[j];

a[j]:=t;

end;

end;

label 1;

begin {головна програма }

clrscr;

gotoxy(30,7);writeln('lab. work S.I');

gotoxy(30,8);writeln('varlant N30,student ');

i1:=0;

gotoxy(30,10);write('файл є-1 , немає-0');

readln(w);

if w=1 then file_input;

1:clrscr;

gotoxy(30,9);writeln(' головне меню');

gotoxy(30,10);writeln('----------------------------');

if i1=0 then begin gotoxy(30,11);writeln(' створення бази -0');end;

if i1<>0 then begin gotoxy(30,12);writeln('доповнення бази -1');

gotoxy(30,13);writeln('перегляд бази -2');

gotoxy(30,14);writeln('вилучення елемента бази -3');

gotoxy(30,15);writeln('вставка елемента бази -4');

gotoxy(30,16);writeln('упорядкування бази за ім'ям -5');

gotoxy(30,17);writeln('запис бази на диск -6');

gotoxy(30,18);writeln('вихід з програми (запис бази на диск) -7');

gotoxy(30,19);writeln('віихід з програми (без запису бази на диск -8');end;

readln(w);

case w of

0: begin vvod_1; vivod; file_output; readln; end;

1: begin vvod_2; vivod; readln; end;

2: begin vivod; readln;end;

3: begin vivod; del; vivod;readln; end;

4: begin vivod;insert; vivod;readln;end;

5: begin sort; vivod; readln;end;

6: begin file_output; end;

7: begin file_output;halt;end;

8: begin halt;end;

end;

goto 1;

end.