Краткие сведения из теории

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: