Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПР.работы Бронштейн.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
437.76 Кб
Скачать

Контрольные вопросы:

  1. Почему запись называют комбинированным типом данных?

  2. Как определяется тип записи? Что называется полем записи?

  3. Чем определяется объем памяти, требуемый для размещения записи?

  4. Что такое составное имя поля записи? Из каких частей оно состоит и как записывается.

  5. Зачем применяются записи с вариантами? Из каких частей состоит запись с вариантами?

Список литературы:

1. В.Б. Попов «Турбо Паскаль», М. «Финансы и статистика», 2002

2. В.В. Фаронов «Турбо Паскаль 7.0» М. «ОМД Групп», 2003

Практическая работа № 11

Тема: Файловый тип.

1. Цель работы: ознакомиться с файловым типом.

2. Краткие теоретические сведения:

Файлом называется совокупность данных, записанная во внешней памяти под определенным именем. Имя файла – это любое выражение строкового типа, содержит до 8 разрешенных символов (латинские буквы, цифры и символы: ! @ # % ^ & ( ) ' ~ - _ ), за именем может быть разрешение – последовательность до 3-х разрешенных символов, отделяется от имени точкой.

В

ТИП

большинстве случаев файлы состоят из текстовых строк, или записей. Для описания файла используется сочетание file of:

Для доступа к файлу описывается специальная файловая переменная и обозначается как F, если файл состоит из записей, то описывается ещё переменная для доступа к полям записи R.

type

<имя типа> = <тип компонентов>;

var

<F>: file of <имя типа>;

<R>: <имя типа>;

Каждому файлу в языке ставится в соответствии файловая переменная определенного типа, поэтому для работы с файлом надо установить данное соответствие. Для этого используется процедура Assign (var F; Name: string); F – переменная любого типа.

Способы открытия файла:

Reset( var F: file); - открывает существующий файл;

Rewrite( var F: file); - создает и открывает новый файл.

Для нетипизированных файлов добавляется параметр RecSize типа Word, который устанавливает длину записи для функций обмена с файлом:

Reset( var F: file; RecSize: word);

Закрытие файла: Close (var F);

Переименование неоткрытого файла: Rename (var F; NewName: string);

Удаление неоткрытого файла: Erase (var F);

Типы файлов:

Текстовый файл – последовательность символов, разбитую на строки длиной от 0 до 256 символов. Описание: var

F: text; {F – файловая переменная}

Процедуры:

Append( var F: text); открывает уже существующий файл и ставит указатель на конец файла;

Readln – то же, что и Read, и дополнительно – чтение маркера конца строки и переход к новой строке; Readln(var F: text; V1 [,V2,…Vn]; V1…Vn – переменные разных типов.

Writeln – запись всех величин с установкой маркера конца строки в файл;

Writeln(var F: text; V1 [,V2,…Vn]; V1…Vn – переменные разных типов.

Функции:

Eoln(var F: text) возвращает булевское значение True, если текущая файловая позиция находится на маркере конца строки или вызов Eof(F) возвратил значение Truе. Во всех других случаях значение функции будет False.

Eof(var F:text) возвращает булевское значение True, если указатель конца файла находится сразу за последним компонентом, и False – в противном случае.

Типизированные файлы – файлы строго определенного типа. Применяются для создания баз данных.

type

FileRec=record

end;

var

F: file of FileRec

Нетипизированные файлы – эти файлы не имеют определенного типа (UntypedFile: File;)

Для таких файлов самым важным параметром служит длина записи в байтах. Открытие нетипизированного файла с длиной записи в 1 байт можно выполнить следующим образом: Rewrite(UntypedFile, 1); или Reset(UntypedFile, 1);

Для более быстрого ввода-вывода: BlockRead(var F: file ; var Buf ; Count : word

BlockWrite(var F: file ; var Buf ; Count : word

Buf – любая переменная, используемая для накопления информации из файла F.

Count – число считываемых блоков.

3. Задание. Разработать программу, выполняющую следующие действия:

№1. var f:file of integer; x,y:integer;Пусть файл f содержит два элемента – 3 и 7. Определить, какое значение будет иметь переменная y после выполнения, следующих операторов:

а) reset(f); read(f,у);

if nit eof(f) then read(f,у);

if not eof(f) then read(f,у);

б) reset(f) then read(f,у);

while not eof(f) do

begin read(f,x);

у:=у+х end;

в) reset(f); у:=1;

rереat rеаd(f,х); у:=y*х until eof(f)

№2. tуре слово = file of char;

Найти ошибки в приведенном ниже описании функции длина(w), которая должна

определять

количество элементов в произвольном слове w:

function длина (w:слово):integer;

var k:integer; с:сhar;

begin reset(w); k:=0;

rереаt rеаd(w, с); k:=k+1 until еоf(w);

длина;=k

еnd

№3. tуре серия =file of rеаl;

Описать функцию отриц(s), подсчитывающую сумму отрицательных элементов в

серии s.

№4. tуре цена = rесоrd руб:0..maxint; коп;0..99 end;

прейскурант =file of цена;

Описать процедуру min(П, Ц), присваивающую параметру Ц наименьшую цену

из непустого прейскуранта П.

№5. tуре ряд=file of 0...999;

Описать логическую функцию упор(r), проверяющую, упорядочены ли по возрастанию элементы непустого ряда r.

№6. tуре текст=file of char;

Описать логическую функцию еq{t1 ,t2), проверяющую тексты t1 и t2 на равенство.

№7. tуре время == record час:0..23;мин, сек:0...59 end;

ФВ=file оf время;

Описать логическую функцию еq(f, g), проверяющую на равенство файлы f и g типа

ФВ.

№8. tуре слово=file of char;

Описать логическую функцию less(w1, w2), проверяющую, предшествует ли

лексикографически слово w1 слову w2.

№9. tуре FR=filе of real;

Описать функцию предпосл(f), значением которой является предпоследний элемент

файла f, имеющего тип FR и содержащего не менее двух элементов.

№10. var f:file of integer; i:integer;

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

а) rewrite(f);

if eof(f) then write(f,1) else write(f,2);

if eof(f) then write(f,3) else write(f,4);

б) rewrite(f);

