- •Министерство образования рк
- •Программирование на языке pascal
- •Алматы 2004 содержание
- •Введение
- •Немного о работе в системе турбо паскаль
- •Лабораторная работа №1 переменная. Числа. Инструкция присваивания
- •Краткие теоретические сведения
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №2 структура программы в паскале. Ввод и вывод данных. Линейные программы
- •Краткие теоретические сведения
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №3 условный оператор в программах на паскале
- •Краткие теоретические сведения
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №4 организация циклов
- •Краткие теоретические сведения
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №5 массивы
- •Краткие теоретические сведения.
- •2. Нахождение наибольшего элемента массива.
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №6. Обработка таблиц. (двумерных массивов)
- •Краткие теоретические сведения
- •Методические указания по работе и задания
- •Лабораторная работа №7 оператор варианта. (выбора)
- •Краткие теоретические сведения
- •3: Begin
- •4: Begin
- •Методические указания по работе и задания
- •Лабораторная работа №8 подпрограммы
- •Краткие теоретические сведения
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №9 рекурсия
- •Краткие теоретические сведения.
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •7 10
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №11 компьютерная графика
- •Краткие теоретические сведения.
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа № 12 записи. Обработка записей
- •Краткие теоретические сведения.
- •Var X: z;
- •Var X: array [ 1.. 100 ] of tovar; y: tovar;
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Лабораторная работа №13 файлы. Работа с файлами в паскале
- •Краткие теоретические сведения.
- •Методические указания по работе и задания
- •Вопросы к защите лабораторной работы
- •Литература
Вопросы к защите лабораторной работы
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.