Лабораторная работа № 13. Обработка информации из файлов прямого доступа.
При выполнении работы необходимо знать:
Что такое файл
Файловые типы и файловые переменные
Виды файлов: текстовые, типизированные, нетипизированные
Операции над типизированными файлами
Теоретический минимум:
Типизированные файлы содержат информацию определенного типа. Компонентами файла являются элементы одного типа, кроме типа файл. Типизированные файлы можно заполнить данными только из программы (не в редакторе).
Типизированные файлы являются файлами прямого доступа, то есть мы можем обратиться к любой компоненте файла с номером N (указатель текущей позиции файла настраивается на заданную компоненту).
Команды для всех видов файлов.
Объявление файловых переменных.
Var
F1=file of integer; {объявление типизированного файла}
F2=file; {объявление нетипизированного файла }
Для того, чтобы конкретный файл стал доступным, его необходимо связать (ассоциировать) с конкретной файловой переменной. Такое связывание осуществляется с помощью процедуры Assign ( f, ’имя файла на диске’ );
Var
f1: file of real;
Begin
…
Assign (f1, ‘c:\users\info.dat’ );
…
Здесь файловая переменная f1 ассоциируется с типизированным файлом info.dat (с компонентами типа real ) , содержащемся на диске C: в каталоге C:\users.
После связывания некоторого реального файла с файловой переменной, для того чтобы получить доступ к содержимому файла, его нужно открыть. Открыть файл можно для чтения, для записи, или для чтения и записи одновременно. Для открытия файлов любого вида предназначены процедуры:
Reset(f); - открытие существующего файла для чтения (указатель текущей позиции файла настраивается на начало файла).
Rewrite(f); - открытие существующего файла для записи (указатель файла настраивается на начало файла со стиранием информации) или создание нового файла для записи.
После открытия файла осуществляется некоторая обработка его содержимого: считывание информации из файла (для каждого вида файла имеет свои особенности), запись информации в файл, добавление информации в конец файла, удаление части файла и т.п. После обработки файл закрывается, а иногда удаляется (если он вспомогательный).
Close(f); - закрытие файла, ассоциированного с файловой переменной f.
Close; - закрытие всех файлов, открывавшихся в программе.
Erase(f); - удаление файла.
Команды для типизированных файлов.
Чтение из типизированного файла осуществляется по одной компоненте в переменную или переменные, которые должны совпадать по типу с типом компонент файла.
Read(f, x); - чтение из типизированного файла одной компоненты в переменную x.
Read(f, x1, x2,x3, ... xn); - чтение из файла нескольких компонент в переменные.
Write(f, x); - запись в файл значения x. Запись начинается с того места, где был
установлен указатель файла.
Seek(f, n); - для типизированных файлов (прямого доступа) устанавливает
указатель файла на компоненту с номером n.
Eof(f) - функция, определяющая признак конца файла. Принимает значение True,
если указатель текущей позиции файла находится за последним элементом
файла либо файл пустой
Eoln – функция, определяет признак конца строки при считывании строк из
текстовых файлов
Truncate(f); - удаление части файла, начиная с места, где установлен указатель файла.
FilePos(f); - функция, определяет позицию указателя файла.
FileSize(f); - функция, определяет размер файла (число компонент).
Задача 13.1.
Определить сумму нечетных по значениям компонент типизированного файла, и записать полученную сумму вместо максимального значения в файле.
Текст программы к задаче 13.1.
Program Ex_12_1;
Uses Crt;
Label A;
Var f2: file of integer;
x: integer; {компонента}
i: integer; {счетчик цикла}
S: integer; {сумма}
Max: integer; {максимум}
k: integer; {номер максимума}
Begin
ClrScr;
Randomize;
Assign(f2, ‘g:\f2.dat’);
{Запись чисел в файл}
Rewrite(f2);
Writeln(‘Исходный файл:’);
Writeln;
For i:=0 to 15 do begin
x:=random(100)-50;
Write(f2, x);
Write(x:3);
End;
{Подсчет суммы нечетных компонент}
Reset(f2);
For i:=0 to 15 do begin
Read(f2, x);
If x mod 2<>0 then
S:=S+x;
End;
{Примем первую компоненту за Max}
Reset(f2);
Read(f2, x);
Max:=x;
{Поиск Max в файле}
For i:=1 to 15 do begin
Read(f2, x);
If x>Max then begin
Max:=x;
k:=i
End;
{Запись суммы вместо Max в файле}
Seek(f2, k);
Write(f2, S);
{Вывод результатов}
Writeln(‘Измененный файл:’);
Writeln;
Reset(f2);
While not Eof(f2) do begin
Read(f2, x);
Write(x:3);
End;
Close(f2);
Readln;
End.
Задача 13.2.
Найти первое отрицательное и последнее отрицательное значения среди компонент типизированного файла, и поменять местами эти компоненты в файле. Найти произведение компонент файла, стоящих между первым отрицательным и последним отрицательным значением.
Текст программы к задаче 13.2.
Program Ex_12_2;
Uses Crt;
Label A;
Var
f1: file of integer;
x: integer; {компонента}
Otr1, Otr2: integer; {отрицательные}
k1, k2: integer; {номера отриц.}
i: integer; {счетчик цикла}
Begin
ClrScr;
Randomize;
Assign(f1, ‘g:\f1.dat’);
{Запись чисел в файл}
Rewrite(f1);
Writeln(‘Исходный файл:’);
Writeln;
For i:=0 to 15 do begin
x:=random(100)-50;
Write(f1, x);
Write(x:3);
End;
{Поиск первого отрицательного}
Reset(f1);
For i:=0 to 15 do begin
Read(f1, x);
If x<0 then begin
Otr1:=x;
k1:=i;
Goto A;
{Как только нашли, выходим из цикла}
End;
End;
{Поиск последнего отрицательного}
A: Reset(f1);
For i:=0 to 15 do begin
Read(f1, x);
If x<0 then begin
Otr2:=x;
k2:=i;
End;
End;
{Обмен в файле значений местами }
Seek(f1, k1);
Write(f1, Otr2);
Seek(f1, k2);
Write(f1, Otr1);
{Подсчет суммы ком. между k1 и k2}
i:=k1+1;
Repeat
Seek(f1, i);
Read(f1,x);
S:=S+x;
i:=i+1;
Until i<k2;
{Вывод результатов}
Writeln(‘Измененный файл:’);
Writeln;
Reset(f1);
While not Eof(f1) do begin
Read(f1, x);
Write(x:3);
End;
Close(f1);
Readln;
End.
С хема программы к задаче 13.2
- 230401 «Информационные системы»
- 230115 «Программирование в компьютерных системах»
- Лабораторная работа №1. Организация ввода-вывода информации
- Алфавит языка Turbo Pascal.
- Переменные и константы.
- Основные типы переменных.
- Структура программы.
- Оператор присваивания, операторы ввода с клавиатуры и вывода на экран.
- Процедуры управления выводом на экран.
- Компиляция и выполнение программы.
- Лабораторная работа №2. Арифметические выражения. Программирование алгоритмов линейной структуры.
- Арифметические выражения в языке Turbo Pascal.
- Стандартные арифметические функции.
- Генератор случайных чисел.
- Составление алгоритма и программы для решения задачи.
- Лабораторная работа № 3. Программирование алгоритмов разветвленной структуры. Оператор ветвления if … then … else
- Условный оператор if … then … else.
- Составной оператор.
- Лабораторная работа № 4. Программирование алгоритмов разветвленной структуры. Оператор ветвления case.
- Условный оператор Case.
- Лабораторная работа № 5. Программирование алгоритмов циклической структуры с известным числом повторений.
- Оператор циклаWhile.
- Оператор цикла repeat.
- Вложенные циклы
- Оператор перехода
- Лабораторная работа № 6. Обработка строк с использованием операторов цикла.
- Лабораторная работа № 7. Программирование алгоритмов циклической структуры с неизвестным числом повторений.
- Лабораторная работа № 8. Обработка одномерных числовых массивов.
- Лабораторная работа № 9. Обработка двумерных числовых массивов.
- Лабораторная работа № 10. Использование процедур и функций при обработке массивов.
- Лабораторная работа № 11. Тип запись. Массивы записей.
- Лабораторная работа № 12. Обработка информации из файлов последовательного доступа.
- Лабораторная работа № 13. Обработка информации из файлов прямого доступа.
- Лабораторная работа № 14. Модуль программиста. Многомодульный проект.
- Текст модуля программиста к задаче 14.