for i:=3 downto 1 do write(f, sqr(i));

№11. tуре строка =расcked аrrау [1...100] оf сhаr;

текст = filе оf сhаr;

Описать процедуру цифры(s,t), которая записывает в текст t все цифры из строки s.

№12. tуре ряд=filе оf 1..mахint;

Описать процедуру fib(f,n), записывающую в ряд f все числа Фибоначчи

(1, 1, 2, 3, 5 ...), не превосходящие целого положительного числа n.

№13. tуре FВ=filе оf bооlеаn;

Описать процедуру присв(f,g) от двух файлов типа FВ, которая файлу f присваивает

содержимое файла g.

№14. tуре lеttег=filе оf 'a'...'z`;

Описать процедуру арреnd(f,g,h) от трех файлов типа letters, которая записывает в

файл f сначала все элементы файла g, а затем все элементы файла h.

№15. tуре дата = rесоrd месяц: (янв,фев,мар,апр,май,июн,июя,авг,сен,окт,ноя,дек);

число:1...31

еnd;

ФД= file оf дата;

Описать процедуру зап(d,s,w) от трех файлов типа ФД, которая из файла d

переписывает в файл s все летние даты, а в файл w- все зимние даты.

№16. tуре геаls=filе оf rеаl;

Описать функцию less(f) от непустого файла f типа reals, которая подсчитывает

количество элементов файла f, меньших среднего арифметического всех элементов

этого файла.

№17. tуре человек = rесоrd

имя:раскеd аrrау [1..9] оf char;

возраст:1...99

еnd;

группа =filе оf человек;

Описать процедуру Самые Молодые (ГР), печатающую имена всех людей из непустой группы ГР, имеющих наименьший возраст.

№18. Дана непустая последовательность слов, содержащих от 1 до 8 букв;

между соседними словами - запятая, за последним словом – точка. Напечатать все

слова, от последнего слова,

№19. Дана непустая последовательность слов, содержащих от 1 до 8 букв;

между соседними словами—запятая, за последним словом—точка. Напечатать все

слова наименьшей длины.

№20. tуре текст =filе оf сhаr; Описать процедуру;

а) аdd1(t,с), добавляющую литеру с в начало текста t;

б) addlast(t,с), добавляющую литеру с в конец текста t;

в) double(t,c), удваивающую в тексте 1 каждую цифру;

г) гер1асе(1,с), заменяющую последнюю литеру непустого текста t на литеру с;

д) next(t), заменяющую в тексте t каждую цифру ва следующую по величине цифру ('9' заменять на '0');

е) delete(t), удаляющую из текста t все литеры '+' и '-';

ж) del(t), удаляющую из текста t предпоследний элемент, если такой есть;

з) firsts(t), оставляющую в тексте t только первые вхождения каждой литеры.

№21. При условии, что известен тип (Ф) файлов f и g, но не известен тип их элементов,

описать процедуру присв(f,g), присваивающую файлу f содержимое файла g.

№22. tуре FR=file оf rеа1;

Описать функцию incr(f), определяющую количество элементов в наиболее длинной

возрастающей последователь файла f.

№23. tуре файл=file of char;

Описать логическую функцию relation(f,v), проверяющую, ли содержимое файла f

правильной записью отношения» (см. ниже), и, если является, присваивающую

логическому параметру v значение этого отношения.

<отношение>::=<число> <знак отношения) <число>

<знак отношения):: =< | = | > | <= | <>| >=

<число>::==<цифра> | <цифры>

<цифры> ;;= <неноль> <цифра> | <цифры> <цифра>

<неноль>::=1 |2|3|4|5|6|7|8|9

<цифра>::=0| <неноль>

№24. Описать процедуру triangle(t), формирующую текстовый файл t из 9 строк, в первой из которых - одна литера `1`, во второй - две литеры '2', ..., в девятой - девять литер '9'.

№25. Описать процедуру line40(t), которая считывает из входного файла литеры до первой точки и записывает их (без точки) в текстовый файл t, формируя в нем строки по 40 литер (в последней строке литер может быть и меньше).

№26. Описать функцию, которая:

а) подсчитывает количество пустых строк в текстовом файле t;

б) находит максимальную длину строк текстового файла t.

№27. Описать процедуру printlines(t), печатающую построчно содержимое текстового

файла t.

№28.Пусть текстовый файл t разбит на непустые строки. Описать функцию count(t) для подсчета числа строк, которые:

а) начинаются с буквы d;

б) оканчиваются буквой z;

в) начинаются и оканчиваются одной и той же литерой;

г) состоят из одинаковых литер.

№29.Описать процедуру присв(t1, t2), переписывающую содержимое текстового файла t2 в текстовый файл t2 (с сохранением деления на строки).

№30.Описать процедуру присв(t1, t2), переписывающую в текстовый файл f содержимое текстового файла t2, но без пустых строк.