Методическое пособие для учащихся 9-11 классов средних общеобразовательных школ программирование на языке pascal

Вид материалаМетодическое пособие

Содержание


Файлы. работа с файлами в паскале
Краткие теоретические сведения.
Операция записи.
1. Описание файла.
2. Установление соответствия между логическим и физиче­ским именами файла.
3. Открытие файла для операции запись
Пример. Пусть требуется создать файл из 10 целых чисел. Программа име­ет вид: program
Операция чтения.
Вопросы к защите лабораторной работы
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   14

ФАЙЛЫ. РАБОТА С ФАЙЛАМИ В ПАСКАЛЕ



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


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

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

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

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

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

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 целых чисел, после каждого нажимайте ‘);

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, ‘целых чисел, после каждого нажимайте ‘);

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.


Методические указания по работе и задания



Условие задачи

1

Вывести на экран содержимое файла a:\ num.txt.

2

Дан файл, элементами которого являются целые числа. Вычислить среднее арифметическое чисел, находящихся в файле.

3

Требуется создать файл целых чисел, в котором значение каждой i-й компоненты равно i2 и квадраты всех чисел не превосходят n.

4

Имеется два отсортированных файла целых чисел. Осуществить слияние файлов в отсортированный третий файл.

5

Для целочисленного файла найдите наибольший элемент данных.

6

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

7

Написать программу, копирующую файл.

8

Составить программу подсчета количества элементов файла вещественных чисел, меньших среднего арифметического всех элементов этого файла.

9

Написать программу, меняющую местами первый и последний элементы файла.

10

Вывести текстовый файл на экран и подсчитать количество строк в данном текстовом файле.

11

Создать файл вещественных чисел и вычислите сумму компонент этого файла.

12

Считать файл, удвоив каждый его элемент через пробел.

13

Прочитать текстовый файл и найти сумму цифр, встречающихся в нем.

14

Для файла целых чисел перепишите положительные в один до­полнительный файл, а отрицательные — в другой.

15

Прочитать текстовый файл и вывести его задом наперед.


ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ

1. Какие операции можно производить с данными файла?

2. Почему второй параметр а операторов write (f, а) и read (f, a)

должен быть такого же типа, что и данные файла?

3. Что такое физическое имя файла, чем оно отличается от логиче­ского имени?

4. Как открыть файл для записи?

5. Что будет, если ранее созданный файл с данными открыть для записи?

6. Чем ограничено количество данных в файле?

7. Чем отличается файл от массива?

8. Как прочесть данные из файла, не зная количества этих данных?

9. Как добавить данные в имеющийся файл?

10. Какой файл, созданный программой, можно просмотреть при помощи текстового редактора?

ЛИТЕРАТУРА




  1. Е. А. Зуев. Turbo Pasсal. Практическое программирование. – М.: «ПРИОР», 1997.336с.
  2. Емелина Е.И. Основы программирования на языке Паскаль.- М.: Финансы и статистика, 1997.-208с.: ил.
  3. Н. Культин. Turbo Pasсal 7.0. –СПб.: БХВ – Санкт-Петербург,1998.336с., ил.
  4. Гусева А.И. Учимся программировать Pasсal 7.0. Задачи и методы их решения. – М.: «Диалог-МИФИ», 1998. 272с.
  5. Рудаков П.И., Федотов М.А. Основы языка Pascal.-М.: Радио и связь, Горячая линия.- Телеком,1999,-208с.:ил.
  6. Информатика Задачник – практикум в 2т. / Под ред. И.Г. Семакина, Е.К. Хеннера: - М.: Лаборатория базовых знаний,2000г. –304с.:ил.