Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
07.02.2016
Размер:
121.34 Кб
Скачать

Im:string[10];

pb:string[15];

gr:string[8];

oc:record

m,op,f,iu:byte;

end;

end;

Var s,s2:stud;

f:file of stud;

c:real;

t:byte;

begin

assign(f,'ff.dat');

reset(f);

clrscr;

t:=5; {виведення інформації буде починаться з 5 рядка екрану}

while not eof(f) do

begin

read(f,s);

gotoxy(5,t);

writeln(s.pr);

gotoxy(20,t);

writeln(s.im);

gotoxy(30,t);

writeln(s.pb);

gotoxy(40,t);

writeln(s.gr);

with s do

begin

c:=(oc.m+oc.op+oc.f+oc.iu)/4;{обчислюється середній бал успішності студента}

end;

gotoxy(50,t);

writeln(c:6:2);

t:=t+1; {перехід на новий рядок}

end;

readln;

end.

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

Над файлами дуже часто виконується операція впорядкування записів по зростанню або спаданню деякого ключа, в якості якого виступає самий запис або поле запису. Крім того виконуються операції включення запису в середину файлу або виключення запису. Це можливо виконувати за двома методами: за допомогою додаткового масиву або через організацію прямого доступу до даних файлу. Додатковий масив доцільно використовувати, якщо розмір файлу невеликий. Наприклад, з файлу, що містить список студентів, вилучити запис про студентів, які мають більш ніж дві незадовільні оцінки. Переглянемо заданий файл. Ті записи, які не відповідають поставленій умові, перепишемо в новий файл. Після цього старий файл вилучимо.

У зв’язку з тим, що елементи типізованого файлу мають сталий розмір, то можливо використати прямий доступ до даних. Для організації прямого доступу до даних файлу використовують наступні процедури:

  • seek(f, n); - переводить вказівку файлу на компоненту, яка має номер n.

  • truncate(f);- видаляється частина файлу, починаючи з поточної позиції.

Розглянемо декілька задач:

Приклад 6.1. Створити файл дійсних чисел.

Var f1,f:file of real;

x: real;

c:char;

begin

assign(f,'f.dat');

rewrite(f);

repeat

writeln('вв.число');

readln(x);

write(f,x);

writeln('вв.0,якщо треба припинити введення, інакше 1');

readln(c);

until c='0';

end.

Приклад 6.2. Із створенного файлу дійсних чисел вибрати непарні та записати їх в новий файл.

var f1,f:file of real;

x: real;

begin

assign(f,'f.dat');

reset(f);

assign(f1,'f1');{новий файл непарних чисел}

rewrite(f1);

while not eof(f) do

begin

read(f,x);

if x/2<>int(x/2) then

write(f1,x);

end;

close(f);

reset(f1);

while not eof(f1) do

begin

read(f1,x);

writeln(x);

end;

close(f1);

end.

Приклад 6.3. Впорядкувати файл дійсних чисел по зростанню його елементів. Спочатку використаємо додатковий масив дійсних чисел:

var f:file of real;

a:array [1..100] of real;

x: real;

c:char;

k,l,i:byte;

begin

assign(f,'f.dat');

reset(f);i:=0;

while not eof(f) do

begin

inc(i);

read(f,a[i]);{У масив зчитуємо елементи файлу}

end;

for k:=1 to i-1 do{Впорядковуємо масив}

for l:=k+1 to i do

if a[k]>a[l] then

begin

x:=a[k];

a[k]:=a[l];

a[l]:=x;

end;

rewrite(f);{У файл з самого початку переписуємо елементи масиву}

for k:=1 to i do

write(f,a[k]);

reset(f);

while not eof(f) do

begin

read(f,x);

writeln(x);

end;

end.

Приклад 6.4. Впорядкування файлу без використання додаткового масиву:

var f:file of real;

x,y: real;

k,i:byte;

begin

assign(f,'f.dat');

repeat

k:=0;

i:=0;

reset(f);

read(f,x); {зчитуємо перше число з файлу}

while i<filesize(f)-1 do

begin

inc(i);

read(f,y); {зчитуємо друге число з файлу}

if x>y then

begin

seek(f,i-1); {знаходимо попередній запис}

write(f,y);{запишемо менше число у файл}

seek(f,i);{знайдемо наступний запис}

write(f,x);{запишемо більше число у файл}

k:=1;{ознака того, що відбувалося перезапис елементів файлу, тому файл ще не впорядкований}

end

else

x:=y;{поточне число стає першим}

end;

until k=0;

reset(f);

while not eof(f) do

begin

read(f,x);

writeln(x);

end;

end.

Контрольні запитання.

  1. Що таке змінна типу запису?

  2. Як організований робота з елементом запису?

  3. Що таке базовий тип?

  4. Які операції дозволені над елементом запису?

  5. Що таке оператор запису?

  6. В яких структурах можна використовувати записи?

  7. Як визначається розмір запису?

  8. Що таке файлова змінна?

  9. Які види файлових змінних Ви знаєте?

  10. Що таке типізовані файли?

  11. Який вид доступу до даних можливий для типізованих файлів?

  12. Яким чином зв’язується файлова змінна з фізичним файлом?

  13. Як файл готувати до запису даних?

  14. Як файл готувати до зчитування даних?

  15. Яким чином організується прямий доступ до даних?

  16. Які основні операції виконують над файловою змінною?

  17. Чи правильно, що елементи файлу повинні бути одного типу?

  18. Чи правильно, що файл відрізняється від масиву тільки тим, що розмір файлу довільний, а розмір масиву фіксований?

  19. Чи можна, прочитавши з файлу п’ятий елемент, далі зразу прочитати другий елемент? Якщо ні, то який можна?

  20. В яке місце файлу можна добавляти новий елемент: в початок, в кінець, в середину, куди завгодно?

  21. Якщо не переписувати файл заново, то значення яких елементів можна змінювати?

  22. Чи можна порівнювати файлові змінні або присвоювати один файл другому?

Соседние файлы в папке конспект лекцій 1 паск