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

лабораторные на Pasca (Кудрявцев)l

.pdf
Скачиваний:
32
Добавлен:
18.03.2015
Размер:
1.63 Mб
Скачать

Файлы

153

 

 

Все приведенные выше процедуры работы с файлом удобно объ- единить в одной программе. В этом случае процедуры вызываются

из основной программы путем указания номера нужного режима в меню. После выполнения процедуры происходит возврат в основ- ную программу.

Program Proizv_File; Const Razmer = 20; Type Books = Record

Nomer: integer; Avtor: string[14]; Nazv: string[30]; Index: integer

End;

Var BooksFile: File of Books; RecBooks: Books; k,K1: integer; i,Rej: integer; FileName: string[12];

Procedure Form; {описание процедур} <.........>;

Procedure ZapKl; <.........>; Procedure ObrKl; <.........>; Procedure KorKl; <.........>;

Begin

while True do begin

Writeln('Укажите режимы: '); Writeln(' 1: Форматизация '); Writeln(' 2: Загрузка по ключу '); Writeln(' 3: Обработка по ключу '); Writeln(' 4: Корректировка ');

Writeln(' 5: Выход из программы '); Readln(Rej);

case Rej of

1:Form;

2:ZagrKl;

3:Obrkl;

4:KorrKI;

5:Halt

else Writeln ('Повторите ввод')

154

Лабораторная работа № 13

 

 

end

end End.

ТЕКСТОВЫЕ ФАЙЛЫ

Определение типа. Текстовый файл это файл, состоящий из компонентов, являющихся строками. Длина строки может меняться от 0 до 255. Каждая строка завершается маркером конца строки CR/LF (код $0D/$0A), файл маркером конца файла CTRL/Z (код $1A). Для описания файловых переменных используется стандарт- ный идентификатор Text.

Формат: Var

<идентификатор>: Text;

Пример: Var Instr1,Instr2: Text; Dokument: Text;

ПРОЦЕДУРЫ И ФУНКЦИИ ОБРАБОТКИТЕКСТОВОГО ФАЙЛА

Assign(FV, Str) связывает текстовый файл с файловой перемен- ной;

Rewrite(FV) открывает для создания новый текстовый файл; Reset(FV) открывает уже существующий текстовый файл;

Close(FV) закрывает текстовый файл (при выполнении записыва- ется маркер конца файла);

Append(FV) открывает файл и устанавливает маркер на указатель конца файла;

Read(FV, Ch) считывает символ Ch из файла FV; Write(FV, Ch) записывает символ Ch в файл FV; Readln(FV, Str) читает из файла FV строку Str; Readln(FV) переходна новую строку; Writeln(FV, Str) записывает в файл FV строку Str; Writeln(FV) записывает в файл пустую строку;

Eoln(FV) возвращает True, если указатель файла достиг маркера конца строки. В противном случае возвращает False;

Файлы

155

 

 

SeekEoln(FV) аналогична предыдущей, но указатель файла пере- ходит все пробелы и знаки табуляции;

SeekEof(FV) возвращает значение True, если указатель файла на- ходится на маркере конца файла.

Процедуру Readln(FV) используют, как правило, для подсчета коли-

чества компонентов в файле

St:= 0;

{обнуление счетчика}

while not Eof(FV) do begin

 

readln(FV);

{пропуск строки}

St:= St+1

{увеличение счетчика на 1}

end;

 

write('В файле находится ', St:4,' строк');

 

а процедуру Writeln(FV) для создания строкпробелов

for i:= 1 to 7 do writeln(FV);

Если файловая переменная FV не указана, по умолчанию подразу- мевается файл вывода на экран Output.

Оpганизация текстового файла. Осуществляется таким образом: 1) объявляется файловая переменная в качестве текстовой; 2) имя файла связывается с файловой переменной (процедура Assign); 3)

открывается

файл

для

записи

(процедура

Rewrite);

4)

подготавливается строка для записи (например, вводится с кла-

виатуры); 5)

записывается

строка в

файл (процедура

Writeln);

6)

закрывается файл (процедура Close).

 

 

Пример:

