Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
paskal_metod_lab_rab.docx
Скачиваний:
35
Добавлен:
17.02.2016
Размер:
832.19 Кб
Скачать

Вопросы к защите лабораторной работы

1. Как в информатике понимается слово «запись»?

2. Как обратиться в программе к полю записи?

3. Что необходимо сделать, чтобы описать в программе объект, ха­рактеристики которого — разнотипные данные?

4. Что необходимо сделать, чтобы описать в программе объект, ха­рактеристики которого — однотипные данные?

5. Объясните, что означают имена: х[ 2 ].position, x[ 5 ].date.month, w.name.

6. Для чего используется оператор with?

Лабораторная работа №13 файлы. Работа с файлами в паскале

Цель работы: научиться читать данные из файла, выводить данные в файл, приобрести навыки работы со стандартными процедурами и функциями для всех файлов.

Краткие теоретические сведения.

С понятием файла пользователь компьютера сталкивается постоянно. Язык программирования Паскаль позволяет работать с компонентами файла — записями, с полями записей.

Файл в Паскале состоит из однотипных данных. С данны­ми файла можно производить две операции: запись или чте­ние. В Паскале осуществляется обработка последовательных файлов, в которых данные записываются или считываются одно за другим. Запись можно прочесть, минуя предыдущие, если известен ее порядковый номер в файле. Чтобы выпол­нять действия с данными файла, файл надо открыть для соот­ветствующей операции.

Этапы, которые необходимы для каждой опе­рации при работе с файлом:

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

1. Описание файла. Описание файла может быть в разделе типов или в разделе переменных. Пусть файл f состоит из це­лых чисел. Его описание имеет вид: var f: file of integer; a: integer;

где a компонента файла данного того же типа, что и записи файла. Тип данных файла указывается после слова of в описа­нии, это может быть числовой или символьный тип, массив или запись. Сложный тип записи файла необходимо предва­рительно описать в разделе type.

2. Установление соответствия между логическим и физиче­ским именами файла. Логическое имя — имя переменной из раздела var, под которым файл присутствует в программе. Физическое имя — имя из каталога оглавления диска. Оператор установления соответствия между именами файлов:

assign (логическое имя файла, физическое имя); например:

assign (f, ‘F.DAT’);

Физическое имя заключено в апострофы, оно появится в том же оглавлении, где находится файл turbo.exe.

3. Открытие файла для операции запись это действие вы­полняется оператором: rewrite (f);

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

При занесении в файл данные будут размещаться между именем и признаком конца файла, причем каждое новое дан­ное окажется перед признаком конца файла. Файл может содержать произвольное количество данных. Ограничение размера файла никак в программе не оговарива­ется. В оперативной памяти достаточно одной области, совпа­дающей по формату с записями файла, а на диске определяет­ся размер файла свободным пространством на момент его со­здания. Запись данных в файл производит оператор: write (f, a);

Пример. Пусть требуется создать файл из 10 целых чисел.

Программа име­ет вид:

program Р38;

var f: file of integer; a, i: integer;

begin

assign (f, ‘F.DAT’);

rewrite (f);

writeln (‘введите 10 целых чисел, после каждого нажимайте <Enter> ‘);

for i: = 1 to 10 do

begin

readln(a);

write (f, a)

end

end.

Если создать файл и никаких больше действий не произво­дить, то возможности просмотреть данные файлы вне про­граммы, практически нет. Поэтому большинство задач обра­ботки файлов начинаются словами: «Дан файл». Очевидно, как и для других задач с подобным началом, файл необходимо сначала создать, т. е. выполнить описанные четыре этапа. Чтобы работать с данными файла, их надо прежде всего про­честь, открыть файл для чтения.

Операция чтения. Для чтения данных из файла его следует описать, установить соответствие между логическим и физи­ческим именем, а затем открыть для чтения и считывать дан­ные. Первые два шага — описание и установление соответст­вия имен — такие же, как и для операции записи. Если с фай­лом совершаются различные операции, то перед выполнением следующей его надо закрыть оператором: close (f);

Открытие файла для чтения производится оператором: reset (f);

Читать данные из файла позволяет оператор: read (f, a);

После создания файла и нескольких преобразований может быть неизвестно количество его записей. Поэтому при чтении данных из файла удобно использовать специальную функцию, контролирующую признак конца файла. Эта функция прини­мает значение истина, если встречен признак конца файла, и ложь, если прочитана другая запись. При открытии файла для чтения уже считывается первая его запись, содержащая имя файла, поэтому можно поставить контроль признака кон­ца файла, даже не считав ни одной записи оператором read (f,a);

Функция обработка признака конца файла:

eof (f)

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

while not eof (f) do

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

Пример. Дан файл целых чисел. Посчитать количество положительных, отрицательных и нулевых элементов файла.

program Р39;

const k= 15;

var f: file of integer; a, i, n, p, z: integer;

begin

assign (f, ‘F.DAT’);

rewrite (f); {создание файла}

writeln (‘введите’, k, ‘целых чисел, после каждого нажимайте <Enter>‘);

for i: = 1 to k do

begin

readln(a);

write (f, a)

end;

close (f); {закрытие файла для операции записи}

{решение задачи — подсчет различных элементов}

n: = 0; p: = 0; z: = 0; {n-отрицательные, р-положи­тельные, z -нули}

reset (f);

while not eof (f) do

begin

read (f, a);

if a = 0 then z: = z + 1;

if a < 0 then n: = n + 1;

if a > 0 then p: = p + 1

end;

write (‘ n = ‘, n, ‘ z = ‘, z, ‘ p = ‘, p)

end.

Пример. Пусть требуется расширить данный файл, добавив в него новые данные. Как известно, файл с данными нельзя открывать для за­писи, поэтому для решения подобных задач необходимо исполь­зовать вспомогательный файл.

Решение задачи расширения файла складывается из сле­дующих этапов:

1) открыть данный файл f для чтения, а вспомогательный gдля записи;

2) читать данное из исходного файла f и записывать его тут же в файл g;

3) после окончания переписывания данных закрыть файл f;

4) вводить новые данные с клавиатуры и записывать их в файл g, добавляя к уже имеющимся там данным файла f;

5) закрыть файл g;

6) открыть файл f для записи, а файл g — для чтения;

7) читать данные из файла g и записывать их в файл f.

Таким образом, в файле f к старым данным добавятся но­вые. Если необходимо вставить новые данные в середину файла, то надо во втором пункте решения контролировать считываемые данные и, дойдя до места вставки, приостано­вить чтение, записать требуемые данные в файл g, а затем до­писать туда оставшиеся из исходного файла (пункты 3 и 4), далее выполнить пункты 5, 6, 7.

program Р40;

var f, g: file of integer; a: integer;

begin

assign (f, ‘F.DAT’);

assign (g, ‘G.DAT’); .

{перезапись данных из исходного файла во вспомогатель­ный}

reset (f); rewrite (g);

while not eof (f) do

begin

read (f, a);

write (g, a);

end;

close (f); {добавление данных во вспомогательный файл}

readln(a);

while а <> 0 do {признак окончания ввода новых данных - нуль}

begin

write (g, a);

readln (a)

end;

close (g);

reset (g); rewrite (f); {перезапись данных назад в исходный файл}

while not eof (g) do

begin

read (g, a);

write (f, a);

end

end.

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