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

bobalo(1)

.pdf
Скачиваний:
588
Добавлен:
12.02.2016
Размер:
1.24 Mб
Скачать

BEGIN

X := F1;

GET(F1)

END;

У режимі запису значень змінної Y у файл F2 буферна змінна запа- м’ятовує значення Y, а стандартна процедура PUT(F2) записує значення буферної змінної F2↑ у файл і зсуває маркер файла на наступну позицію.

Процедура WRITE (F2, Y); через буферну змінну представляється:

BEGIN

F2:= Y;

PUT(F2)

END;

Приклад роботи з буферними змінними:

Задані два цілочислові файли F1 та F2 однакової довжини. Сформувати третій цілочисловий файл F3, компоненти якого вибираються за правилом: f3i = max (f1i, f2i):

PROGRAM BUF (F1, F2, F3); VAR

F1, F2, F3 : FILE OF INTEGER; BEGIN

RESET(F1);

RESET(F2);

REWRITE(F3);

WHILE NOT EOF(F1) DO BEGIN

IF F1> F2THEN F3:=F1ELSE F3:= F2;

PUT(F3);

GET(F1);

GET(F2)

END;

END.

2.4. ТЕКСТОВІ ФАЙЛИ

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

131

Текстовий файл є набором символів, тобто:

TYPE

T = FILE OF CHAR;

Але він відрізняється від файла, елементами якого є символи, тим, що текстовий файл поділяється на рядки, а файл типу CHAR такого поділу не розпізнає. Тобто файли Т1 і Т2 описані як:

VAR

T1 : FILE OF CHAR;

T2: TEXT;

відрізняються один від одного тим, що файл Т1 – це суцільний набір символів, а Т2 – набір символів, поділений на рядки.

Текстовий файл має розширення (*.txt) і у пам’яті комп’ютера або на зовнішніх носіях він не кодується (на відміну від усіх інших типів файлів). Текстові файли можна редагувати і переглядати за допомогою звичайних текстових редакторів.

Сам тип TEXT описувати у розділі опису типів не потрібно, він є ідентифікатором стандартного типу аналогічно до REAL чи INTEGER.

Рядки текстового файла можуть бути різної довжини. Для виявлення кінця рядка текстового файла використовується стандартна функція EOLN “End Of LiNe”, аргументом якої є ім’я файла:

EOLN( F2);

Функція EOLN набуває значення TRUE, якщо маркер вказує на символ кінця рядка і значення FALSE, якщо кінця рядка не досягнуто.

Для запису у файл символу “Кінець рядка” є стандартна процедура WRITELN, параметром якої є ім’я файла:

WRITELN(T2);

Для роботи з керуючим символом “Кінець рядка” використовується стандартна процедура READLN, параметром якої є ім’я текстового файла, який зчитується.

READLN(T2);

При виконанні цього оператора маркер встановлюється на першу позицію наступного рядка, тобто одразу після символу “Кінець рядка”.

Існують деякі особливості використання стандартних текстових файлів

INPUT та OUTPUT.

Файл INPUT призначений для введення із стандартного пристрою, а файл OUTPUT – для виведення інформації на стандартний пристрій, тобто це текстові файли.

132

1)файли INPUT та OUTPUT описувати у програмі не потрібно; Заборонено використовувати процедури RESET та REWRITE до файлів

INPUT та OUTPUT – ці файли відкриваються автоматично;

2)при зчитуванні із стандартного файла INPUT ім’я його в операторі можна не вказувати: запис READ (INPUT, X); є еквівалентний оператору

READ(X);

3)при виведенні на стандартний пристрій виведення ім’я стандартного файла виведення OUTPUT можна не вказувати: замість оператора

WRITE(OUTPUT, X); можна записати WRITE(X);

4)при використанні стандартних функцій EOLN та EOF для стандартних

файлів введення-виведення INPUT та OUTPUT їхні імена можна не вказувати, тобто ці функції будуть без параметрів.

2.5. ПРИКЛАДИ ПРОГРАМ ІЗ ЗАСТОСУВАННЯМ ТЕКСТОВИХ ФАЙЛІВ

Приклад. Визначити, скільки рядків записано у текстовому файлі TEST, вивести на друк найкоротший рядок.

Блок-схема алгоритму наведена на рис. 2. Пояснення до блок-схеми:

Блок 2 – присвоювання початкового значення лічильникам: рядків – К; кількість літер у рядку N.

Блоки 3-10 – цикл для знаходження кількості рядків і довжини кожного рядка.

Зокрема:

Блок 4 – читання поточного символу з файла.

Блок 5 – перевіряється, чи є цей символ “кінець рядка”. Якщо не кінець рядка, то

Блок 6 – лічильник кількості літер у рядку N збільшити на одиницю. Блок 7 – літера додається до рядка, який формується у масиві S. Якщо кінець рядка, то

Блок 8 – довжина рядка записується у масив MN.

Блок 9 – обнулюється початкове значення N.

Блок 10 – лічильник кількості рядків K збільшується на одиницю. Блок 11 – виводиться кількість рядків файла.

Блоки 12–13 – виводяться рядки тексту, записані у файлі.

Блоки 14–18 – шукається найкоротший рядок і його номер запам’ятовується під іменем N.

Блок 19 – виведення найкоротшого рядка масиву S.

133

1

Початок

 

 

 

2

К= 1

 

 

N= 0

 

3

 

так

кінець файла

 

4

ні

 

ввід

 

прочитати

 

 

символ

 

5

 

так

кінець рядка

 

6

ні

8

 

 

N=N+1

MK[K] = N

7

 

9

Заповнення

N = 0

 

рядка

 

 

 

 

10

 

 

K =K +1

11 вивід

 

кількості

 

 

рядків

 

12

 

 

i = 1, K-1

 

A

 

15

 

I = 1, K-1

 

16

 

MN[i] < MIN

ні

 

17

 

MIN = MK[i]

 

18

 

N = i

 

19

 

вивід

 

найкоротшого

 

рядка

 

20

 

Кінець

 

13

вивід

рядків

14

MIN = MK[1]

A

Рис. 2 Блок-схема алгоритму

Рис. 2. Блок-схема алгоритму

134

Текст програми визначення кількості рядків у файлі TEST і виведення найкоротшого рядка:

PROGRAM TEXTFILE1 (INPUT, OUTPUT);

VAR TEST: TEXT;

S : ARRAY [1..20] OF STRING;

MN: ARRAY [1..20] OF INTEGER;

K, N, I, MIN : INTEGER; A : CHAR;

BEGIN

ASSIGN (TEST, ’C:\FL-11\TEST.TXT’);

K := 1; N := 0;

RESET (TEST);

WRITELN (’ВВІД З ФАЙЛУ TEST.TXT’);

WHILE NOT EOF (TEST) DO

BEGIN

READ(TEST, A);

IF NOT EOLN (TEST) THEN

BEGIN

N:= N+1;

S[K]:= S[K]+A

END

ELSE

BEGIN

MN[K] :=N;

N:=0;

K:=K+1

END;

END;

WRITELN(’У ФАЙЛІ_’, K-1, ’_РЯДКІВ’);

FOR I := 1 TO K-1 DO

WRITELN (S[I]);

MIN := MN[1];

FOR I :=1 TO K-1 DO

IF MN[I] < MIN THEN

BEGIN

MIN:= MN[I];

N:=I

END;

WRITELN(’НАЙКОРОТШИЙ РЯДОК:’);

WRITELN(S[N]);

CLOSE(TEST)

END.

135

Приклад. Текстовий файл містить 20 рядків. Визначити, скільки рядків

закінчуються знаком переносу, скільки знаком оклику, скільки знаком

запитання.

 

 

 

 

Блок-схема алгоритму наведена на рис. 3.

 

1

ПОЧАТОК

 

 

 

 

 

 

 

2

i = 1, 20

 

 

 

 

 

 

 

3

MSTR [ I ]

 

 

 

 

 

 

 

4

 

 

 

 

SK1:=0; SK2:=0; SK3:=0

 

 

 

5

i = 1, 20

 

 

 

 

 

 

 

6

COPY(MSTR[I],

 

 

 

LENGTH(MSTR[I]), 1)

7

 

 

 

=’-'

SK1:=SK1+1

 

 

 

 

12

 

 

 

 

 

SK1

8

 

 

13

SK2

 

COPY(MSTR[I],

 

 

 

 

 

 

 

 

LENGTH(MSTR[I]), 1)

 

9

 

 

=’!'

 

SK2:=SK2+1

 

 

 

 

14

SK3

 

 

 

 

10

 

15

 

 

COPY(MSTR[I],

 

КІНЕЦЬ

 

 

 

LENGTH(MSTR[I]), 1)

 

11

 

 

=’?'

 

SK3:=SK3+1

 

 

Рис. 3. Блок-схема алгоритму

 

136

Пояснення до блок-схеми:

Блоки 2–3 – зчитування 20 рядків тексту MSTR[I] із файла TEST. Блок 4 – обнулення лічильників: SK1символ “-“,

SK2символ “!“,

SK3символ “?“.

Блок 5 – переглядаємо 20 рядків.

Блок 6 – перевіряється, чи закінчується рядок символом “-“. Якщо так, то

Блок 7 – лічильник кількості рядків, що закінчуються “-“ SK1, збільшити на одиницю.

Блок 8 – перевіряється, чи закінчується рядок символом “!“. Якщо так, то

Блок 9 – лічильник кількості рядків, що закінчуються “!“ SK2, збільшити на одиницю.

Блок 10 – перевіряється, чи закінчується рядок символом “?“. Якщо так, то

Блок 11 – лічильник кількості рядків, що закінчуються “?“ SK3, збільшити на одиницю.

Блоки 12–13 – значення лічильників виводяться на екран. Текст програми:

PROGRAM TEXTFILE2 (INPUT, OUTPUT); VAR TEST: TEXT;

MSTR : ARRAY [1..20] OF STRING; MN: ARRAY [1..20] OF INTEGER; SK1, SK2, SK2, I : INTEGER;

BEGIN

ASSIGN (TEST, ’C:\FL-11\TEST.TXT’); RESET (TEST);

SK1:= 0; SK2:= 0; SK3:= 0; FOR I:=1 TO 20 DO

READLN(TEST, MSTR[I]); FOR I:=1 TO 20 DO

BEGIN

IF COPY (MSTR[I], LENGTH(MSTR[I]), 1)=’-’ THEN SK1:= SK1+1;

IF COPY (MSTR[I], LENGTH(MSTR[I]), 1)=’!’ THEN SK2:= SK2+1;

IF COPY (MSTR[I], LENGTH(MSTR[I]), 1)=’?’ THEN SK3:= SK3+1;

END;

WRITELN(’ЗНАКОМ ПЕРЕНЕНСЕННЯ ЗАКІНЧУЄТЬСЯ’, SK1, ’РЯДКІВ’);

137

WRITELN(’ЗНАКОМ ОКЛИКУ ЗАКІНЧУЄТЬСЯ’, SK2, ’РЯДКІВ’); WRITELN(’ЗНАКОМ ЗАПИТАННЯ ЗАКІНЧУЄТЬСЯ’, SK3, ’РЯДКІВ’);

CLOSE(TEST)

END.

3.КОНТРОЛЬНІ ЗАПИТАННЯ

1.Який зміст файлового типу в мові Паскаль?

2.Як описується файловий тип?

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

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

5.Що таке буферна змінна і як вона записується?

6.Що таке файл типу TEXT?

7.Що собою являють стандартні файли типу INPUT та OUTPUT?

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

4.ЛАБОРАТОРНЕ ЗАВДАННЯ

1.Ознайомитися із файловим типом даних у мові Паскаль та процедурами введення–виведення.

2.Одержати індивідуальне завдання (див. додаток).

3.Скласти блок-схему алгоритму та програму мовою Паскаль, яка дає змогу зчитувати дані із зовнішнього файла і виводити результати у стандартний файл OUTPUT та зовнішній файл.

4.Для формування зовнішнього файла написати програму, яка читатиме інформацію з клавіатури та записувати у зовнішній файл.

5.Виконати обчислення за програмою.

5.ЗМІСТ ЗВІТУ

1.Мета роботи.

2.Короткий опис особливостей застосування файлового типу у мові Паскаль та процедур введення–виведення.

3.Індивідуальне завдання.

4.Блок-схема алгоритму для обчислення за індивідуальним завданням.

5.Тексти програм мовою Паскаль.

6.Результати обчислень за програмою.

7.Аналіз результатів, висновки.

138

Додаток

1.Прочитати з текстового файла F1 7 рядків тексту. Визначити, в яких рядках

єдві літери “S”. Вивести ці рядки на друк.

2.У текстовому файлі F1 записано 5 рядків тексту; визначити рядки, у яких є слова “IN” та “ON”.

