ДИНАМИЧЕСКАЯ ПАМЯТЬ

Лекция №9 Динамические структуры данных.

СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ

 

Работа с файлами производится посредством следующих стандартных процедур:

Assign(var F : file; name : string); - связывает имя файловой переменной F в программе с именем внешнего файла на диске name. Здесь name - выражение строкового типа вида

'диск:\имя_каталога\имя_подкоталога\...\имя_файла'

 

Если в параметре name имена диска и подкаталога не указаны, то выбирается текущий диск и текущий каталог. Если вместо name указать '' (без пробела), то файл F оказывается связанным со стандартным файлом ввода Input или со стандартным файлом вывода Output (в зависимости от того, как он будет открыт - для чтения или для записи). После выполнения процедуры Assign все действия над переменной F будут эквивалентны действиям над файлом, определяемым спецификацией name. Процедуру Assign необходимо использовать до начала работы с файлом (до его открытия процедурой reset или rewrite);

Reset(var F : file); - открывает файл F для чтения. При этом указатель файла устанавливается на первый элемент файла и Eof(F) = False.

Если файл пустой, то Eof(F) = True;

Rewrite(var F : file); - открывает новый файл F для записи. При этом уничтожается вся информация в F и Eof(F) = True;

Read(var F: file; var x1, x2, ..., xn); - считывает в переменную x1 один элемент файла F (или несколько элементов в переменные x1, x2, ..., xn), начиная чтение с элемента, на который указывает текущий указатель. Если F опущено, то подразумевается стандартный файл Input. Read выполним только в случае, если Eof(F) = false;

Write(var F : file; var x1, x2, ..., xn); -записывает одно (x1) или более (x1, x2, ..., xn) значений переменных в файл F, начиная с той позиции, на которую установлен указатель. Если F опущено, то подразумевается стандартный файл Output. Write выполним только в случае, если Eof(F) = True;

Close(var F : file) - закрывает файл F;

Seek(var F : file; n : longint); - позволяет осуществить прямой доступ к элементам файла F. Здесь n - целая положительная константа, соответствующая порядковому номеру элемента в файле. Процедура Seek не выполняет операцию чтения или записи элемента файла. Она лишь перемещает указатель файла к элементу с номером n. При этом первый элемент файла имеет номер n = 0, второй - n = 1 и т.д.;

Стандартные функции FilePos(var F : file): longint и FileSize(var F : file): longint позволяют определить соответственно текущее положение указателя (номер элемента) и размер (число элементов) файла F.

 


 

 

Все переменные, объявленные в программе, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Длина сегмента данных определяется архитектурой микропроцессоров 80x86 и составляет 65536 байт, что может вызвать известные затруднения при обработке больших массивов данных. С другой стороны, объем памяти ПК (обычно не менее 640 Кбайт) достаточен для успешного решения задач с большой размерностью данных. Выходом из положения может служить использование так называемой динамической памяти.

Динамическая память - это оперативная память ПК, предоставляемая программе при ее работе, за вычетом сегмента данных (64 Кбайт), стека (обычно 16 Кбайт) и собственно тела программы. Размер динамической памяти можно варьировать в широких пределах (см. прил.1). По умолчанию этот размер определяется всей доступней памятью ПК и, как правило, составляет не менее 200...300 Кбайт.

Динамическая память - это фактически единственная возможность обработки массивов данных большой размерности. Многие практические задачи трудно или невозможно решить без использования динамической памяти. Такая необходимость возникает, например, при разработке систем автоматизированного проектирования (САПР): размерность математических моделей, используемых в САПР, может значительно отличаться в разных проектах; статическое (т.е. на этапе разработки САПР) распределение памяти в этом случае, как правило, невозможно. Наконец, динамическая память широко используется для временного запоминания данных при работе с графическими и звуковыми средствами ПК.

Динамическое размещение данных означает использование динамической памяти непосредственно при работе программы. В отличие от этого статическое размещение осуществляется компилятором Турбо Паскаля в процессе компиляции программы. При динамическом размещении заранее не известны ни тип, ни количество размещаемых данных, к ним нельзя обращаться по именам, как к статическим переменным.