Программа
PROGRAM FileFilter;
CONST tBegin=0.1; { Начальное значение t }
tEnd=3; { Конечное значение t }
Step=0.1; { Шаг изменения t }
TYPE IntegerFile=file of integer; { Тип "Файл целых чисел" }
VAR F,T:IntegerFile; { Файловые переменные обрабатываемого
и временного файлов }
PROCEDURE OutIntegerFile(var F:IntegerFile); { Процедура вывода файла }
Var Buf:integer; { Буферная переменная }
Begin
Reset(F); { Открытие файла для чтения }
while not EOF(F) do begin { Цикл просмотра файла }
Read(F,Buf); { Чтение файла }
Write(Buf:8) { Вывод прочитанного поля }
end;
WriteLn; { Вывод конца строки }
Close(F) { Закрытие файла }
End;
PROCEDURE Make(var F:IntegerFile); { Процедура создания файла }
Procedure SortFile(var F:IntegerFile);
{ Процедура сортировки файла по строгому возрастанию.
Элементы не удовлетворяющие условию сдвигаются в конец файла }
procedure Change(var F:IntegerFile;Number1,Number2:longint);
{ Проседура взаимной перестановки двух элементов в файле }
var Buf1,Buf2:integer; { Буферные переменные для чтения компонент файла }
begin {Change}
if Number1<>Number2 then { Если индексы компонент не совпадают, }
begin { то перестановка элементов }
Seek(F,Number1); { Установка указателя на первый элемент }
Read(F,Buf1); { Чтение первого элемента }
Seek(F,Number2); { Установка указателя на второй элемент }
Read(F,Buf2); { Чтение второго элемента }
Seek(F,Number2); { Установка указателя на второй элемент }
Write(F,Buf1); { Запись первого элемента }
Seek(F,Number1); { Установка указателя на первый элемент }
Write(F,Buf2) { Запись второго элемента }
end
end; {Change}
var i,j:longint; { Счетчики компонент файла }
MinElement,MaxElement:integer;
{ Интервал искомого элемента }
Buf,Buf2:integer; { Буферные переменные для чтения компонент }
NumberOfMinElement:longint;
{ Номер элемента, нижней границы значений искомых элементов }
begin {SortFile}
Reset(F); { Открытие файла }
begin { Первичный поиск наименьшего элемента: }
Read(F,MinElement); { Чтение первого элемента как минимального }
NumberOfMinElement:=0; { Фиксирование номера минимального элемента }
for i:=1 to FileSize(F)-1 do { Цикл просмотра оставшейся части файла }
begin { с поиском наименьшего элемента }
Read(F,Buf); { Чтение элемента }
if Buf<MinElement { Сравнение прочитанного элемента с минимальным }
then begin { если новый элемент меньше минимального, то запоминание }
MinElement:=Buf; { нового элемента как минимального }
NumberOfMinElement:=i { запоминание его идекса }
end
end
end; { первичный поиск наименьшего элемента }
Change(F,NumberOfMinElement,0); { Перестановка минимального элемента
в начало файла }
for i:=1 to FileSize(F)-2 do
{ Цикл сортировки оставшейся части файла }
begin
Seek(F,i-1); { Установка указателя на последний элемент
отсортированной части массива }
Read(F,MinElement); { Чтение элемента как минимального }
Read(F,MaxElement); { Чтение следующего элемента как максимального }
NumberOfMinElement:=i; { Запоминание номера элемемента как
минимального из неотсортированной части файла }
while not EOF(F) and (MinElement>=MaxElement) do
{ Просмотр оставшейся части файла до условия
MaxElement>MinElement или до конца файла }
begin
NumberOfMinElement:=NumberOfMinElement+1; { Подсчет номера
минимального элемента из неотсортированной части файла }
Read(F,MaxElement) { Чтение очередного элемента }
end;
for j:=NumberOfMinElement+1 to FileSize(F)-1 do
{ Просмотр оставшейся части файла для нахождениия минимального
элемента из интерала ]MinElement..MaxElement] }
begin
Read(F,Buf); { Чтение компоненты файла }
if (MinElement<Buf)and(Buf<MaxElement)
then begin { Если элемент находится в дапозоне, то }
NumberOfMinElement:=j; { переопределение номера
минального элемента из найденых
в неотсортированной части файла }
MaxElement:=Buf { Запоминание текущего элемента как
верхнюю границу интервала поиска }
end
end;
Change(F,NumberOfMinElement,i) { Перестановка первого элемента из
неотсортированной части файла с найденным элементом }
end;
{ Удаление неотсортированного конца файла: }
if FileSize(F)>1 then { Если длина файла больше одного, то }
begin
Seek(F,0); { Установка указателя на начало файла }
{ Чтение первых двух компонент: }
Read(F,Buf);
Read(F,Buf2);
i:=1; { Фиксирование счетчика компонент }
while not EOF(F) and (Buf<Buf2) do
{ Цикл движения по файлу до неотсортированной части или до конца }
begin
i:=i+1; { Подсчет номера компоненты }
Buf:=Buf2; { Запоминание предыдущего элемента }
Read(F,Buf2) { Чтение сдедующего элемента }
end;
if Buf>=Buf2 then begin { Если последний прочитанный элемент
принадлежит неотсортированной части файла, то }
Seek(F,i); { Установка указателя на элемент }
Truncate(F) { Удаление части файла }
end
end;
Close(F); { Закрытие файла }
end; {SortFile}
Var i:integer; { Счетчик }
Buf:integer; { Буферная переменная }
Begin {Make}
Rewrite(F); { Открытие файла под запись }
for i:=0 to Round((tEnd-tBegin)/Step) do { Цикл создания файла }
begin
Buf:=Trunc(15*Sin(Pi*(tBegin+i*Step)/4)); { Вычисление значения поля }
Write(F,Buf); { Запись поля файла }
end;
Close(F); { Закрытие файла }
SortFile(F) { Сортировка файла удаляемых номеров }
End; {Make}
PROCEDURE Filter(var F,T:IntegerFile);
{ Процедура обнуления компонет файла F, с номерами указанными в файле T }
Const Nul:integer=0; { Записываемый 0 }
Var MeterT:longint; { Счетчик компонент файла T }
IndicateF:integer; { Указатель файла F }
Begin
Reset(F); { Открытие файла F }
Reset(T); { Открытие файла T }
for MeterT:=0 to FileSize(T)-1 do
{ Цикл просмотра файла T }
begin
Read(T,IndicateF); { Чтение значения указателя из файла T }
if IndicateF<=FileSize(F) { Если значение указателя не превосходит }
then begin { размер файла, то }
Seek(F,IndicateF-1); { Установка указателя }
Write(F,Nul) { Запись нуля }
end
end;
Close(F); { Закрытие файла F }
Close(T); { Закрытие файла T }
End;
BEGIN
WriteLn; { Пропуск строки }
Assign(F,'TAB337.DAT'); { Связывание файловой переменной
обрабатываемого файла }
Assign(T,'TEMP'); { Связывание файловой переменной временного файла }
WriteLn('Исходный файл ','TAB337.DAT'); { Вывод заголовка }
OutIntegerFile(F); { Вывод файла }
WriteLn; { Пропуск строки }
Make(T); { Создание файла удаляемых номеров }
WriteLn('Обнуляемые номера:'); { Вывод заголовка }
OutIntegerFile(T); { Вывод файла }
WriteLn; { Пропуск строки }
Filter(F,T); { Обработка файла }
WriteLn('Полученный файл ','TAB337.DAT'); { Вывод заголовка }
OutIntegerFile(F); { Вывод файла }
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию