Мегаобучалка Главная | О нас | Обратная связь


Список констант выбора: ( );



2020-02-04 205 Обсуждений (0)
Список констант выбора: ( ); 0.00 из 5.00 0 оценок




    Program Prim 46;

Type zap=record

         nomer:byte;

         artikul:integer;

      case flag:boolean of

         true:(cena1:integer);

         false:(cena2:real); end;

Var h,s:zap;

BEGIN with h do

Begin nomer:=1; artikul:=2345; flag:=true; cena1:=25;

writeln('nomer=',nomer,' artikul=',artikul,' cena1=',cena1);

     flag:=false; cena2:=3.2;

writeln('cena2 ',cena2);

  end ; readln ; END .


Файлы

 

10.1. Общие замечания

 

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

Файл – поименованная область памяти, как правило, на внешнем носителе, предназначенная для хранения информации. файл можно также считать структурированным типом данных, состоящим из последовательности компонент одного и того же типа и одинаковой длины и структуры. чаще всего компонентами файла являются записи.

Файл может быть связан с внешним носителем информации, т.е. располагаться на магнитном или СД диске, магнитной ленте, клавиатуре при вводе информации или на экране, принтере и при выводе её и т.д.

Файлы бывают стандартными, т.е. определенными разработчиками или администраторами операционной системы или вычислительной среды, а также пользователем, т.е. человеком, составляющим программы в каком-либо алгоритмическом языке (например в Pascal), или с помощью других программных продуктов (баз данных, редакторов и т.д.).

Каждый файл имеет свое имя, которое зарегистрировано в соответствующей директории (оглавлении).

Определение файлового типа строится по такой схеме:

Туре имя типа=file of тип компонент;

Var идентификатор,.., идентификатор: имя типа;

Например:

Туре zap=record

Nom: integer;

FIO: string [20];

oklad: real; end;

Ft=file of zap;

Var a, b, с: Ft;

Описаны три файла с именами а, b , с типа Ft. Компонентами файлов служат записи типа zap. Другими словами, файл схематично можно представить в виде «ленты» компонент, каждая из которых является записью типа zap. Доступ к компонентам файла может быть последовательным и прямым. Последовательный доступ – это когда для обращения к n-й компоненте необходимо «посмотреть» n-1 компонент; прямой доступ – обращение к компоненте идет прямо по «ключу» (номеру компоненты), без «просмотра» предыдущих компонент.

При работе с файлом «внимание» машины сосредоточено на компоненте, определенной указателем файла (этой компонентой будет работать машина при следующем обращении к файлу).

Имя файла должно быть уникальным и состоящим из собственного имени и необязательного расширения – типа файла, содержащего три символа и отделенного от основного имени точкой. Расширение, как правило, указывает в мнемонической форме на содержимое файла: pas, ехе, txt и т.д. В некоторых случаях тип файла присваивается автоматически операционной системой или используемым пакетом.

Каждый диск, содержащий файлы, имеет оглавление, в которое помещается информация о его имени, расширении, времени и дате его создания, о местонахождении на физическом носителе (например, на диске С или D).

Для поиска файла необходимо указать диск, каталог, подкаталог, имя файла, его расширения.

Например: C:\TURBO\Prim\Prim46.pas.

Здесь файл Prim 46.pas находится в подкаталоге Prim каталога TURBO диска С.

 

10.2. Стандартные процедуры и функции для работы с файлами

 

Далее примем обозначения: FV - имя файловой переменной или просто имя файла, str - строковое выражение, Р - имя структурной компоненты файла, n - целое выражение.

Assig и (FV, str); – процедура присвоения имени файла.

Имя файла, которое является значением str, присваивается переменной файлового типа FV. Далее все действия над этой переменной будут эквивалентны действиям над файлом, определенным именем str. Например: Assign (books, 'c:\bibl.dos'); позволяет работать не с именем 'c:\bibl.dos', которое может быть достаточно длинным (если имеются каталоги и подкаталоги), а с именем books.

Rewrite (FV); – процедура создания нового файла с именем FV на диске. Имя файла должно быть предварительно определено процедурой Assign. Если на диске уже был файл с таким именем, то он уничтожается. Указатель файла устанавливается в первую позицию с номером 0. Файл еще не содержит ни одной компоненты, а только подготовлен к загрузке.

Reset (FV); – процедура открытия (разрешение работать с файлом именем FV) уже имеющегося файла. Указатель устанавливается на начало файла, в позицию с номером 0.

Read (FV, Р); – процедура чтения компоненты файла, на которую установлен указатель, ее содержимое помещено в область памяти с именем Р.

Write (FV, Р); – процедура записи информации из области памяти Р в файл FV и компоненту, на которую установлен указатель.

Seek (FV, n ); – процедура установки указателей на компоненту с номером n.

Fl ush (FV); – очищение буфера сектора. Выполнение процедуры приводит к выталкиванию содержимого внутреннего буфера (области памяти) в файл.

Close (FV); – процедура закрытия файла, при этом записывается маркер конца файла. После работы с файлом его необходимо обязательно закрыть.

Erase (FV); – процедура уничтожения файла. Если производится уничтожение открытого файла, его необходимо предварительно закрыть.

Rename (FV, str); – процедура переименования файла. Файлу FV присваивается имя str.

Truncate (FV); – процедура уничтожения всех компонент файла, начиная с места текущего положения указателя и подготовки файла к записи.

Eof (FV) – функция проверки маркера конца файла. Значение функции равно True, если указатель файла находится за последней компонентой, и False – в противном случае.

Filepos (FV) – функция определения положения указателя.

Filesize (FV) – функция определения длины файла. Функция возвращает целочисленное значение, равное количеству компонент файла: если File Size (FV) = 0, то файл пуст.

Loresult (FV) – функция проверки результата последней операции ввода- вывода на наличие ошибок. Если ошибка обнаружена, возвращается код ошибки, если нет, то код = 0.

 

10. 3. Стандартные файлы

Con: – консоль (клавиатура или экран дисплея). Турбо-Паскаль устанавливает различия между этими устройствами по направлению передачи данных: чтение данных возможно только с клавиатуры, а запись - только на экран. Ввод с клавиатуры буферизуется: символы по мере нажатия клавиш помещаются в буфер, содержимое которого передается в ЭВМ только после нажатия клавиши ENTER, поскольку вводимые и буферизированные символы отображаются на экране. Con применяется «по умолчанию» для ввода с помощью операторов READ и Readln и для вывода на экран – операторов write и writeln, если не указано имя файла FV.

Все внешние устройства ЭВМ трактуются в Pascal как логические устройства, имеющие имена файлового типа и которым соответствуют заранее определенные (стандартные) файлы. Идентификацию (отождествление) устройства и стандартного файла осуществляют специальные программы (драйверы), которые обеспечивают выполнение операций ввода-вывода между процессором и конкретным физическим устройством. Ниже указаны имена файлов и соответствующие им устройства так, как они определены разработчиками системы.

Trm: – терминал, предназначенный для ввода с клавиатуры и вывода на экран без редактирования.

Kbd: – клавиатура, используемая только для ввода с клавиатуры, при вводе информация не отображается на экран.

P R N: – построчно печатающее устройство (принтер), используемое только для вывода.

Aux : – вспомогательное устройство, подключающееся через порты.

Usr: – устройство пользователя, применяемое при написании собственных драйверов для организации нестандартного ввода-вывода.

10.4. Файлы последовательного доступа, созданные пользователем

Работа с файлом последовательного доступа предполагает его создание, обработку и корректировку. Для создания файла последовательного доступа необходимо:

- объявить файловую переменную;

- «привязать» файл к физическому носителю информации (присвоить файлу имя). (Assign);

- открыть новый файл (Rewrite);

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

- записать в файл компоненту (Write);

- повторить п. 4, 5 необходимое количество раз;

- закрыть созданный файл (Close).

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

- присвоить файлу имя (Assign);

- открыть уже существующий файл (Reset);

- считать текущую компоненту из файла в рабочую область памяти (как правило, типа запись со структурой компоненты), (Read);

- выполнить обработку информации (например, вывести на экран поля записи);

- закрыть файл (Close).

Возможны три типа корректировки файла как прямого, так и последовательного доступа:

1. Расширение файла за счет внесения новых компонент.

2. Полная замена содержимого компоненты.

3. Замена каких-либо полей отдельных компонент.

Замена содержимого компонент отдельных записей или замена полей отдельных записей будет рассмотрена в следующем подразделе при изучении корректировки компонент файлов прямого доступа.

Добавление новых записей в файл последовательного доступа выполняется путем записи компонент в конце файла. Маркер конца файла при этом переносится. Естественно, на физическом носителе при этом должно иметься свободное пространство.

Для записи новых компонент в конце имеющегося файла необходимо:

- присвоить файлу имя (Assign);

- открыть уже существующий файл (Reset);

- установить указатель файла за последней компонентой (Seek (FV, File sise (FV)):

- создать в специально выделенной области памяти (как правило записи) новую компоненту;

- записать новую компоненту в файл (write);

- закрыть файл (Close).

Пример. Организовать последовательный файл с именем PRIM bibl.dos в подкаталоге Prim каталога TURBO на диске С, т.е. C:\TURBO\bibl.dos. Компонента должна иметь структуру: индекс книги, порядковый номер экземпляра, фамилию, инициалы первых трех авторов (если их несколько), название книги. Блок создания файла оформить в виде процедуры с именем org. Блок доступа к компонентам файла оформить в виде процедуры с именем obr., а блок корректировки – в виде процедуры с именем Rash.

        Program Prim47;

type books=record         { базовая запись }

      nomer:integer;

      avtor:string[16];

      nazv:string[30];

        index:integer; end;

var bf:file of books;  { описать файловую переменную }

      rb:books;          { участок памяти со структурой }

                              { компоненты файла }

procedure org;

   begin assign(bf,'C:\TURBO\PRIM\bibl.dos');

          Rewrite(bf);

     with rb do     { работать с записью rb без уточненных имен }

     while True do

   begin writeln(' ввести номер книги ');

              readln(nomer);

         if nomer =9999 then {9999 – признак окончания ввода данных}

          Begin close(bf); Exit end;

              writeln(' ввести имя автора ');

              readln(avtor);

              writeln('ввести название книги');

              readln(nazv);

              writeln('ввести значение индекса');

              readln(index);

              write(bf,rb); { записать компоненту из rb в файл }

   end; end;

procedure Obr;

  Begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');

        Reset(bf);

        with rb do

        while not Eof(bf) do{ выйти из цикла , когда закончится файл }

    begin read(bf,rb);

        writeln(nomer:5,avtor:16,Nazv:10,index:6); { вывод на экран }

   end; Close(bf); end;

procedure Rash;

  begin Assign(bf,'C:\TURBO\PRIM\bibl.dos');

        Reset(bf);

        Seek(bf,Filesize(bf)); { установить указатель на конец файла }

        with rb do

        while True do

       begin writeln(' ввести номер ');     readln(nomer);

        if nomer=9999 then begin Close(bf);Exit end;

        writeln(' ввести имя автора ');  readln(avtor);

        writeln('ввести название книги'); readln(nazv);

        writeln('ввести значение индекса'); readln(index);

        write(bf,rb); end;end;

BEGIN                         { основная программа }

        Org; Obr; Rash; Obr; readln;

END.

При создании больших программ их части удобно создавать в виде отдельных файлов (объектов), которые затем с помощью директивы компилятора {$i...} можно объединить в одну программу. Это удобно еще и тем, что несколько программистов могут создавать различные программы, что в несколько раз может ускорить процесс их создания.

Создадим ту же программу, что и Prim 47, только пообъектно, тогда процедуру Org запишем в C:\TURBO\Org1.pas, процедуру Obr – в C:\TURBO\Orb1.pas, процедуру Rash – в C:\TURBO\Rash1.pas, а вызывающую (основную программу – в C:\TURBO\Prim. 48, в которой предусмотрим подключение объектов – процедур Org, Obr, Rash к основной программе через директивы компилятора $ i.

procedure Org1;

begin

  assign(bf,'C:\TURBO\bibl.dos');

          Rewrite(bf);

     with rb do

     while True do

   begin writeln ('ввести номер книги');

              readln(nomer);

              if nomer=9999 then

          begin close(bf); Exit;

          end;

               writeln('ввести имя автора');

              readln(avtor);

              writeln('ввести название книги');

              readln(nazv);

              writeln('ввести название индекса');

              readln(index);

                 write(bf,rb);

    end;

end;

procedure Obr1;

begin

        Assign(bf,'C:\TURBO\bibl.dos');

        Reset(bf);

with rb do

        while not eof(bf) do

   Begin read(bf,rb);

        writeln(nomer:5,avtor:16,Nazv:10,index:6);

   end;

        Close(bf);

     writeln(' нажмите enter'); readln;

end;

procedure Rash1;

  begin Assign(bf,'C:\TURBO\bibl.dos');

        Reset(bf);

        Seek(bf,Filesize(bf));

        with rb do

        while True do

   begin writeln(' введите номер '); readln(nomer);

        if nomer=9999 then begin Close(bf);exit end;

        writeln(' введите имя автора ');  readln(avtor);

        writeln('введите название книги'); readln(nazv);

        writeln('введите значение индекса'); readln(index);

        write(bf,rb);

   end;end;

Работу построим в режиме меню.

Program Prim48;

label M;

type books=record

      nomer:integer;

      avtor:string[16];

      nazv:string[30];

      index:integer; end;

Var bf:file of books;

      rb:books; regim:byte;

{$i C:\TURBO\Org1.pas}

{$i C:\TURBO\Obr1.pas}

{$i C:\TURBO\Rash1.pas}

BEGIN

  M: writeln('введите режим работы');

      writeln('1 – создание, 2 – обработка',

              '3 – расширение, 4 – выход');

      readln(regim);

      case regim of

   1:Org1;

   2:Obr1;

   3:Rash1;

   4:Exit; else writeln(' неправильно задан режим '); end;

           goto M ;         

END .

Для обеспечения работы с различными именами файлов имя файла вначале запрашивается, а затем передается в процедуры. Таким образом, мы можем создавать несколько файлов, содержащих данные о книгах, их обрабатывать, расширять и т.п.

Program Prim49;

label M1,M2 ;

type books=record

      nomer:integer;

      avtor:string[16];

      nazv:string[30];

      index:integer; end;

Var bf:file of books;

      rb:books; regim:byte; si:char; fl:string;

{$i C:\TURBO\Org.pas}

{$i C:\TURBO\Obr.pas}

{$i C:\TURBO\Rash.pas}

BEGIN

     M1: writeln('где будет храниться файл? диск:\каталог\имя'),

         readln(fl);

     M2: writeln('введите режим работы');

         writeln('1 – создание, 2 – обработка',

              '3 – расширение, 4 – выход');

          readln(regim);

      case regim of

   1:Org;

   2:Obr;

   3:Rash;

   4:begin writeln(' будем ещё работать с файлами ? - "Y"');

           writeln('или конец работы – любая клавиша');

           readln(si);

           if (si='Y')or(si='y') then goto M1 else HALT; end;

     else begin writeln('неправильно задан режим');

           goto M2; end; end; goto M2;

END.

Procedure Org2;

begin

  assign(bf, fl);

          Rewrite(bf);

     with rb do

     while True do

   begin writeln ('введите номер книги');

              readln(nomer);

              if nomer=9999 then

          begin close(bf); Exit end;

              writeln(' введите имя автора ');

              readln(avtor);

              writeln('введите название книги');

              readln(nazv);

              writeln('введите значение индекса');

              readln ( index );

              write(bf,rb);

   end; end;

Procedure Obr2;

begin

        Assign(bf, fl);

        Reset(bf);

with rb do

        while not Eof(bf) do

   begin read(bf, rb);

        writeln(nomer:5,avtor:16,Nazv:10,index:6);

   end; Close(bf);

End;

Procedure Rash2;

  begin assign(bf, fl);

        Reset(bf);

        Seek(bf,Filesize(bf));

        with rb do

        while True do

   begin writeln(' введите номер '); readln(nomer);

        if nomer=9999 then begin Close(bf);Exit end;

        writeln(' введите имя автора ');  readln(avtor);

        writeln('введите название книги'); readln(nazv);

        writeln('введите значение индекса'); readln(index);

        write(bf,rb);

   end;end;

 

10.5. Файлы произвольного доступа

 

Файлы произвольного доступа используются при наличии зависимости значения какого-либо поля компоненты от ее порядкового номера в файле. Порядковый номер компоненты иногда называют ключом компоненты файла.

Организовать файл произвольного доступа можно двумя способами:

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

2. Создать файл фиктивных (с пустыми полями) компонент, затем загрузить его по ключу фактическими данными. этот способ – создание файла с фиктивными компонентами – называется форматизацией.

Пример. Форматировать файл произвольного доступа из 20 компонент c:\turbo\bibl.dos. Структура компонент такая же, как и в Prim 47–49. Оформим алгоритм в виде процедуры form, запишем ее в c:\turbo\form.pas.

Procedure form;

Begin w r iteln (' дайте имя форматизируемому файлу');

readln(filname);



2020-02-04 205 Обсуждений (0)
Список констант выбора: ( ); 0.00 из 5.00 0 оценок









Обсуждение в статье: Список констант выбора: ( );

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (205)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.009 сек.)