Создать текстовый файл с произвольным именем и типом на диско- воде А. Файл содержит строки делового письма. Каждая строка со- стоит из не более чем 60 символов. Если значение строки равно 'kkk', то прекратить запись в файл. Оформить в виде процедуры с именем SozdT.

Program TextFiles;

Type Dlina = string[60];

Var Stro: Text; FileName: string[14]; S: Dlina; Rej: char;

Procedure SozdT; begin

write(' Введите имя создаваемого текстового файла '); readln(FileName);

156

Лабораторная работа № 13

 

 

Assign(Stro, FileName); rewrite(Stro); while True do

begin readln(S);

if S='kkk' then begin

Close(Stro); Exit

end;

writeln(Stro, S) { Запись в файл } end

end;

Доступ к компонентам текстового файла. Осуществляется та-

ким образом: 1) связать имя файла с файловой переменной (проце- дура Assign); 2) открыть файл для чтения (процедура Reset); 3) про- читать компонент файла (оператор Radln); 4) обработать компонент (например, распечатать на экране монитора); 5) закрыть файл (про- цедура Close).

Пример.

Распечатать все компоненты файла, созданного в предыдущем примере. Имя процедуры распечатки ObrT.

Procedure ObrT; begin

{$I–} {Отмена контроля операций вводавывода} repeat

write(' Введите имя выводного файла: '); readln(FileName);

Assign(Stro, FileName); reset(Stro);

until (IOResult = 0) or (FileName = 'kkk');

{$I+}

{Включение контроля операций вводавывода}

while not SeekEof(Stro) do

 

begin

 

readln(Stro, S);

{Чтение из файла}

writeln(S);

 

end;

 

end;

 

Корректировка текстового файла. Заключается в расширении текстового файла новыми компонентами. Для корректировки необ- ходимо: 1) связать имя файла с файловой переменной (процедура

Файлы

157

 

 

Assign); 2) открыть файл для внесения новых компонентов (проце- дура Append); 3) записать новые компоненты (процедура Write); 4) закрыть файл (процедура Close).

Пример. Расширить ранее созданный файл новыми компонентами. Если значение строки равно 'kkk', прекратить запись. Имя процеду- ры расширения RasshT.

Procedure RasshT; begin

{$I–}

{Отмена контроля операций вводавывода}

repeat

 

writeln('Имя корректируемого файла: '); readln(FileName);

Assign(Stro, FileName);

Append(Stro);

 

until IOResult = 0;

 

{$I+}

{Включение контроля операций вводавывода }

while True do begin

writeln('Вводите строку'); readln(S);

if S = 'kkk' then begin Close(Stro); Exit; end; writeln(Stro, S)

end

end;

Все приведенные выше процедуры работы с файлом объединим в одной программе. В этом случае процедуры вызываются из основ- ной программы путем указания номера нужного режима в меню. После выполнения процедуры происходит возврат в основную про- грамму.

Пример.

Объединить функциональные блоки по созданию, обработке и рас- ширению текстовых файлов в одной программе. Имя файла запра- шивать у пользователя. Если при обработке и расширении указан- ный файл на диске не найден, запросить имя заново.

Program TextFiles;

Uses Crt;

Type Dlina = string[60]; Var Stro: Text;

S: Dlina; Rej: char;

158

Лабораторная работа № 13

 

Procedure SozdT; {описание процедур}

<.........

>;

Procedure ObrT;

<.........

>;

Procedure RasshT;

<.........

>;

Begin

while True do begin

ClrScr; writeln('Укажите режим: '); writeln(' 1: Создание текстового файла '); writeln(' 2: Вывод текстового файла: ');

writeln(' 3: Расширение текстового файла: '); writeln(' 4: Выход из программы: '); read(Rej);writeln;

case Rej of '1': SozdT; '2': ObrT; '3': RasshT; '4': Halt;

else writeln('Повторите ввод режима'); end

end

End.

ФАЙЛЫ БЕЗ ТИПА

Файлы, не имеющие типа (нетипизированные), описываются с по- мощью зарезервированного слова File.

Формат: Var <файловая переменная>: File;

Нетипизированные файлы считываются и записываются только блоками по 128 байт, для чего используются специальные процеду-

ры BlockRead и BlockWrite соответственно.

Формат: BlockRead(FV, Var, Count); BlockWrite(FV, Var, Count);

или

BlockRead(FV, Var, Count, Result);

BlockWrite(FV, Var, Count, Result);

где FV идентификатор файловой переменной, Var переменная любого типа (обычно это массив), Count количество блоков по

Файлы

159

 

 

128 байт, которое нужно считать или записать, Result количество блоков, которое было передано фактически. Размер Var должен быть больше или равен 128 Count.

Пример.

Программа быстрого копирования файлов.

Program Untypped_File;

Var OldFile, NewFile: File; OldName, NewName: string[14];

Oblbuf: array[1..128, 1..200] of byte; Count: integer;

Begin

writeln('Дайте имя исходного файла '); readln(OldName); Assign(OldFile, OldName);

Reset(OldFile);

writeln('Дайте имя выходного файла: '); readln(NewName); Assign(NewFile, NewName); rewrite(NewFile);

repeat

BlockRead(OldFile, Oblbuf, 200, Count); BlockWrite(NewFile, Oblbuf, Count);

until Count = 0;

Close(OldFile); Close(NewFile); End.

КОНТРОЛЬНЫЕ ЗАДАНИЯ

Вариант 1

1.Создать файл из 50 целых чисел, используя генератор случайных чисел. Вывести эти числа на экран. Вывести на экран все числа из этого файла, оканчивающиеся на 7. Найти среднее арифметическое всех чисел, входящих

всозданный файл. Найти наименьшее из них.

2.Создать два упорядоченных файла целых чисел. Объединить их, создав новый упорядоченный файл.

3.Создать текстовый файл. Подсчитать количество предложений в нем. Найти самое длинное слово.

Вариант 2

1. Создать файл из 55 целых чисел, используя генератор случайных чисел. Переписать все четные числа из этого файла в другой. Вывести оба файла на экран. Найти в новом файле среднее арифметическое его элементов. Найти наибольший элемент в новом файле.

160

Лабораторная работа № 13

 

 

2.Создать два упорядоченных по возрастанию файла: 1–й из четных чисел, 2 – из нечетных чисел.

3.Создать текстовый файл. Подсчитать количество знаков препинания в нем. Найти самое короткое слово.

Вариант 3

1.Используя генератор случайных чисел, создать файл из 20 целых чисел, кратных 5. Вывести его на экран. Найти среднее арифметическое этих чисел. Найти количество элементов, окачивающихся нулем. Найти наименьшее из них.

2.Создать два упорядоченных по убыванию файла. Объединить их в упо- рядоченный по убыванию файл.

3.Создать текстовый файл. Убрать лишние пробелы. Вывести на экран слова, начинающиеся с буквы А”.

Вариант 4

1.С помощью датчика случайных чисел создать файл из 35 целых чисел. Вывести его на экран. Найти наибольшее из чисел, оканчивающихся на 3. Посчитать числа, оканчивающиеся на 3. Найти среднее арифметическое ос- тальных чисел.

2.Создать два упорядоченных по убыванию файла. Объединить их в упо- рядоченный по возрастанию файл.

3.Создать текстовый файл. Определить количество вопросительных предложений и количество слов в первом предложении.

Вариант 5

1.С помощью датчика случайных чисел создать файл из 40 целых чисел. Вывести все четные числа, встречающиеся в созданном файле. Посчитать их количество. Найти их среднее арифметическое. Найти число, ближайшее к среднему арифметическому.

2.Создать два упорядоченных файла: один по убыванию, другой по возрастанию.

3.Создать текстовый файл. Зашифровать его, используя метод обратного

чтения

Вариант 6

1. Создать файл из 20 вещественных чисел, выбранных случайным образом из отрезка [10..30]. Вывести его на экран. Найти наибольший и наименьший элементы в этом файле. Найти сумму всех элементов файла.

Файлы

161

 

 

2.Создать два упорядоченных файла: один по не убыванию, другой по не возрастанию. Объединить эти файлы в новый, упорядоченный по убыва- нию.

3.Создать текстовый файл. Вывести его на экран. Вывести на экран по- следнее предложение. Определить количество слов в нем.

Вариант 7

1.Создать файл из 30 вещественных чисел, выбранных случайным образом из отрезка [5, 8]. Вывести его на экран. Найти среднее арифметическое его элементов. Найти все элементы, расстояние которых от среднего арифмети- ческого не превышает 1 и записать их в новый файл. Найти наибольший сре- ди них.

2.Создать два упорядоченных по возрастанию файла. Объединить их в упорядоченный по убыванию файл.

3.Создать текстовый файл. Вывести его на экран. Определить, есть ли в тексте слово заряд”.

Вариант 8

1.Создать файл из 25 вещественных чисел, выбранных случайным образом из отрезка [10, 12]. Вывести файл на экран. Найти наибольший и наимень- ший элементы. Найти среднее арифметическое первых 10 элементов.

2.Создать два файла. Первый по закону xn = 1/n, второй yn = 1/(n+1). Объ- единить их в упорядоченный по возрастанию файл.

3.Создать текстовый файл. Вывести его на экран. Поменять местами пер- вое и последнее слово.

Вариант 9

1.Создать файл из 50 вещественных чисел, выбранных случайным образом из отрезка [1, 4]. Вывести файл на экран. Найти наибольший элемент. Найти среднее арифметическое последних 15 чисел.

2.Создать два файла. Первый по закону xn = n2 , где n = 1..10, а второй – y = n2 + 1, где n = 1 .. 15. Создать новый файл, упорядоченный по убыванию, путем слияния двух ранее созданных.

3.Создать текстовый файл. Вывести его на экран. Сколько в этом файле слов, оканчивающихся на м”.

Вариант 10

1. Создать файл из 25 вещественных чисел, выбранных случайным образом из отрезка [1, 8]. Вывести файл на экран. Найти наименьший элемент. Найти среднее арифметическое всех элементов. Вывести на экран все элементы, ко- торые отличаются от среднего арифметического не более чем на 0.5.

162

Лабораторная работа № 13

 

 

2.Создать два файла. Первый по правилу xn = 3n + 1, где n = 5..15, второй

n = 4..18. Создать новый файл, упорядоченный по возрастанию, путем слияния двух созданных.

3.Создать текстовый файл. Вывести его на экран. Вывести на экран самое длинное предложение.

Вариант 11

1.Создать файл из 30 вещественных чисел, выбранных случайным образом из [1..5]. Вывести его на экран. Найти наибольший элемент. Найти среднее арифметическое 18 последних чисел, среднее арифметическое всех чисел.

2.Создать два файла. Первый по правилу xn = n + 1, второй yn = 1 – 2n, где n = 1...20. Получить новый файл, упорядоченный по возрастанию, путем слияния двух созданных.

3.Создать текстовый файл. Вывести его на экран. Вывести на экран пред- последнее предложение.

Вариант 12

1.Создать файл из 28 целых чисел, используя датчик случайных чисел из отрезка [30, 100]. Вывести его на экран. Найти среднее арифметическое всех нечетных чисел. Найти наименьшее среди четных чисел.

2.Создать два файла. Первый по правилу xn = (1 –2n)/n, где n = 1 .. 20, вто- рой y = 1/n, где n = 1 .. 10. Создать новый файл, упорядоченный по убыва- нию, путем слияния двух созданных.

3.Создать текстовый файл. Вывести его на экран. Вывести на экран пред- ложения, начинающиеся с буквы В”.

Вариант 13

1.Дан файл f, компоненты которого являются действительными числами. Найти: a) сумму компонент файла f; b) произведение компонент файла f;

c)сумму квадратов компонент файла f; d) модуль суммы и квадрат произве- дения компонент файла f; e) последнюю компоненту файла.

2.Даны символьные файлы f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компо- ненты, в которой файлы f и g отличаются между собой.

3.Дан текстовый файл f. Получить все его строки, содержащие более 60 символов.

Вариант 14

1. Дан файл f, компоненты которого являются действительными числами. Найти: a) наибольшее из значений компонент; b) наименьшее из значений компонент с четными номерами; c) наибольшее из значений модулей компо-