КРАТКИЕ СВЕДЕНИЯ ИЗ ТЕОРИИ

 

Под записью понимается структура данных, об"единяющая под одним именем данные различных типов. Записи состоят из фиксированного числа элементов, называемых полями. Поле - это переменная определенного типа. Различные поля могут иметь (в отличии от элементов массива) различный тип. Обращение к элементу записи выполняется с помощью составного (уточненного) имени. Первая часть составного имени - это имя записи, вторая часть - имя поля. Между именем записи и именем поля ставится точка: ZAP.IMP, где ZAP - имя записи, IMP - имя поля.

При решении многочисленных задач обработки больших об"емов информации, бухгалтерского учета, ведения различных картотек, справочников и баз данных используются файлы, которые позволяют запоминать, изменять, хранить и читать различную информацию на внешних носителях (магнитных дисках). Файл представляет собой структурированный тип данных, содержащий последовательность компонентов (чаще всего записей) одного типа и одной длины. Число элементов в файле (длина файла) не фиксировано. Это является основным отличием файла от массива. Файл, не содержащий ни одного элемента, называется пустым, его длина равна нулю.

Файл можно представить как магнитную ленту, у которой есть начало, а конец не фиксирован. Элементы файла записываются на эту ленту последовательно, друг за другом с помощью некоторого устройства (указателя файла). При чтении или записи этот указатель перемещается к следующему элементу и делает его доступным для обработки. В каждый момент доступен для записи (чтения) только этот элемент файла, на который установлен указатель.

При необходимости формирования или использования файла в разделе описаний программы должна быть описана файловая переменная. Описание файловой переменной имеет следующий вид:

 

type имя-типа=file of базовый-тип;

var имя-файловой-переменной : имя-типа;

или

var имя-файловой переменной : file of базовый-тип;

 

В качестве базового типа элементов файла можно использовать любой тип данных (как простой, так и сложный), за исключением типа file.

Так как, по определению, число элементов файла не задается, то в Turbo Pascal введена стандартная функция

Eof(var F:file):boolean;

Когда будет достигнут конец файла, Eof(F) примет значение True, в в противном случае - False.

 

ПРИМЕР 1: Создать файл для хранения записей вида:

Запрос выводится с новой строки для каждого поля. Например:

 

 

Телевизор

 

Название . . . . . . . . . РЕКОРД

Цена (тыс.) . . . . . . . 3000

Диагональ . . . . . . . . 59

Изображение (ц/ч) . . Ц

Производитель . . . . .

Завод . . . . . . . . Фотон

Город . . . . . . . . Москва

Директор . . . . . Иванов

 

После записи файла осуществить поиск в нем названий телевизоров стоиостью менее 2 млн.руб.

 

 

program zapis;

const maxn = 30;

type TV = record

Name : string[20];

Price : 1 .. 32000;

Diagonal : 1 .. 50;

Color : char;

Proizv : record

city : string[25];

factory : string[50];

director : string[30];

end;

end;

tele = file от TV;

var f : tele;

was : boolean;

z:TV;

begin

writeln ('Ввод записей');

writeln ('Признак окончания ввода - *');

assing (f,'f.dat');

rewrite(f);

writeln (' Телевизор ');

 

write (' Название . . . . . .');readln(z.name);

while z.name <> ' * ' do

begin

write (' Цена (тыс.). . . . . .');readln(z.Price);

write (' Диагональ . . . . . .');readln(z.Diagonal);

write (' Изображение (ц/ч). . .');readln(z.Color);

writeln (' Производитель. . . . . ');

with z.Proizv do

begin

write (' Завод . . . . . . .');readln(city);

write (' Город . . . . . . .');readln(factory);

write (' Директор. . . . . .');readln(director);

tnd;

write (f,z)

writeln (' Телевизор');

write ('Название .......'); readln (z.name)

end;

close (f);

writeln ('Файл сформирован');

reset (f);

was:=false; {признак того, что искомые телевизоры найдены)

writeln ('Названия телевизоров стоимостью менее 2 млн.руб.');

while not eof(f) do

begin

read (F,Z);

if z.price < 2000 then

begin

writeln (z.name);

was:=true

end

end;

if was=false then

writeln ('Не найдены');

close(f)

end.

Упражнения:

1. Дан файл f, компоненты которого являются целыми числами. Найти наибольший и наименьший из компонентов файла.

2. Дан файл f, компоненты которого являются целыми числами. Найти количество четных чисел и количество квадратов нечетных чисел среди компонентов файла.

3. Даны символьные файлы f1 и f2.Поменять местами содержимое файлов, не используя стандартных процедур.

4. Дан файл f, компоненты которого являются действительными числами. Найти сумму и произведение компонентов файла, а также значение последнего элемента.

5. Дан файл f, компоненты которого являются символами. Получить копию файла в файле g, не используя стандартных процедур.

6. Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа файла f, а в файл n-все нечетные.

7. Дан файл f, компоненты которого являются символами. Записать в файл g компоненты файла f в обратном порядке.

8. Дан файл f, компоненты которого являются целыми числами.. Переписать компоненты файла f в файл g, так чтобы в файле g сначала или отрицательные, затем положительные числа.

9. Даны символьные файлы f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компоненты, в которой файлы f и g отличаются между собой.

10. Дан символьный файл f. Найти самое длинное слово в файле.

11. Дан текстовый файл f. Получить самую длинную строку файла.

12. Дан текстовый файл f. Записать в перевернутом виде строки файла f в файл g.

13. Дан текстовый файл f и строка s. Получить все строки файла f, содержащие в качестве фрагмента строку s.

14. Дан текстовый файл f. Получить самую короткую строку файла.

15. Дан текстовый файл f. Проверить соответствие числа открывающих и закрывающих скобок.

16. Даны текстовые файлы f и g. Определить совпадают ли компоненты файлов.

17. Дан текстовый файл f. Определить сколько строк в файле начинаются с символа 'р'.

18. Дан текстовый файл f. Вывести на печать последнюю из строк длиною 45 символов.

19. Дан текстовый файл f. Исключить пробелы, стоящие в начале его строк. Результат поместить в файл f1.

20. Дан текстовый файл f. Записать в файл g строки, содержащие менее 50 символов.