Файл: ОП Конспект лекций - Паскаль.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 28.06.2020

Просмотров: 1682

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Тема 13: Складні типи. Масиви

Тема 14: Багатомірні масиви

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Тема 16: Динамічна пам'ять. Адреси і покажчики

Тема 17: Оголошення покажчиків, виділення та звільнення динамічної пам’яті

Тема 18: Процедури та функції для роботи з динамічною пам’яттю

Тема 19: Символьний тип даних. Упаковані масиви

Тема 20: Процедури та функції для обробки рядків

Тема 21: Структурований тип даних - безліч

Тема 22: Структурований тип даних – записи

Тема 23: Опис файлових змінних. Обробка типізованих файлів

Тема 24: Послідовний та прямий доступ до файлів

Тема 25: Обробка не типізованих файлів

Тема 26: Робота з текстовими файлами

Тема 27: Типізовані константи

Тема 28: Поняття та робота з процедурами та функціями

Тема 29: Використання модуля CRT. Програмування клавіатури

Тема 30: Використання модуля CRT. Текстове виведення на екран. Програмування звукового генератора

Тема 31: Графічні можливості TP 7.0. Використання бібліотеки Graph

PointType = record

Тема 32: Бібліотечні модулі користувача

Тема 33: Основні принципи ООП. Створення об’єктів. Використання об’єктів

Список літератури

Додаток А

Основні алгоритми обробки масивів

Додаток Б

Питання перевірки знань з теорії

Додаток В

Поширені коди клавіш

Додаток Д

Коди сканування клавіатури

var

f: file of real;

a: real;

i: word;

begin

assign(f, ’abc.dat’);

reset (f);

writeln(‘в файлі ’,filesize(f), ‘ чисел’);

for i:= 1 to filesize(f) do

begin

read(f, a);

write(a, ‘ ’);

end;

close(f);

end.


Приклад 2

В файлі цілих чисел поміняти місцями максимальний та мінімальний елементи.

var

f: file of integer;

a, i, max, nmax, min, nmin: integer;

begin

assign(f, ’abc.int’);

reset (f);

for i:= 1 to filesize(f)-1 do

read(f, a);

if i=0 then

{початкове привласнення максимального}

{і мінімального значень і їх індексів}

begin

max:=a; nmax:= i;

min:=a; nmin:=i;

end

else

begin

{порівняння поточного значення з максимальним (мінімальним)}

if max<a then

begin

max:=a;

nmax:= i;

end;

if min >a then

begin

min:=a;

nmin:=i;

end

end

end;

{перезапис максимального і мінімального значень у файл}

seek(f, nmax);

write(f, min);

Seek(f,nmin);

write(f,max);

end.


Питання для контролю.

  1. В чому різниця між прямим та послідовним доступом до файлу?

  2. Які функції здійснюють прямий доступ?

  3. Які процедури здійснюють прямий доступ?

  4. Які з перелічених процедур і функцій не можна використовувати для текстових файлів?




Тема 25: Обробка не типізованих файлів


Файли, що не типізуються, оголошуються як файлові змінні типа FILE і відрізняються тим, що для них не вказаний тип компонентів. Відсутність типа робить ці файли, з одного боку, сумісними з будь-якими іншими файлами, а з іншою дозволяє організувати високошвидкісний обмін даними між диском і пам'яттю.

При ініціації файлу, що не типізується, процедурами RESET або REWRITE можна вказати довжину запису файлу, що не типізується, в байтах.

Наприклад, так:

var

f: file;

begin

.......

assign(f, ''myfile.dat'')

reset(f,512);

.......

end.

Довжина запису файлу, що не типізується, вказується другим параметром при зверненні до процедур RESET або REWRITE, як яке може використовуватися вираження типа WORD. Якщо довжина запису не вказана, вона приймається рівною 128 байтам.

Турбо Паскаль не накладає яких-небудь обмежень на довжину запису файлу, що не типізується, за винятком вимоги позитивності і обмеження максимальної довжини 65535 байтами (ємкість цілого типа WORD). Проте для забезпечення максимальної швидкості обміну даними слід задавати довжину, яка була б кратна довжині фізичного сектора дискового носія інформації (512 байт). Більш того, фактично простір на диску виділяється будь-якому файлу порціями - кластерами, які залежно від типа диска можуть займати 2 і більш суміжних секторів. Як правило, кластер може бути прочитаний або записаний за один зворот диска, тому найвищу швидкість обміну даними можна отримати, якщо вказати довжину запису, рівну довжині кластера.

При роботі з файлами, що не типізуються, можуть застосовуватися всі процедури і функції, доступні файлам, що типізуються, за винятком READ і WRITE, які замінюються відповідно високошвидкісними процедурами BLOCKREAD і BLOCKWRITE. Для виклику цих процедур використовуються наступні пропозиції:

BLOCKREAD (<ф .п . >, <буф> < [, <NN>] )

BLOCKWRITE (<ф . п . >, <буф> < [, <NN>] )

Тут <буф> - буфер: ім'я змінної, яка братиме участь в обміні даними з дисками;

<D> - кількість записів, які мають бути прочитані або записані за одне звернення до диска;

<NN> - необов'язковий параметр, що містить при виході з процедури кількість фактично оброблених записів.

За одне звернення до процедур може бути передано до N*recs байт, де RECS - довжина запису файлу, що не типізується. Передача йде, починаючи з першого байта змінної <буф>. Програміст повинен поклопотатися про те, щоб довжина внутрішнього представлення змінної <буф> була достатньою для розміщення всіх N*recs байт при читанні інформації з диска. Якщо при читанні вказана змінна <буф> недостатньої довжини або якщо в процесі запису на диск не виявиться потрібного вільного простору, виникне помилка введення-виводу, яку можна заблокувати, вказавши необов'язковий параметр <NN> (змінна типа WORD).

Після завершення процедури покажчик зміщується на <NN> записів. Процедурами SEEK, FILEPOS і FILESIZE можна забезпечити доступ до будь-якого запису файлу, що не типізується.



Питання для контролю.

  1. Які файли називаються не типізованими?

  2. В чому переваги не типізованих файлів?

  3. Де можна вказати довжину запису файлу?

  4. Як залежить швидкість обміну даними від довжини запису файла?

  5. які специфічні процедури використовуються для роботи з не типізованими файлами?




Тема 26: Робота з текстовими файлами


Текстові файли складаються з рядків довжиною від 0 до 256 символів. Для опису використовується стандартний тип Text:


var ім'я файлової змінної : text;


Після опису всі операції з текстовим файлом виконуються за допомогою файлової змінної. Для обробки текстових файлів використовують стандартні процедури: Assign; Reset; Rewrite; Close; Read; ReadLn; Write; WriteLn; Eoln; Eof; Append.

Процедура

Append(файлова змінна);


відкриває текстовий файл для розширення тобто наприкінці файлу можна додати текст.

За причини того, що число елементів файлу не задається, в Pascal введена ознака кінця файлу. Ознакою кінця файлу є наявність символу з кодом 26 (Ctrl+Z). Для визначення файлового покажчика використовується стандартна функція EoF. Викликається вона з одним параметром – файловою змінною:


EoF(файлова змінна);


і повертає логічне значення True, якщо досягнуто кінець файлу і False – у протилежному випадку. Наприклад, у циклі:


while not eof (файлова змінна) do

begin

end;


циклічна частина, укладена в операторні дужки, буде повторюватися доки не буде досягнуто кінця файлу.

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


while not eoln (файлова змінна) do

begin

end;


Приклад 1. Вивести латинський алфавіт у файл abc.txt.


var t : text;{t – файлова змінна типу text}

i: char;

begin

assign (t,’c:\tp\pasfiles\abc.txt’); {встановлює зв'язок файлової змінної t із}
{зовнішнім файлом abc.txt}

rewrite(t);{використовуємо цю процедуру, тому що файлу abc.txt на}
{диску не було}

for i := ’A’ to ‘Z’ do

write(t, i,’ ‘);{виведення латинського алфавіту в створений процедурою}
{rewrite дисковий файл abc.txt}

close(t);

end.


Приклад 2. Написати програму, що формує файл, компоненти якого є цілими числами.


var f : file of integer;

i : integer;

begin

assign (f1,’c:\tp\pasfiles\primer1.dat’);

rewrite(f);

repeat

readln(i);

write(f, i)

until i = 99; {вихід з циклу при введенні числа 99}

close(f);

end.


Приклад 3. Читання з файлу. Мається файл primer1.dat цілих чисел. Визначити кількість нулів у ньому.


var f : file of integer;

i, n0 : integer;

begin

assign (f1,’c:\tp\pasfiles\primer1.dat’);

reset(f);

while not eof (f) do

begin

read (f, i);

if i=0 then n0 := n0+1;

end;

close(f);

writeln(‘у файлі primer1.dat ‘,n0,’нулів’);

end.


Приклад 4. Мається файл abc.txt з англійським алфавітом. Роздрукувати букви алфавіту і їхню кількість.


var f : text;{t – файлова змінна типу text}

s : char; sum : byte;

begin

assign (f,’c:\ tp\ pasfiles\ abc.txt’);

reset(f);

while not eof (f) do

begin

read (f, s);

write(s);

if s <> ’ ’ then {якщо символ не пробіл, то}

sum := sum+1;

end;

close(f);

writeln;

write(‘в англійському алфавіті ‘,sum,’букв’);

end.


Приклад 5. Створити текстовий файл primer2.txt з довільним текстом.


var f : text;

Str : string;

begin

assign (f1,’c:\tp\pasfiles\primer2.txt’);

rewrite(f);

repeat

readln(str);

if str<>’ ’ then {перевірка: якщо рядок не порожній,}

writeln(f, str); {то писати у файл;}

until Str=‘ ’; {якщо введений рядок порожній, то вихід з циклу}

close(f);

end.


Приклад 5. Мається текстовий файл primer2.txt. Додати текст у його кінець.



var f : text;

str : string;

begin

assign (f,’c:\tp\pasfiles\primer2.txt’);

append(f);

repeat

readln(str);

if str<>’ ’ then

writeln(f, str);

until Str=‘ ’;

close(f);

end.



Питання для контролю.

  1. Представник файлу в Pascal-програмі.

  2. Поняття поточного покажчика.

  3. Оголошення файлу в Pascal-програмі.

  4. Процедура Assign і виконувана нею операція.

  5. Процедури Reset і Rewrite, місце в програмі і виконувані ними операції.

  6. Процедура Close і виконувані нею операції.

  7. Зчитування даних із зовнішнього файлу. Приклад.

  8. Запис даних у файл. Приклад.

  9. Текстові файли. Опис текстового файлу.

  10. Процедури, застосовувані при роботі з текстовими файлами.

  11. Функції EoF і EoLn, їхнє застосування.