3.У файлі F1, який містить матрицю цілих чисел А(7,8), визначити найменше число. Вивести на друк рядок і стовпець, у яких знаходиться це число.

4.Прочитати з текстового файла F1 текст. Замінити всі слова “OS” на “COS”. Результат записати у файл F2 і вивести на системний друкуючий пристрій.

5.З файла F прочитати масив А(5, 10), відсортувати кожен рядок цього масиву за зростанням, результат записати у файл FR і вивести на системний друкуючий пристрій.

6.У текстовому файлі F1 вибрати слова, які складаються з п’яти літер. Записати ці слова у файл S і вивести на друк.

7.З файла F прочитати матрицю MF (10, 10). Поміняти місцями елементи головної та побічної діагоналей. Результуючу матрицю вивести на друк.

8.З текстового файла F прочитати 7 рядків тексту. У файл F2 записати текст, помінявши рядки у порядку спадання їхньої довжини. Тобто найпершим має стати найдовший рядок, а останнім найкоротший.

9.З файла F прочитати матрицю S (10, 12), знайти найбільший елемент кожного рядка, записати його у масив В і у файл FB.

10.З файла F1 прочитати текст, визначити, скільки літер “К” є в кожному рядку.

Уфайл F2 записати рядок, у якому цих літер є найбільше.

11.З файла F прочитати матрицю А (10, 12), пронормувати цю матрицю, тобто поділити кожний елемент на максимальний у своєму рядку.

12.У текстовому файлі F визначити кількість речень, в яких є слова, які закінчуються буквою “К” і містять не менше трьох літер.

13.У файлі F1 записано матрицю МА (10, 12); поміняти рядки цієї матриці так, щоб кількість додатних елементів збільшувалась від першого рядка до останнього. Результат записати у файл FR і вивести на друк.

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

15.З файла F прочитати матрицю М (10, 15). Знайти мінімальний елемент цієї матриці, записати нулі в рядок і в стовпець, де цей елемент знаходиться.

16.З файла S прочитати матрицю А (10, 10), обчислити суму елементів, розміщених над головною діагоналлю.

17.У текстовому файлі Т1, який складається з 8 рядків, поміняти місцями перший і останній рядки. Результат записати у файл Т2.

18.Прочитати з файла F матрицю А(10, 10), знайти середнє арифметичне додатних елементів головної діагоналі.

19.З файла Т1 прочитати 8 рядків тексту. Сформувати масив Т типу Boolean , елемент якого буде мати значення TRUE, якщо в рядку кількість слів кратна числу 7,

якщо ні – FALSE.

139

20.З файла F1 прочитати матрицю А(10, 10), знайти найбільший елемент кожного рядка і помістити його на головну діагональ, а діагональний елемент – на місце найбільшого.

21.З файла F прочитати матрицю М(10, 14), відсортувати елементи кожного стовпця за спаданням. Результат записати у файл F2.

22.У текстовому файлі визначити найдовший рядок і поставити його – на місце першого рядка, а перший рядок – на місце найдовшого.

23.З текстового файлу F1 прочитати текст і перенести у файл F2 назви місяців року, які зустрічаються в тексті. Якщо таких слів немає, то видати відповідне повідомлення.

24.Прочитати матрицю М(10, 12) з файла F1. Переставити рядки цього масиву так, щоб сума елементів кожного рядка зростала від першого до останнього рядка.

25.З файла F1 прочитати масив А(7, 9), визначити максимальне значення суми елементів рядка, вивести цей рядок на друк.

26.У текстовому файли Т1, який складається з 10 рядків, визначити кількість слів, що починаються літерами “I” або “Н”. Вивести рядки, у яких є такі слова.

27.З файла F1 прочитати матрицю А(7, 10), визначити найменше значення модуля різниці між сусідніми елементами стовпця. Записати ці значення у масив В.

28.З файла F1 прочитати масив MF(10, 10). Обчислити середнє арифметичне додатних і від’ємних елементів.

29.З файла F2 прочитати текст і визначити, чи є у тексті рядки однакової довжини. Якщо є, то вивести ці рядки на друк.

30.З файла F прочитати матрицю S(10, 10) і визначити, чи однакова кількість відповідно додатних і від’ємних елементів, розміщених над і під головною діагоналлю.

140

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]