Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kitkat_otvety.doc
Скачиваний:
3
Добавлен:
01.08.2019
Размер:
3.29 Mб
Скачать

Билет 15

  1. Типизированные файлы и работа с ними.

2. Оператор присваивания.

1) Типизированный файл содержит компоненты одного типа. Тип компонентов может быть любым, кроме файлового. Создать и просмотреть такой файл при помощи тексто­вого редактора как текстовый файл нельзя. Поэтому обработка таких файлов должна осуществляться программным путем.

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

Обычно доступ к файлам организуется последовательно, то есть, когда элемент счи­тываете с помощью стандартной процедуры read или записывается с помощью стандар­тной процедуры write, указатель файла перемещается к следующему по порядку элемен­ту файла. Однако к типизованным файлам можно организовать прямой доступ с помощью стандартной процедуры Seek, которая перемещает указатель файла к заданно­му элементу. Для определения текущей позиции в файле и текущего размера файла мож­но использовать стандартные функции FilеPos и FileSize.

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

2) Оператор присваивания предназначен для замены текущего значения переменной но­вым, задаваемым значением. В общем виде оператор записывается: < переменная > := <выражение >; Переменная и выражение должны быть идентичного или совместимого для присва­ивания типа. Например, переменной вещественного типа можно присвоить значение вы­ражения вещественного или целого типа. Переменной же целого типа нельзя присвоить значение выражения вещественного типа.

Билет 16

  1. Нетипизированные (двоичные) файлы и работа с ними.

  2. Позиционные системы счисления. Двоичная, восьмеричная и шестнадцатеричная системы. Связь между ними.

1)Нетипизированные файлы объявляются как файловые перемен­ные типа File и отличаются тем, что для них не указан тип компо­нентов. Отсутствие типа делает эти файлы, с одной стороны, со­вместимыми с любыми другими файлами, а с другой - позволяет ор­ганизовать высокоскоростной обмен данными между диском и па­мятью.

При инициации нетипизированного файла процедурами Reset или Rewrite можно указать длину записи нетипизированного файла в байтах. Например, так:

var

F: File;

begin

AssignFile(F,'myfile.dat');

Reset (f,512);

end.

Длина записи нетипизированного файла указывается вторым па­раметром при обращении к процедурам Reset или Rewrite, в качест­ве которого может использоваться выражение типа Longlnt. Если длина записи не указана, она принимается равной 128 байтам.

Object Pascal не накладывает каких-либо ограничений на длину записи нетипизированного файла за исключением требования по­ложительности и ограничения максимальной длины 2 Гбайт (для Delphi I длина записи ограничивается 65535). Для обеспечения максимальной скорости обмена данными рекомендуется задавать длину, которая была бы кратна длине физического сектора диско­вого носителя информации (512 байт). Однако операции обмена данными с дисковыми устройствами в среде Windows кэшируются, т. е. осуществляются через промежуточный буфер памяти, поэтому обычно задают RecSize = 1, что позволяет обмениваться с файлом блоками любой длины, начиная с одного байта.

При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением Read и write, которые заменяются соответственно вы­сокоскоростными процедурами BlockRead и BlockWrite:

Procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

Procedure BlockWrite(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);

Здесь Buf - буфер: имя переменной, которая будет участвовать в обмене данными с дисками; count - количество записей, которые должны быть прочитаны или записаны за одно обращение к диску; AmtTransferred - необязательный параметр, содержащий при выхо­де из процедуры количество фактически обработанных записей. За одно обращение к процедурам может быть передано до count*RecSize байт, где RecSize - длина записи нетипизированного файла. Передача идет, начиная с первого байта переменной Buf. Программист должен позаботиться о том, чтобы длина внутреннего представления переменной Buf была достаточной для размещения всех count*RecSize байт при чтении информации с диска. Если при чтении указана переменная недостаточной длины или если в процес­се записи на диск не окажется нужного свободного пространства, возникнет ошибка ввода-вывода, которую можно заблокировать, указав необязательный параметр AmtTransferred. После завершения процедуры указатель смещается на count запи­сей. Процедурами seek, FilePos и Filesize можно обеспечить дос­туп к любой записи нетипизированного файла.

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

Позиционная система счисления – система, в которой значение символа зависит от его позиции в числе. Примером является десятичная система счисления, знакомая нам с детства, а также двоичная, восьмеричная и шестнадцатеричная системы счисления. Позиционная система счисления характеризуется основанием – количеством знаков, или символов, используемых для изображения числа в разрядах данной системы счисления. Для двоичной и восьмеричной системы основаниями являются соответственно две (0,1) и восемь (0,1,2,3,4,5,6,7) цифр. В шестнадцатеричной системе недостаточно десяти цифр для изображения числа, поэтому для обозначения чисел используются как цифры, так и символы A, B, C, D, E, F. Связь между этими системами. Так как основания данных систем счисления кратны двум, то можно легко перейти от одной системы к другой. Чтобы перейти из восьмеричной системы в двоичную, нужно каждую цифру числа заменить на трехзначное число, представленное в двоичной системе счисления (так называемую триаду). То есть: чтобы перевести число из восьмеричной системы в двоичную нужно заменить каждую восьмеричную цифру соответствующей ей триадой. Для перевода числа из двоичной системы в восьмеричную нужно разбить двоичное число на триады слева и справа от запятой и каждую триаду заменить соответствующей восьмеричной цифрой. Аналогично, чтобы перевести число из шестнадцатеричной системы в двоичную надо заменить каждую шестнадцатеричную цифру на четырехзначное число в двоичной системе счисления. Чтобы перевести число из двоичной системы в шестнадцатеричную нужно разбить двоичное число на группы по четыре символа справа и слева от запятой, затем заменить эти группы соответствующими шестнадцатеричными символами. Чтобы перевести число из восьмеричной в шестнадцатеричную или наоборот, нужно сначала перевести число в двоичную систему, а затем из двоичной в требуемую.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]