Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

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

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

       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 - имя переменной любого типа,   в  том
    числе процедурного.
       Переменные типа указатель не могут быть элементами списка ввода  -
    вывода.


    36.   Д И Н А М И Ч Е С К И Е   П Е Р Е М Е Н Н Ы Е

       Статической переменной (статически размещенной) называется описан-
    ная явным образом в программе переменная, обращение к ней осуществля-
    ется по имени.  Место в памяти для размещения статических  переменных
    определяется при компиляции программы.
       В отличие от таких статических переменных в программах, написанных
    на языке ПАСКАЛЬ,  могут быть созданы динамические переменные. Основ-
    ное свойство динамических переменных заключается в том,  что они соз-
    даются и   память  для  них выделяется во время выполнения программы.
    Размещаются динамические переменные  в  динамической  области  памяти
    (heap - области).
       Динамическая переменная не указывается явно в описаниях переменных
    и к   ней нельзя обратиться по имени.  Доступ к таким переменным осу-
    ществляется с помощью указателей и ссылок.
       Работа с динамической областью памяти в TURBO PASCAL реализуется с
    помощью процедур и функций New,  Dispose,  GetMem,   FreeMem,   Mark,
    Release, MaxAvail, MemAvail, SizeOf.
       Процедура New( var p:  Pointer ) выделяет место в динамической об-
    ласти памяти   для  размещения  динамической переменной p^ и ее адрес
    присваивает указателю p.
       Процедура Dispose(  var p:  Pointer )  освобождает участок памяти,
    выделенный для размещения динамической переменной процедурой  New,  и
    значение указателя p становится неопределенным.
       Проуедура GetMem( var p:  Pointer; size:  Word )  выделяет участок
    памяти в   heap - области,  присваивает адрес его начала указателю p,
    размер участка в байтах задается параметром size.
       Процедура FreeMem( var p:  Pointer; size: Word ) освобождает учас-
    ток памяти,  адрес начала которого определен указателем p, а размер -
    параметром size. Значение указателя p становится неопределенным.
       Процедура Mark( var p:  Pointer )  записывает в указатель p  адрес
    начала участка свободной динамической памяти на момент ее вызова.
       Процедура Release( var p: Pointer ) освобождает участок динамичес-
    кой памяти,   начиная с адреса,  записанного в указатель p процедурой
    Mark,  то-есть,  очищает ту динамическую память,  которая была занята
    после вызова процедуры Mark.
       Функция MaxAvail: Longint возвращает длину в байтах самого длинно-
    го свободного участка динамической памяти.
       Функция MemAvail:  Longint полный объем свободной динамической па-
    мяти в байтах.
       Вспомогательная функция SizeOf( X ):  Word возвращает объем в бай-
    тах, занимаемый  X, причем X может быть либо именем переменной любого
    типа, либо именем типа.
       Рассмотрим некоторые примеры работы с указателями.

        var
         p1, p2: ^Integer;

       Здесь p1 и p2 - указатели или пременные ссылочного типа.

        p1:=NIL;  p2:=NIL;

       После выполнения этих операторов присваивания указатели p1 и p2 не
    будут ссылаться ни на какой конкретный объект.

        New(p1);  New(p2);

       Процедура New(p1) выполняет следующие действия:
       -в памяти ЭВМ выделяется участок для  размещения  величины  целого
    типа;
       -адрес этого участка присваивается переменной p1:

                    г=====¬          г=====¬
                    ¦  *--¦--------->¦     ¦
                    L=====-          L=====-
                 
Пред.678910След.
скачать работу

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

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