лабораторные на Pasca (Кудрявцев)l
.pdfФайлы |
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) наибольшее из значений модулей компо-