Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Мет. вказ. Программирование (2 сем).doc
Скачиваний:
24
Добавлен:
26.11.2018
Размер:
2.57 Mб
Скачать

Лабораторна робота 10 Робота з файлами

Мета роботи. Познайомитися з поняттям файлового типу даних (типізовані, текстові і нетипізовані файли); виробити навички роботи з файловим типом даних у мові програмування Pascal. Навчитися зчитувати інформацію з файлів, записувати інформацію у файл; навчитися вирішувати задачі з використанням файлів.

Файл являє собою структурований тип даних, що складається з послідовності компонентів одного типу й однієї довжини. Число елементів у файлі (довжина файлу) не фіксовано. Це є основною відмінністю файлу від масиву. Файл можна представити як рядок, у якої є початок, а кінець не фіксований. Елементи файлу записуються на цей рядок послідовно, один за одним за допомогою деякого пристрою - покажчика файлу. При читанні чи записі цей покажчик переміщується до наступного елементу і робить його доступним для обробки. У кожен момент доступний для читання чи запису лише той елемент файлу, на який установлений покажчик.

Приклад. Переписати з текстового файлу f у файл g рядка в переверненому виді, порядок рядків має бути зворотним.

Етапи рішення задачі: Будемо зчитувати файл f по рядкам і перевертаючи рядок будемо записувати їх у масив, далі створимо файл і заповнимо його рядками з масиву змінюючи порядок рядків на зворотний. Складемо блок -схему програми.

Зміст самих блоків не повинен викликати великі труднощі у звичайному розумінні, головне тут це - технічна реалізації мовою Паскаль, тому запишемо реалізацію кожного блоку на Паскале.

а) Зчитуємо рядка з файлу F

assign(f,'input.dat');

reset(f);

while not eof(f) do

begin readln(f,st);

end;

б) Перегортаємо рядки і записуємо їх у масив

st1:='';

for i:= 1 to length(st) do

st1:= st[i]+st1;

m[k]:=st1;

k:=k+1;

в) Записуємо у файл g

assign(g,'output.dat');

rewrite(g);

for i:= 1 to k do writeln(g,m[i]);

3. Програма цілком

program example11;

var f,g:text; m:array[1..100] of string; k,i:integer;

begin

assign(f,'input.dat');

reset(f);

k:=0;

while not eof(f) do

begin readln(f,st);

k:=k+1;

st1:='';

for i:= 1 to length(st) do st1:= st[i]+st1;

m[k]:=st1;

end;

assign(g,'output.dat');

rewrite(g);

for i:= 1 to k do writeln(g,m[i]);

end.

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

  1. Що таке файл? Які існують види файлів?

  2. Які стандартні процедури і функції є у Pascal для роботи з файлами?

  3. Яким повинен бути зміст програми по створенню файлу і його корегуванні (заміна елементів, додавання елементів, видалення елементів)?

  4. Які особливості роботи з текстовими файлами?

  5. Які особливості роботи з типізованими файлами?

  6. Як підрахувати число рядків у текстовому файлі?

Задачі

  1. Дано текстові файли f1 і f2. Переписати зі збереженням порядку проходження компоненти файлу f1 у файл f2, а компоненти файлу f2 у файл f1. Використовувати допоміжний файл h.

  2. Дано текстовий файл f. Записати у файл g компоненти файлу f у зворотному порядку.

  3. Дано текстові файли f і g. Записати у файл h спочатку компоненти файлу f, потім – компоненти файлу g зі збереженням порядку.

Дано файл f, компоненти якого є цілими числами. Одержати у файлі g усі компоненти файлу f:

  1. Що є парними числами;

  2. Поділяються на 3 і не поділяються на 7.

  3. Що є точними квадратами.

  4. Дано файл f, компоненти якого є цілими числами. Одержати файл g, утворений з файлу f виключенням повторних входжень того самого числа.

Дано файл f, компоненти якого є цілими числами. Ніяка з компонентів файлу не дорівнює нулю. Файл f містить стільки ж від’ємних чисел, скільки і додатних. Використовуючи допоміжний файл h, переписати компоненти файлу f у файл g так, щоб у файлі g:

  1. Не було двох сусідніх чисел з однаковим знаком.

  2. Спочатку йшли додатні, потім від’ємні числа.

  3. Числа йшли в наступному порядку: два додатних, два від’ємних і т.д. (передбачається, що число компонентів у файлі f поділяється на 4).

  4. Дано файл f, компоненти якого є цілими числами. Ніяка з компонентів файлу не дорівнює нулю. Числа у файлі йдуть у наступному порядку: десять додатних, десять від’ємних, десять додатних, десять від’ємних і т.д. Переписати компоненти файлу f у файл g так, щоб у файлі g числа йшли в наступному порядку: а) п'ять додатних, п'ять від’ємних і т.д.

  5. Дано файл f, компоненти якого є цілими числами. Записати у файл g найбільше значення перших п'яти компонентів файлу f, потім - наступних п'яти компонентів і т.д. Якщо в останній групі виявиться менш ніж п'ять компонентів, тоді останній компонент файлу g повинен дорівнювати найбільшому з компонент файлу f, що утворять останню (неповну) групу.

  6. Дано символьний файл f . Групи символів, розділені пробілами (одним чи кількома) без пробілів усередині себе, будемо називати словами; видалити з файлу всі однобуквені слова і зайві пробіли. Результат записати у файл g.

Пряма на площині задається рівнянням ax+by+c=0, де a і b одночасно не дорівнюють нулю. Будемо розглядати лише прямі, для яких коефіцієнти a,b,c - цілі числа. Нехай f - файл, що містить коефіцієнти кількох прямих (не менше трьох). Переписати з файлу f у файл g коефіцієнти цих прямих, що: 14. Паралельні першій з прямих, заданої у файлі f.

15. Паралельні першій з прямих, заданої у файлі f, щоб всі прямі були різні.

16. Перетинають першу з прямих, заданих у файлі f.

17. Одержати у файлі g коефіцієнти всіх різних прямих файлу f.