Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование на паскале2.doc
Скачиваний:
144
Добавлен:
31.03.2015
Размер:
935.94 Кб
Скачать

3.3.5. Нетипизированные файлы

Описание нетипизированного файла:

VAR ИмяФайла:FILE;

Содержимое нетипизированного файла рассматривается системой программирования как последовательность байтов. Нетипизированный файл может содержать данные в любом представлении (внешнем, внутреннем). Ответственность за правильное использование данных несет программист. Нетипизированные файлы дают возможность организовать высокоскоростной обмен информацией.

Процедуры открытия нетипизированного файла:

RESET(ИмяФайла,РазмерЗаписиВбайтах) – для чтения,

REWRITE(ИмяФайла,РазмерЗаписиВбайтах) – для записи.

Запись – это минимальное количество передаваемых за одно обращение к устройству байтов. Размер записи по правилу умолчания равен 128. За одно обращение к устройству передается блок из N записей. Высокоскоростная передача данных получается, когдаразмер блока равен кластеру. Кластер – количество байтов, считываемых за один поворот диска. Типичный размер кластера – 512 или 1024.

Процедуры чтения и записи для нетипизированного файла:

BLOCKREAD(ИмяФайла,Буфер, N, NN)

BLOCKWRITE(ИмяФайла,Буфер, N, NN),

где буфер- переменная для считывания (записи) информации,NN - число считанных записей (NN<=N, строгое неравенство возможно для последнего блока).

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

Procedure Kopir(infile,outfile:string);

Var f1,f2:file; Buf:array[1..Klaster] of Byte; i:word;

{Klaster - глобальная константа, размер кластера}

Begin assign(f1,infile); assign(f2,outfile); reset(f1,1); rewrite(f2,1);

repeat

BlockRead(f1,Buffer, Klaster,i);

BlockWrite(f2,Buffer, Klaster,i)

until eof(f1);

close(f1); close(f2);

End.

Часть IV. Работа с динамическими массивами

    1. О статическом и динамическом распределении памяти

Статическое распределение памятипроисходит на этапе компиляции программы; это распределение не изменяется в процессе выполнения программы. Динамическое распределение памяти - это выделение и освобождение памяти в процессе выполнения программы. Данные, размещаемые в памяти компилятором, называютсястатическими, а распределяемые в ходе выполнения программы -динамическими.

Распределение памяти под глобальные данные(объявленные в разделах программы – см. §2.4) являетсястатическим. При распределениилокальных данныхподпрограмм имеет местоэлемент динамизма, так как оно происходит на этапе выполнения программы при вызове подпрограммы. Заметим, что распределение локальных данных не изменяется в процессе выполнения подпрограммы, а при завершении подпрограммы память освобождается.

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

Указатель определяется как абстрактное обобщение адреса (а не как переменную, принимающую значения на множестве адресов), потому что значение адреса зависит от конкретной ЭВМ и условий, в которых происходит работа компилятора. Тип указатель имеется во всех универсальных языках программирования.

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

  1. когда статической памяти и стека подпрограмм не хватает для решения задачи;

  2. когда характер задачи требует динамического распределения.

Пример второй ситуации рассматривается в §4.3.