Методическое пособие для учащихся 9-11 классов средних общеобразовательных школ программирование на языке pascal
Вид материала | Методическое пособие |
- Методическое пособие и контрольные задания для учащихся общеобразовательных школ учебно-тренировочные, 1398.7kb.
- Учебно-методическое пособие для учителей общеобразовательных школ Издательство, 2357.68kb.
- Областная юниорская олимпиада по физике среди учащихся 7-8 классов, 24.46kb.
- Учебное пособие для учащихся 10 (11) классов «Экология Москвы и устойчивое развитие», 879.38kb.
- Конкурс проводится с целью стимулирования интереса школьников к изучению истории родного, 50.93kb.
- Методическое пособие для проведения занятий по правилам пожарной безопасности с учащимися, 235.71kb.
- Методическое пособие для учителей, психологов, воспитателей общеобразовательных учреждений, 2321.32kb.
- Учебное пособие для преподавателей общеобразовательных школ, 98.81kb.
- Программирование на языке высокого уровня, 59.92kb.
- Программа учебного курса «экология москвы и устойчивое развитие» для 10 классов средних, 707.86kb.
ФАЙЛЫ. РАБОТА С ФАЙЛАМИ В ПАСКАЛЕ
Цель работы: научиться читать данные из файла, выводить данные в файл, приобрести навыки работы со стандартными процедурами и функциями для всех файлов.
Краткие теоретические сведения.
С понятием файла пользователь компьютера сталкивается постоянно. Язык программирования Паскаль позволяет работать с компонентами файла — записями, с полями записей.
Файл в Паскале состоит из однотипных данных. С данными файла можно производить две операции: запись или чтение. В Паскале осуществляется обработка последовательных файлов, в которых данные записываются или считываются одно за другим. Запись можно прочесть, минуя предыдущие, если известен ее порядковый номер в файле. Чтобы выполнять действия с данными файла, файл надо открыть для соответствующей операции.
Этапы, которые необходимы для каждой операции при работе с файлом:
Операция записи. Запись в файл означает помещение в него новых данных. Файл размещается на носителе, как правило, на магнитном диске. Данное для занесения в файл формируется в оперативной памяти как значение некоторой переменной. Операцией записи в файл это данное копируется из оперативной памяти во внешнюю. Форма представления данного, его тип и структура должны быть одинаковы и для записей файла, и для переменной, из которой это данное копируется.
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. Какой файл, созданный программой, можно просмотреть при помощи текстового редактора?
ЛИТЕРАТУРА
- Е. А. Зуев. Turbo Pasсal. Практическое программирование. – М.: «ПРИОР», 1997.336с.
- Емелина Е.И. Основы программирования на языке Паскаль.- М.: Финансы и статистика, 1997.-208с.: ил.
- Н. Культин. Turbo Pasсal 7.0. –СПб.: БХВ – Санкт-Петербург,1998.336с., ил.
- Гусева А.И. Учимся программировать Pasсal 7.0. Задачи и методы их решения. – М.: «Диалог-МИФИ», 1998. 272с.
- Рудаков П.И., Федотов М.А. Основы языка Pascal.-М.: Радио и связь, Горячая линия.- Телеком,1999,-208с.:ил.
- Информатика Задачник – практикум в 2т. / Под ред. И.Г. Семакина, Е.К. Хеннера: - М.: Лаборатория базовых знаний,2000г. –304с.:ил.