Программа


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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию