RSS    

   Реферат: Основные понятия алгоритмического языка

ройства одной компоненты файла и запись ее в X.  Повторное применение

процедуры Read(f,X) обеспечит чтение следующей компоненты файла и за-

пись ее в X.

   Выполнение процедуры Write(f,X) состоит в записи X на внешнее уст-

ройство как   одной  компоненты.  Повторное применение этой процедуры

обеспечит запись X как следующей компоненты файла.

   Для работы  с компонентными файлами введена расширенная форма опе-

раторов ввода и вывода:

    Read(f,X1,X2,...XK)

    Write(f,X1,X2,...XK)

  

   Здесь f - компонентный файл, а переменные Х1, Х2,...ХК должны

иметь тот-же тип, что и объявленный тип компонент файла f.

                               

  

33.   Б Е С Т И П О В Ы Е   Ф А Й Л Ы

   Бестиповые файлы позволяют записывать на диск произвольные участки

пвмяти ЭВМ и считывать их с диска в память.  Операции обмена с бести-

повыми   файлами   осуществляется   с  помощью  процедур  BlokRead  и

BlockWrite. Кроме  того,  вводится расширенная форма процедур Reset и

Rewrite. В остальном принципы работы остаются такими же, как и с ком-

понентными файлами.

   Перед использованием логический файл

  

   var  f: File;

  

должен быть  связан  с  физическим с помощью процедуры Assign.  Далее

файл должен быть открыт для чтения или для  записи  процедурой  Reset

или Rewrite, а после окончания работы закрыт процедурой Close.

   При открытии файла длина буфера устанавливается по умолчанию в 128

байт. TURBO  PASCAL  позволяет изменить размер буфера ввода - вывода,

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

  

   Reset(var f: File; BufSize: Word )

  

или

  

   Rewrite(var f: File; BufSize: Word )

   Параметр BufSize задает число байтов, считываемых из файла или за-

писываемых в него за одно обращение. Минимальное значение BufSize - 1

байт, максимальное - 64 К байт.

   Чтение данных из бестипового файла осуществляется процедурой

  

  BlockRead( var f: File; var X; Count: Word; var QuantBlock: Word );

  

   Эта процедура осуществляет за одно обращение чтение в переменную X

количества блоков,  заданное параметром Count,  при этом длина  блока

равна длине  буфера.  Значение Count не может быть меньше 1.  За одно

обращение нельзя прочесть больше, чем 64 К байтов.

   Необязательный параметр  QuantBlock возвращает число блоков (буфе-

ров), прочитанных текущей операцией BlockRead. В случае успешного за-

вершения операции чтения QuantBlock = Count, в случае аварийной ситу-

ации параметр QuantBlock будет  содержать  число  удачно  прочитанных

блоков. Отсюда  следует,   что  с  помощью параметра QuantBlock можно

контролировать правильность выполнения операции чтения.

   Запись данных в бестиповой файл выполняется процедурой

  

   BlockWrite( var f: File; var X; Count: Word; var QuantBlock: Word );

  

которая осуществляет  за  одно обращение запись из переменной X коли-

чества блоков,  заданное параметром Count, при этом длина блока равна

длине буфера.

   Необязательный параметр  QuantBlock возвращает число блоков (буфе-

ров), записанных успешно текущей операцией BlockWrite.

                                                                   

  

34.  П О С Л Е Д О В А Т Е Л Ь Н Ы Й   И   П Р Я М О Й

Д О С Т У П

  

   Смысл последовательного  доступа  заключается в том,  что в каждый

момент времени доступна лишь одна компонента из  всей  последователь-

ности. Для  того,  чтобы обратиться (получить доступ)  к компоненте с

номером К,  необходимо просмотреть от начала файла К-1 предшествующую

компоненту. После обращения к компоненте с номером К можно обращаться

к компоненте с номером К+1. Отсюда следует, что процессы формирования

(записи) компонент   файла и просмотра (чтения)  не могут произвольно

чередоваться. Таким  образом, файл вначале строится при помощи после-

довательного добавления  компонент в конец,  а затем может последова-

тельно просматриваться от начала до конца.

   Рассмотренные ранее  средства работы с файлами обеспечивают после-

довательный доступ.

   TURBO PASCAL  позволяет применять к компонентным и бестиповым фай-

лам, записанным  на диск, способ прямого доступа. Прямой доступ озна-

чает возможность   заранее определить в файле блок,  к которому будет

применена операция ввода - вывода.  В случае бестиповых  файлов  блок

равен размеру буфера,  для компонентных файлов блок - это одна компо-

нента файла.

   Прямой доступ  предполагает,  что файл представляет собой линейную

последовательность блоков.  Если файл содержит n блоков, то они нуме-

руются от 1 через 1 до n.  Кроме того, вводится понятие условной гра-

ницы между блоками, при этом условная граница с номером 0 расположена

перед блоком с номером 1,  граница с номером 1 расположена перед бло-

ком с номером 2 и,  наконец,  условная граница с номером n  находится

после блока с номером n.

   Реализация прямого доступа осуществляется с помощью функций и про-

цедур FileSize, FilePos, Seek и Truncate.

   Функция FileSize( var f ):  Longint возвращает количество блоков в

открытом файле f.

   Функция FilePos( var f ):  Longint возвращает  текущую  позицию  в

файле f. Позиция в файле - это номер условной границы. Для только что

открытого файла текущей позицией будет граница с номером 0.  Это зна-

чит, что  можно записать или прочесть блок с номером 1.  После чтения

или записи первого блока текущая позиция переместится  на  границу  с

номером 1,  и можно будет обращаться к ьлоку с номером 2. После проч-

тения последней записи значение FilePos равно значению FileSize.

   Процедура Seek( var f; N: Longint) обеспечивает назначение текущей

позиции в файле (позиционирование).  В параметре N должен быть  задан

номер условной границы, предшествующей блоку, к которому будет произ-

водиться последующее обращение.  Например, чтобы работать с блоком 4,

необходимо задать значение N, равное 3. Процедура Seek работает с от-

крытыми файлами.

   Процедура Truncate( var f )  устанавливает в текущей позиции приз-

нак конца файла и удаляет (стирает) все последующие блоки.

  

   Пример. Пусть на НМД имеется текстовый файл ID.DAT, который содер-

жит числовые   значения  действительного  типа  по два числа в каждой

строке - значения аргумента и функции соответственно.  Количество пар

чисел не более 200.  Составить программу, которая читает файл, значе-

ния аргумента и функции записывает в одномерные массивы, подсчитывает

их количество,    выводит на экран дисплея и записывает в файл компо-

нентного типа RD.DAT.

   Program F;

    var

     rArg, rF: Array[1..200] of Real;

       inf: Text;

       outf: File of Real;

       n, l: Integer;

    begin

      Assign(inf,'ID.DAT');

      Assign(outf,'RD.DAT');

      Reset(inf);

      Rewrite(outf);

      n:=0;

      while not EOF(inf) do

        begin

          n:=n+1;

          ReadLn(inf,rArg[n],rF[n])

        end;

      for l:=1 to n do

       begin

        WriteLn(l:2,rArg[l]:8:2,rF[l]:8:2);

        Write(outf,rArg[l], rF[l]);

       end;

      close(outf)

    end.

                                              

  

35.   У К А З А Т Е Л И.

  

   Операционная система MS - DOS все адресуемое пространство делит на

сегменты. Сегмент - это участок памяти размером 64 К байт.  Для зада-

ния адреса необходимо определить адрес начала сегмента и смещение от-

носительно начала сегмента.

   В TURBO  PASCAL определен адресный тип Pointer - указатель.  Пере-

менные типа Pointer

   var p: Pointer;

  

содержат адрес какого - либо элемента программы и занимают  4  байта,

при этом   адрес хранится как два слова,  одно из них определяет сег-

мент, второе - смещение.

   Переменную типа указатель можно описать другим способом.

  

  type NameType= ^T;

  

  var p: NameType;

   

   Здесь p - переменная типа указатель, связанная с типом Т с помощью

имени типа NameType.  Описать переменную типа указатель можно  непос-

редственно в разделе описания переменных:

 

   var p: ^T;

  

   Необходимо различать  переменную  типа указатель и переменную,  на

которую этот указатель ссылается.  Например если p - ссылка на  пере-

менную типа Т, то p^ - обозначение этой самой переменной.

   Для переменных  типа  указатель  введено стандартное значение NIL,

которое означает,  что указатель не ссылается ни  к  какому  объекту.

Константа NIL используется для любых указателей.

   Над указателями не определено никаких операций,  кроме проверки на

равенство и неравенство.

   Переменные типа указатель могут быть записаны в левой части опера-

тора присваивания,  при этом в правой  части  может  находиться  либо

функция определения адреса Addr(X), либо выражение @ X, где @ - унар-

ная операция взятия адреса,  X - имя переменной любого типа,   в  том

числе процедурного.

   Переменные типа указатель не могут быть элементами списка ввода  -

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.