- •Программирование в среде turbo pascal 7.0 Лабораторный практикум
- •Содержание
- •Лабораторная работа № 1
- •3.Задание
- •4.Методические указания по выполнению
- •5.Контрольные вопросы
- •6. Пример выполнения работы
- •1 Способ решения задачи:
- •2 Способ решения задачи
- •Лабораторная работа № 2
- •3.Задание
- •4.Методические указания по выполнению
- •5.Контрольные вопросы
- •Лабораторная работа № 3 Массивы, их виды. Использование массивов.
- •1.Цель работы:
- •2.Краткая теория:
- •3.Задание
- •4.Методические указания по выполнению
- •5.Контрольные вопросы
- •3.Задание
- •4.Методические указания по выполнению
- •5.Контрольные вопросы
- •3.Задание
- •4.Методические указания по выполнению
- •5.Контрольные вопросы
- •Лабораторная работа № 6 Использование файлов в Паскале
- •1.Цель работы:
- •2.Краткая теория:
- •1 Способ:
- •2 Способ:
- •3.Задание
- •4.Методические указания по выполнению
- •5. Контрольные вопросы
- •Требования к оформлению отчета
- •Используемая литература
Лабораторная работа № 6 Использование файлов в Паскале
1.Цель работы:
Использование файлов, данных типа файл, выполнение операции над файлами, создание и дополнение файлов записей, выборка информации из файла по критерию в программах на языке Паскаль.
2.Краткая теория:
Файловый тип ( тип файл или файл) – это структурированный тип данных, который состоит из бесконечного (заранее неизвестного) количества элементов одного и того же типа. Элементы файла называются компонентами. Файловые типы Паскаля необходимы для того, чтобы получить возможность программного доступа к дисковым файлам. Дисковые файлы – это наборы данных на внешнем носителе.
Классификация файловых типов представлена рис.12.
Рис 12. Классификация файловых типов
Способы объявления файловых типов.
Общий вид объявления файлового типа
TYPE <тип файл> = FILE [ OF <тип компонент>];
для текстовых файлов:
TYPE <тип файл> = TEXT;
для файлов записей:
TYPE <тип файл> = FILE OF <тип запись>;
для нетипизированных файлов:
TYPE <тип файл> = FILE;
Для того, чтобы использовать в программе файловые типы данных, необходимо объявить переменные файлового типа одним из следующих способов:
Способы объявления переменной файлового типа
1 Способ:
TYPE <тип файл> = FILE [ OF <тип компонент>];
VAR <программный файл> : <тип файл>;
2 Способ:
VAR <програм. файл> : FILE [ OF <тип компонент>];
Переменные файлового типа называют программными файлами. Файлы имеют начальную метку и конечную метку (рис.13).
С каждым программным файлом связан указатель файла или текущий указатель.
Указатель файла это специальная переменная, которая хранит адрес доступной в настоящий момент компоненты файла. После выполнения операции открытия файла указатель всегда указывает на начало первой компоненты файла. Значение указателя файла изменяется в результате выполнения операций чтения файла или записи информации в файл. Если выполнена одна операция чтения или записи, то указатель файла перемещается к началу следующей компоненты.
Рис.13.Файл и текущий указатель файла
Операции для работы с файлами
Каждый программный файл должен быть связан с соответствующим дисковым файлом. Такая связь организуется специальной операцией связывания:
ASSIGN(<програм. файл>, ‘полное имя файла на диске’);
2. Операции открытия программного файла необходима для начала работы с файлом и определения начального значения указателя файла. создаваемый и существующий файл открываются разными операциями:
для создаваемого файла:
REWRITE (<программный файл>);
для существующего файла:
RESET (<программный файл>);
3. Операции обмена информацией между операционной памятью и программными файлами:
ввод информации из файла в ОП:
READ(<программный файл>, <переменная>);
вывод информации:
WRITE(<программный файл>,<переменная>);
Операции обмена информацией с файлом организуют так называемый последовательный доступ к компонентам файла. Этот принцип аналогичен поиску информации на магнитной ленте магнитофона.
4. Прямой доступ к компоненте файла, позволяет установить указатель файла непосредственно на начало нужной компоненты. В Паскале прямой доступ возможен только по номеру компоненты. В этом случае нужно помнить о том что номер компоненты не всегда известен программисту и пользователю.
SEEK(<программный файл>, № компоненты);
5. Закрытие файла :
CLOSE(<программный файл>);
Если файл не закрыт и по какой-то причине программа завершилась аварийно, то все изменения внесенные в файл будут утеряны. Поэтому рекомендуется закрывать файл по завершении работы с ним.
6. Некоторые дополнительные операции над файлами могут очень полезны:
- определяет закончился ли файл:
EOF(<программный файл>)
- определяет размер файла в компонентах:
FILESIZE(<программный файл>)
определяет номер текущей компоненты:
FILE POS(<программный файл>)
Последовательность работы с файлами записей:
При использовании файлов записей – файлов компонентами, которых являются записи (данные комбинированного типа) нужно придерживаться следующей последовательности написания программы:
Объявить тип запись.
Объявить программный файл, компоненты которого имеют тип запись.
Объявить переменную, того же типа что и компонента файла, для обмена информацией между ОП и программными файлами.
Открыть файл существующий или создаваемый.
Для обмена информации использовать операторы ввода или вывода.
Выполнить закрытие файла.
Особенности работы с текстовыми файлами
Текстовые файлы – это файлы компонентами которых являются символьные строки. Среди текстовых файлов следует выделить стандартные текстовые файлы. Существуют особенности обработки текстовых файлов:
Стандартные текстовые файлы:
INPUT – стандартный файл ввода;
OUTPUT – стандартный файл вывода.
2. Стандартные файлы можно связать с дисковым файлом:
ASSIGN(OUTPUT, ‘дисковый файл‘);
3. Открытие текстового файла:
- для чтения : RESET(<программный файл>);
- для создания : REWRITE(<программный файл>);
для дополнения : APPEND(<программный файл>);
4. Обмен информацией с текстовым файлом:
- чтение : READLN (<программный файл>, переменная);
- запись : WRITEL] (<программный файл>, переменная);
где <переменная> должна быть объявлена как строка символов.
Работа с файлами без типа
- чтение блока данных:
BLOCKREAD(<программный файл>, переменная, n[, m]);
- запись блока данных:
BLOCKWRITE(<программный файл>, переменная n[, m]);
где переменная - переменная любого типа
n - размер блока,
m – необязательный параметр, определяющий размер блока в записях.
При чтении блока данных формируется значение m .
Пример 1: Разработать программу для создания файла записей, если структура файла должна быть следующей:
табельный номер
должность
зарплата
месяц
Type tip_f=record
tn: byte;
dol: string[30];
zar: real;
mes: byte;
end;
Var z: tip_f;
Otv:char;
F:file of tip_z;
Begin
Assign(f, ‘a:\dat.dat’);
Rewrite(f);
Repeat
With z do
Begin
Write(‘введите табельный номер’);Readln(tn);
Write(‘должность’); readln(dol);
Write(‘зарплата’); readln(zar);
Write(‘месяц’); readln(mes);
End;
Write(f,z);
Writeln(‘продолжить ввод данных (д/н)’); readln(otv);
Until otv=’н’;
Close(f);
End.
Пример 2: Разработать программу для дополнения файла записями, если структура файла та же, что и в примере 1.
Type tip_f=record
tn: byte;
dol: string[30];
zar: real;
mes: byte;
end;
Var z: tip_f;
Otv:char;
F:file of tip_z;
Begin
Assign(f, ‘a:\dat.dat’);
Reset(f);
Seek(f, filesize(f));
Repeat
With z do
Begin
Write(‘введите табельный номер’);Readln(tn);
Write(‘должность’); readln(dol);
Write(‘зарплата’); readln(zar);
Write(‘месяц’); readln(mes);
End;
Write(f,z);
Writeln(‘продолжить ввод данных (д/н)’); readln(otv);
Until otv=’н’;
Close(f);
End.
Пример 3: Разработать программу для выборки информации из файла записями по табельному номеру, если структура файла та же, что и в примере 1.
Type tip_f=record
tn: byte;
dol: string[15];
zar: real;
mes: byte;
end;
Var z: tip_f;
Otv:char;
tn1:byte;
F:file of tip_z;
I, N:byte;
Begin
Assign(f, ‘a:\dat.dat’);
Reset(f);
Writeln(‘введите образец табельного номера’);
Readln(tn1);
Writeln(‘ВЕДОМОСТЬ’);
Writeln(‘начисления заработной платы по табельному номеру - ’, tn1);
Writeln(‘--------------------------------------------------’);
Writeln(‘I п/п I должность I месяц I зарплата I’ );
Writeln(‘--------------------------------------------------’);
N:=0;
For i:=1 to filesize(f) do
Begin
Read(f,z);
If z.tn=tn1 then
Begin
N:=N+1;
With z do Writeln (‘I’, n:4, ’I’, dol:15, ‘I’, mes:5, ’I’,
zar:10:2, ‘I’);
End;
End;
Close(f);
End.