Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по программированию в среде Delphi (96

..pdf
Скачиваний:
6
Добавлен:
15.11.2022
Размер:
353.53 Кб
Скачать

структуры: город, улица, номер дома. Разработать программу для ввода и вывода массива записей, определения самых распространенных женского имени и фамилии для студентов-москвичей не старше 18 лет, редактирования записи о студенте с заданной фамилией и именем. Вывести исходные данные и результат в виде таблицы.

4.Создать массив записей о студентах: фамилия, адрес, группа, номер комнаты в общежитии. Адрес представляет запись следующей структуры: город, улица, номер дома. Разработать программу для ввода и вывода массива записей; вывода фамилий студентов одной группы, проживающих вместе в одной комнате; определения, проживают ли в общежитии студенты из указанного города (и если проживают, то вывода сведений о них, а если нет, то выдачи соответствующего сообщения). Исходные данные и результат вывести в виде таблицы.

5.Создать массив записей о сотрудниках: фамилия, имя, отчество, образование (среднее, среднее специальное, неоконченное высшее, высшее), должность, стаж работы. Разработать программу для ввода и вывода массива записей, вывода процентного соотношения сотрудников с каждым видом образования и вывода списка сотрудников по возрастанию процентного соотношения, поиска сотрудников с максимальным стажем работы, предполагая, что таких может быть несколько. Исходные данные и результат вывести в виде таблицы.

6.Создать массив записей о багаже пассажиров: количество и общий вес вещей. Разработать программу для ввода и вывода массива записей, поиска пассажиров, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг, и пассажира, багаж которого превышает багаж каждого из остальных

ипо числу вещей, и по весу. Исходные данные вывести в виде таблицы.

7.Создать массив записей о книгах и журналах в библиотеке. Данные о книге должны включать: название, год издания, фамилию автора, издательство, данные о журнале – название, год издания, номер тома, номер выпуска. Использовать записи с вариантами. Исходные данные вывести в виде двух таблиц: по книгам и по журналам. По заданному году издания вывести на экран всю информацию по книгам и по журналам.

8.Создать массив записей о спортсменах: пловцах, тяжелоатлетах и теннисистах. Использовать записи с вариантами. В фиксированной части записи поля должны указываться фамилия, имя, отче-

21

ство спортсмена; в вариантной части для пловцов – наилучший результат, для тяжелоатлетов – весовая категория и место, занятое на чемпионате мира, для теннисистов – количество выигранных турниров в этом году. Исходные данные вывести в одной таблице. Найти трех лучших теннисистов. В новый массив выбрать записи о пловцах и упорядочить этот массив по убыванию результатов.

9.Создать массив записей о почтовой индексации: область, район, населенный пункт, почтовый индекс. Разработать программу для ввода и вывода массива записей, поиска пунктов с одинаковым названием, пунктов, у которых индекс отличается на единицу. Упорядочить исходный массив по возрастанию почтового индекса.

10.Создать массив записей о лекарствах: наименование, количество, цена, срок хранения, страна-производитель. Разработать программу для ввода и вывода массива записей, вывода информации о самом дорогом и самом дешевом лекарствах, информации о лекарствах, срок хранения которых на складе превышает три месяца, удаления записи о лекарстве по наименованию, а также подсчета процентного соотношения отечественных и импортных лекарств.

4. ФАЙЛ

Различают физические и логические файлы. Физический файл – это именованная область носителя, предназначенная для хранения информации. Логический файл – это переменная так называемого файлового типа, который, в свою очередь, подразделяется на следующие типы: типизированный, текстовый и нетипизированный. Далее рассмотрим только первые два.

4.1. Процедуры работы с папками и файлами

Оbject Рascal позволяет работать с папками операционной системы (табл. 5).

 

 

Таблица 5

 

Процедуры работы с папками

 

 

 

Имя процедуры

Выполняемая работа

Примеры

 

 

MkDir(,D:\Temp\IU7_pr,);

MkDir(<строковое

Создает папку, заданную с

выражение>);

полным путем в параметре

ChDir(,D:\Temp\IU7_pr,);

ChDir(<строковое

Изменяет текущую папку на

выражение>);

заданную параметром

 

22

Окончание табл. 5

Имя процедуры

Выполняемая работа

,Примеры

,

RmDir(<строковое

Удаляет пустую папку, за-

RmDir( D:\Temp\IU7_pr );

выражение>);

данную с полным путем в

 

 

 

параметре (удаляемая папка

 

 

 

не может быть текущей)

 

 

GetDir(<выражение

Возвращает во втором пара-

Var d: integer;

 

целого типа>,

метре текущую папку диска,

S: string;

 

<строковое

указанного первым парамет-

Begin

 

выражение>);

ром, который может равнять-

d:=1;

 

 

ся: для текущего диска – ну-

Getdir(d,S);

 

 

лю, для диска А – единице,

 

 

 

для диска B – двум, для диска

 

 

 

С – трем и т. д.. Имя папки

 

 

 

заносится во второй параметр

 

 

 

без заключительного символа \

 

 

В табл. 6 приведены процедуры, которые используются для работы с типизированными и текстовыми файлами.

 

 

 

 

Таблица 6

Процедуры для работы с файлами

 

 

 

 

 

Имя процедуры

Выполняемая работа

 

Примеры

 

 

 

 

AssignFile(<имя ло-

Связывает

логический файл с

Assignfile(F,

гического файла>,

внешним (физическим) файлом

,D:\Temp\A.dat,);

<имя физического

 

 

 

 

файла>);

 

 

 

 

Reset( <имя логичес-

Проверяет

существование

файла

Reset(F);

кого файла >);

,D:\Temp\A.dat,.

 

 

 

Если файла нет, то происходит

 

 

прерывание работы программы.

 

 

Если файл есть, указатель файла

 

 

устанавливается на начало, типи-

 

 

зированный файл открывается для

 

 

чтения и для записи, а текстовый

 

 

файл – только для чтения

 

 

Rewrite(<имя логи-

Проверяет

существование

файла

Rewrite(F);

ческого файла >);

,D:\Temp\A.dat,.

 

 

 

Если файла нет, то он создается.

 

 

Если файл есть, содержимое файла

 

 

удаляется, указатель файла устанав-

 

 

ливается на начало (типизирован-

 

 

ный файл открывается для чтения и

 

 

для записи, а текстовый файл –

 

 

только для записи)

 

 

23

 

 

 

 

 

Окончание табл. 6

 

 

 

Имя процедуры

Выполняемая работа

Примеры

 

 

 

 

CloseFile(

<имя

Прерывает связь между логическим

Closefile(F);

логического

фай-

ивнешнимфизическимфайлом.

 

ла >);

 

Файл окончательно обновляется и

 

 

 

закрывается

 

 

Erase( <имя логи-

Удаляет

внешний

физический

Closefile(F);

ческого файла >);

файл, связанный с логическим

Erase(F);

 

 

файлом

процедурой

AssignFile.

 

 

 

Перед

использованием Erase(F)

 

Rename(<имя

ло-

необходимо файл закрыть

Rename(F,,A:\b.dat,);

Переименовывает внешний физи-

гического файла>,

ческийфайл

 

 

<новое физическое

 

 

 

 

имя файла>);

 

 

 

 

 

4.2. Типизированные файлы

Типизированный файл представляет собой последовательность компонентов одного типа. Тип компонентов может быть любым, кроме файлового.

Данные в типизированном файле хранятся во внутреннем представлении, при занесении данных в файл преобразования в символьное представление не происходит. Поэтому создать файл или просмотреть его в текстовом редакторе нельзя, для этого необходимо составить программу.

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

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

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

Структура типизированного файла имеет вид, представленный на рис. 1.

Все компоненты в файле пронумерованы, имеют одинаковую длину. В конце файла ставится маркер конца (End Of File). Каждый файл имеет указатель, который содержит адрес компонента,

24

с которым возможен обмен в данный момент. Указатель сдвигается на следующий компонент при каждом чтении из файла или записи в файл.

EOF

Указатель файла

Рис. 1

Объявление типизированного файла в разделе Var имеет вид

Var <Имя переменной файла>:file of <тип компонентов файла>;

Примеры описаний типизированных файлов:

Type zap=record

Fam: string[30]; Res: integer;

End;

Var F: file of zap; //компонентом является запись

Var F1:file of char; //компонентом является любой символ

В табл. 7 и 8 описаны процедуры и функции для работы с типизированными файлами в дополнение к тем процедурам, которые перечислены в табл. 6.

 

 

Таблица 7

Процедуры для работы с типизированными файлами

 

 

 

Имя процедуры

Выполняемая работа

Примеры

 

 

 

Read(<имя логи-

Читает из файла очередной ком-

Var a,b: integer;

ческого файла>,

понент и записывает в перемен-

F: file of integer;

<список перемен-

ную.

Begin

ных соответствую-

Указатель сдвигается на сле-

Assignfile(F,

щего типа>);

дующий компонент файла.

,D:\Temp\A.dat,);

 

Если указатель достигает при-

Reset(F);

 

знак конца файла (EOF), то про-

Read(F,a,b);

 

исходит прерывание работы про-

 

 

граммы

 

25

 

 

 

 

 

 

 

 

Окончание табл. 7

 

 

 

 

 

Имя процедуры

Выполняемая работа

 

Примеры

 

 

 

 

 

 

Write(<имя

логи-

Записывает в файл значения пе-

Var a,b: integer;

ческого

файла>,

ременных, начиная с компонента,

F: file of integer;

<список

перемен-

на котором стоял указатель фай-

Begin

ных соответству-

ла.

 

 

 

Assignfile(F,

ющего типа >);

После записи очередной пере-

,D:\Temp\A.dat,);

 

 

 

 

менной указатель сдвигается на

Rewrite(F);

 

 

 

 

следующий компонент файла

write(F,a,b);

Seek(<имя логичес-

Устанавливает

указатель

файла

Seek(F,4);

кого файла>, <вы-

на компонент, заданный выраже-

 

ражение целого

нием целого типа

 

 

типа>);

 

 

 

 

 

 

 

 

Truncate(<имя

Усекает файл, начиная с компо-

Truncate(F);

логического

фай-

нента, на котором стоит указа-

 

ла>);

 

 

 

тель файла

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 8

 

Функции для работы с типизированными файлами

 

 

 

 

 

Имя функции

 

Выполняемая работа

 

Примеры

 

 

 

 

Eof(<имя логичес-

 

Проверяет, стоит ли указа-

If Eof(F) then ...

кого файла >):

 

тель файла

на

признаке

 

 

Boolean;

 

 

 

конца файла. Если да, воз-

 

 

 

 

 

 

вращает True, иначе False

 

 

FileSize(<имя

 

 

Возвращает

количество

Reset(F);

логического

фай-

 

компонентов файла

n:=filesize(F);

ла >):integer;

 

 

 

 

 

 

 

FilePos(<имя ло-

 

Возвращает

номер компо-

Reset(F);

гического фай-

 

нента, на котором стоит

Read(F,a,b);

ла >):integer;

 

 

указатель файла

 

N:=filepos(F);

Примеры решения задач

Пример 1. Создать типизированный файл целых чисел. Вывести содержимое файла на экран. Найти среднее арифметическое отрицательных чисел файла, если таких чисел в файле нет, вывести сообщение.

program PrimerTipF1; {$APPTYPE CONSOLE} uses SysUtils;

var f:file of integer; filename:string[40];

26

i,n,c:integer; sum,kol:integer; sr:real; begin

writeln(,Введите имя файла,); readln(filename); assignfile(f,filename);

// создание файла rewrite(f);

writeln(,Введите количество чисел,); readln(n); writeln(,Введите ,,n,, целых чисел,);

for i:=1 to n do begin read(c); write(f,c);

end;

readln;

writeln(,Содержимое файла,); reset(f);

while not eof(f) do begin read(f,c); write(c:4,, ,);

end;

writeln;

//среднее арифметическое отрицательных чисел seek(f,0);

sum:=0; kol:=0;

while not eof(f) do begin read(f,c);

if c<0 then begin sum:=sum+c; kol:=kol+1;

end;

end;

if kol=0 then writeln(,Нет отрицательных чисел,) else begin

sr:=sum/kol; writeln(,Sr = ,,sr:8:3); end;

readln; close file (F); end.

27

Пример 2. Разработать программу, в которой: a) создается файл записей следующей структуры: фамилия студента, три оценки, средний балл; б) выводится содержимое файла на экран; в) формируется новый файл записей для студентов, у которых средний балл выше среднего по группе.

program PrimerTipf2; {$APPTYPE CONSOLE} uses SysUtils;

type tstud=record fam:string[15]; oc:array[1..3] of byte; sb:real;

end; tfil=file of tstud;

var z:tstud; ch:char; i:byte; f,f1:tfil; filename,filename1:string; srgr:real;

begin

// создание файла записей writeln(,Введите имя создаваемого файла,); readln(filename);

assignfile(f,filename);

rewrite(f); repeat

writeln(,Введите фамилию,); readln(z.fam); writeln(,Введите 3 оценки,);

for i:=1 to 3 do read(z.oc[i]); readln; z.sb:=0;

for i:=1 to 3 do z.sb:=z.sb+z.oc[i]; z.sb:=z.sb/3;

write(f,z);

writeln(,Продолжать? – y/n,); readln(ch); until ch in [,n,,,N,];

28

writeln(,Содержимое исходного файла,); reset(f);

writeln(,Фамилия, :20, ,Оценка1 Оценка2 Оценка3 Ср. балл ,); while not eof(f) do begin

read(f,z); write(z.fam:20);

for i:=1 to 3 do write(z.oc[i]:8); writeln(z.sb:8:2);

end;

// формирование нового файла записей reset(f);

srgr:=0;

while not eof(f) do begin read(f,z); srgr:=srgr+z.sb;

