Лабораторная работа № 9 Обработка файлов
1. Общие сведения
Для выполнения лабораторной работы необходимо изучить теоретический материал по следующим разделам:
1)файлы, объявление файлов;
2)виды файлов, организация файлов различных видов;
3)стандартные процедуры для работы с файлами.
2.Задание
Для выполнения задания необходимо составить две программы. Первая программа должна обеспечивать ввод исходных данных с клавиатуры, создание соответствующего условию задачи типизированного файла и запись исходных данных в этот файл. Вторая программа должна выполнять указанные в варианте задания действия над файлом, созданным в результате работы первой программы.
3. Требования к выполнению задания
При решении задач необходимо придерживаться следующих основных требований:
1)исходные данные, необходимые для работы программы, следует разместить в типизированных файлах, тип которых соответствует типу компонент, обусловленному условиями задачи;
2)файлы, содержащие исходные данные, необходимо создавать с помощью вспомогательной программы;
3)при разработке программы следует выделить отдельные подзадачи решаемой задачи и реализовать их решение с помощью подпрограмм;
4)в программе запрещается чтение всех данных из исходного файла и размещение их в массиве;
5)при необходимости разрешается создание любого числа вспомогательных файлов;
6)в программе запрещается использование следующих встроенных подпрограмм языка Турбо-
Паскаль: SEEK, FILESIZE, FILEPOS.
7)для проверки работоспособности программы необходимо разработать и выполнить соответствующие тесты, которые должны предъявляться при сдаче задания;
8)исходные данные и результаты работы программы должны выводиться на печать;
9)оформление программ должно соответствовать "Общим требованиям к оформлению программ". Неправильно оформленные программы не рассматриваются.
4.Примечания
При разработке программ, предназначенных для организации работы с файлами, следует иметь в виду, что в большинстве случаев необходимость в таких программах возникает, если общий объем данных слишком велик для размещения их в основной памяти или заранее неизвестен (возможно, из-за необходимости обработки файлов переменной длины).
Вобоих случаях невозможно считывание файла целиком и размещение данных в одной из статических структур, например, массиве. Указанное обстоятельство предполагает, что при обработке файлов необходимо использовать алгоритмы, основанные на чтении в основную память конечного числа компонент файла.
Всвязи с этим, выполняя задание, необходимо ограничиться считыванием из файла от нескольких (обычно от одной до трех) компонент с постепенной заменой их на следующие компоненты, находящиеся на диске.
Вусловиях заданий использовались следующие термины:
Текст – произвольная последовательность символов, которая может содержать пробелы и знаки препинания. Пробелы разбивают текст на слова. Знаки препинания разбивают текст на предложения.
Знак препинания – символ точки.
Слово – последовательность символов, не содержащая пробелов.
Серия – последовательность, содержащая более двух одинаковых символов.
5. Пример выполнения задания
Задание
Дан файл f, компонентами которого являются целые числа. Составить программу, которая ищет в файле подпоследовательности целых чисел, образующих арифметическую прогрессию, и определяет их длину. Подпоследовательности переписываются в файл g в порядке их следования, а их длины – в файл k.
{Автор: Иванов И.И.} {Группа: ФФ-111} {Тема: Работа с файлами} { Основная прграмма.} program Lab9;
type
FInt=file of integer;
procedure PrintFile(var F:FInt); var
X:integer; begin
reset(F);
while not eof(F) do begin read(F,X);
write(' ',X:4); end;
writeln; end;
var
F,G,H,K:FInt;
A1,A2,A3,D12,D23:integer;
X,N:integer;
L:boolean; begin
assign(F,'In.dat');
assign(G,'Out.dat');
assign(H,'H.dat');
assign(K,'Num.dat'); writeln(' Исходный файл'); PrintFile(F);
reset(F);
rewrite(G);
rewrite(H);
rewrite(K);
if eof(F) then halt else begin
read(F,A2);
if eof(F) then halt else read(F,A3)
end;
Тесты
N:=0; D12:=A3-A2;
while not eof(f) do begin repeat
A1:=A2;
A2:=A3;
read(f,A3); D23:=A3-A2; L:=D12=D23; if L then begin
write(H,A1);
N:=N+1; end; D12:=D23;
until not L or eof(F); if eof(F) then
if L then begin
A1:=A2;
A2:=A3; end;
if N>0 then begin write(H,A1); write(H,A2); N:=N+2; write(K,N); N:=0;
end; reset(H);
while not eof(H) do begin read(H,X);
write(G,X); end; rewrite(H);
end;
writeln(' Арифметические прогрессии');
PrintFile(G); writeln(' Длина
последовательностей'); PrintFile(K);
end.
1.Исходный файл пуст. Ожидаемый результат – печать пустого файла.
2.Исходный файл содержит меньше трех чисел. Ожидаемый результат – печать содержимого файла.
3.Исходный файл содержит числа 1 0 1 0 Ожидаемый результат – печать содержимого файла и пустых последовательностей.
4.Исходный файл содержит числа 1 2 3 4 8 10 12 14 15 5 8 11 2. Ожидаемый результат – печать содержимого файла, прогрессии: 1 2 3 4 8 10 12 14 5 8 11 – и значения длин: 4 4 3.
5.Исходный файл содержит числа 1 2 3 4 5. Ожидаемый результат – печать содержимого файла, прогрессии: 1 2 3 4 5 – и значения длин: 5.
{Автор: Иванов И.И.} |
write(' N= '); |
{Группа: ФФ-111} |
readln(N); |
{Тема: Работа с файлами.} |
for I:=1 to N do begin |
{Подготовка исходного файла} |
read(X); |
program Lab9; |
write(F,X) |
var |
end; |
F:file of integer; |
close(F) |
X,I,N:integer; |
end. |
begin |
|
assign(F,'In.dat'); |
|
rewrite(F); |
|