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

Автор: Пользователь скрыл имя, 27 Марта 2013 в 11:59, лекция

Краткое описание

СОСТАВ ЯЗЫКА. Обычный разговорный язык состоит из четырех основных
элементов: символов, слов, словосочетаний и предложений. Алгоритми-
ческий язык содержит подобные элементы, только слова называют элемен-
тарными конструкциями, словосочетания-выражениями, предложения-опера-
торами.

Файлы: 1 файл

Лекции по Паскалю.doc

— 405.00 Кб (Скачать)

   Процедура Rewrite( var f )  открывает  логический файл f для после-

дующей записи  данных (открывает  выходной файл).  После успешного  вы-

полнения этой процедуры файл готов  к записи в него первого  элемента.

   Процедура Close( var  f )  закрывает   открытый до этого логический

файл. Вызов процедуры Close необходим  при завершении работы с файлом.

Если  по  какой-то  причине  процедура Close не будет выполнена, файл

все-же  будет создан на внешнем  устройстве,  но содержимое последнего

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

оператора закрытия файла необязательно.

   Логическая функция EOF( var f ): Boolean возвращает значение TRUE,

когда при чтении достигнут конец  файла.  Это означает, что уже прочи-

тан последний элемент в файле  или файл после открытия оказался пуст.

   Процедура Rename( var f; NewName: String ) позволяет переименовать

физический файл на диске, связанный  с логическим файлом f. Переимено-

вание возможно после закрытия файла.

   Процедура Erase( var f )  уничтожает  физический файл на диске, ко-

торый был связан с файловой переменной f.  Файл к моменту вызова про-

цедуры Erase должен быть закрыт.

   Функция  IOResult: Integer возвращает  целое число, соответствующее

коду последней ошибки ввода - вывода.  При нормальном завершении опе-

рации функция вернет значение 0. Значение функции IOResult необходимо

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

ция обнуляет свое значение. Функция IOResult работает только при вык-

люченном режиме проверок ошибок ввода - вывода или с ключом  компиля-

ции {$I-}.

  

  

31.   Т Е К С Т О В  Ы Е   Ф А Й Л Ы

  

   Особое место в языке  ПАСКАЛЬ занимают текстовые файлы,  компоненты

которых имеют символьный тип.  Для описания текстовых файлов в  языке

определен стандартный тип Тext:

 

         var    TF1, TF2: Text;

 

   Текстовые файлы  представляют  собой  последовательность строк,  а

строки - последовательность символов.  Строки имеют переменную длину,

каждая строка завершается признаком конца строки.

   С признаком конца строки  связана функция EOLn(var T:Text):Boolean,

где Т - имя  текстового  файла.  Эта функция принимает значение TRUE,

если достигнут конец строки, и значение  FALSE, если  конец  строки не

достигнут.

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

лены также операторы обращения  к процедурам:

 

   ReadLn(T) - пропускает строку  до начала следующей;

 

   WriteLn(T) -  завершает  строку  файла,  в которую производится  за-

пись, признаком конца строки и переходит к началу следующей.

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

ров ввода и вывода. Оператор

 

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

 

 эквивалентен группе операторов

 

    begin

      Read(T,X1);

      Read(T,X2);

      ...........

      Read(T,XK)

    end;

 

   Здесь Т - текстовый файл, а переменные Х1, Х2,...ХК могут  быть ли-

бо  переменными  целого, действительного  или символьного  типа,  либо

строкой. При чтении значений переменных из файла они преобразуются из

текстового представления в  машинное.

   Оператор

 

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

 

эквивалентен группе операторов

 

    begin

      Write(T,X1);

      Write(T,X2);

      ...........

      Write(T,XK)

    end;

 

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

быть целого, действительного, символьного, логического типа или стро-

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

реннего представления в текстовый.

   К текстовым файлам относятся  стандартные файлы INPUT, OUTPUT.

   Рассмотренные ранее операторы  ввода - вывода являются частным  слу-

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

дартные файлы ввода - вывода INPUT, OUTPUT.

   Работа с этими файлами  имеет особенности:

   -имена этих файлов в  списках ввода - вывода не указываются;

   -применение процедур  Reset,  Rewrite и Close к стандартным файлам

ввода - вывода запрещено;

   -для работы с файлами  INPUT,  OUTPUT введена разновидность функции

EOLn без параметров.

   TURBO PASCAL вводит дополнительные  процедуры и функции, применимые

только к текстовым файлам,  это SetTextBuf,  Append, Flush, SeekEOLn,

SeekEOF.

   Процедура SetTextBuf( var f: Text; var Buf; BufSize: Word ) служит

для увеличения  или уменьшения буфера ввода - вывода текстового файла

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

128 байтам.  Увеличение размера  буфера сокращает количество  обращений

к диску.  Рекомендуется изменять разиер буфера до открытия файла. Бу-

фер файла начнется с первого  байта переменной Buf.  Размер буфера за-

дается в необязательном параметре BufSize,  а если этот параметр  от-

сутствует, размер буфера определяется длиной переменной Buf.

   Процедура Append( var f:  Text )  служит для специального открытия

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

открывает из для дозаписи в конец  файла.

   Процедура Flush(  var  f: Text )  применяется  к открытым  выходным

файлам. Она  принудительно  записывает данные из буфера в файл незави-

симо от степени его заполнения.

   Функция SeekEOLn( var f: Text ): Boolean возвращает значение True,

если до конца строки остались только пробелы.

   Функция SeekEOF( var f:  Text ): Boolean возвращает значение True,

если до конца файла остались строки, заполненные пробелами.

  

  

32.   К О М П О Н Е  Н Т Н Ы Е   Ф А Й  Л Ы

                                     

   Компонентный или типизированный  файл - это файл с объявленным   ти-

пом его компонент. Компонентные файлы состоят из машинных представле-

ний значений переменных,  они хранят данные в том же виде,  что и  па-

мять ЭВМ.

   Описание величин файлового  типа имеет вид:

 

         type M= File Of T;

 

где М - имя файлового типа, Т - тип  компоненты. Например:

 

         type

           FIO= String[20];

           SPISOK=File of FIO;

         var

           STUD, PREP: SPISOK;

 

   Здесь STUD,   PREP  - имена  файлов,  компонентами которых  являются

строки.

   Описание файлов можно  задавать в разделе описания  переменных:

 

         var

            fsimv: File of Char;

            fr: File of Real;

 

   Компонентами файла могут  быть все скалярные типы,  а  из структури-

рованных - массивы, множества, записи. Практически во всех конкретных

реализациях языка ПАСКАЛЬ конструкция "файл файлов" недопустима.

   Все операции  над   компонентными  файлами  производятся  с помощью

стандартных процедур:

 

   Reset, Rewrite, Read, Write, Close.

 

    Для ввода - вывода  используются процедуры:

 

     Read(f,X);

     Write(f,X);

 

   где f - имя логического файла,  Х - либо переменная,  либо массив,

либо строка,  либо множество, либо запись с таким же описанием, какое

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

    Выполнение процедуры  Read(f,X)  состоит в чтении с  внешнего уст-

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

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