end;

srgr:=srgr/filesize(f);

reset(f);

writeln(,Введите имя нового файла,); readln(filename1); assignfile(f1,filename1);

rewrite(f1);

while not eof(f) do begin read(f,z);

if z.sb>srgr then write(f1,z); end;

writeln(,Студенты, имеющие высокий средний балл,); reset(f1);

writeln(,Фамилия, :20, ,Оценка1 Оценка2 Оценка3 Ср. балл,); while not eof(f1) do begin

read(f1,z); write(z.fam:20);

for i:=1 to 3 do write(z.oc[i]:7);

29

writeln(z.sb:8:2);

end;

readln; close file (F); close file (F1); end.

Задания для самостоятельной работы

1.Создать файл записей следующей структуры: название игрушки, цена и возрастные границы (например, игрушка для детей от двух до пяти лет). Организовать просмотр содержимого файла. Выбрать наборы игрушек, которые можно купить для ребенка определенного возраста на имеющуюся сумму денег.

2.Создать файл записей следующей структуры: фамилия, имя

иномер телефона. Организовать просмотр содержимого файла, удаление записи из файла по фамилии и имени. Фамилию и имя ввести по запросу. Сформировать массив записей, выбрав из файла данные об однофамильцах.

3.Создать файл записей следующей структуры: наименование товара, количество, цена. Организовать просмотр содержимого файла и добавление записей в файл. Количество добавляемых записей ввести по запросу. Проверить, возможна ли продажа нужной партии требуемого товара. Если продажа возможна, скорректировать записи в файле с учетом продажи данной партии товара.

4.Создать файл записей следующей структуры: фамилия, имя

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

5.Создать файл записей следующей структуры: наименование детали, ее номер и масса. Организовать просмотр содержимого файла и удаление из файла записи о детали по ее номеру. Номер удаляемой детали ввести по запросу.

6.Создать файл записей следующей структуры: наименование товара, цена, страна-производитель. Организовать просмотр содержимого файла, сортировку записей в файле по возрастанию цены товара. Найти процентное соотношение российских и импортных товаров.

7.Создать файл записей следующей структуры: название станции, номер зоны и цена билета. Организовать просмотр содержимого файла, получение информации о самом дешевом и самом дорогом билете. Отредактировать запись о станции с введенным названием.

30

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]