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

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

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

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

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

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

4.3. Текстовые файлы

Текстовый файл представляет собой последовательность строк произвольной длины (длина строки не больше 255 символов).

Данные в текстовом файле хранятся в символьном представлении. Поэтому создать файл или просмотреть его можно в текстовом редакторе среды Delphi или в программе «Блокнот».

Текстовый файл – это файл последовательного доступа. Чтобы найти произвольную строку файла, необходимо просмотреть все строки, находящиеся до нее.

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

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

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

31

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

Рис. 2

Вконце каждой строки ставится маркер конца (End Of Line).

Вконце файла ставится маркер конца файла (End Of File). Каждый файл имеет указатель. При чтении с помощью процедуры Read указатель сдвигается: на один символ, если для чтения используется переменная символьного типа; до ближайшего пробела, если для чтения используется переменная числового типа; на N символов, если для чтения используется переменная типа String[N]; на следующую строку, если для чтения используется переменная типа String или ShortString. При каждом чтении из файла с помощью процедуры Readln указатель сдвигается на следующую строку.

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

Var <Имя переменной файла>:Textfile;

Пример описания:

Var f : Textfile;

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

Таблица 9

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

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

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

Примеры

 

 

Var a,b: integer;

Read(<имя логи-

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

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

фрагмент (в зависимости от

F: Textfile;

 

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

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

Begin

 

ных допустимых

в переменную.

,Assignfile(F, ,

);

типов>);

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

D:\Temp\A.txt

 

дующему фрагменту.

Reset(F);

 

 

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

Read(F,a,b); ....

 

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

 

 

 

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

 

 

 

граммы

 

 

32

 

 

 

 

 

 

 

 

 

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

 

 

 

 

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

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

 

Примеры

 

 

 

 

 

Readln(<имя

логи-

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

Var a,b: integer;

ческого

файла>,

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

 

F: Textfile;

 

<список

перемен-

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

Begin

 

ных

допустимых

ную.

 

 

 

,Assignfile(F, ,

);

типов>);

 

 

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

 

D:\Temp\A.txt

 

 

 

 

щую строку.

 

 

 

Reset(F);

 

 

 

 

 

Если указатель достиг знака конца

 

Readln(F,a,b);

 

 

 

 

 

файла (EOF), то происходит пре-

 

 

 

 

 

 

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

 

 

 

Readln(<имя

логи-

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

 

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

дующую строку

 

 

 

Readln(F);

 

 

 

 

 

 

 

 

 

...

 

Write(<имя

логи-

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

Var a: integer; b:real;

ческого

файла>,

ния переменных

 

 

 

F: Textfile;

 

<список

перемен-

 

 

 

 

Begin

 

ных

допустимых

 

 

 

 

,Assignfile(F, ,

 

типов >);

 

 

 

 

 

 

 

D:\Temp\A.txt );

 

 

 

 

 

 

 

 

 

Rewrite(F);, ,

 

 

 

 

 

 

 

 

 

 

write(F,a:4, ,b:8:3);

Writeln(<имя

ло-

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

 

гического

файла>,

ния переменных

 

 

 

writeln(F,a:4,, ,,b:8:3);

<список

перемен-

Ставит

признак

конца

строки

 

 

 

ных

допустимых

(EOL)

 

 

 

 

 

 

типов >);

 

 

 

 

 

 

 

 

 

Writeln(<имя

ло-

Ставит

признак

конца

строки

 

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

(EOL)

 

 

 

 

writeln(F);…...

 

Append(<имя логи-

Открывает существующий файл

Append(F);

 

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

для записи.

 

 

 

 

 

 

 

 

 

Устанавливает указатель на ко-

 

 

 

 

 

 

 

нец файла.

 

 

 

 

 

 

 

 

 

При отсутствии файла происхо-

 

 

 

 

 

 

 

дит прерывание

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 10

 

 

 

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

 

 

 

 

 

 

Имя функции

 

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

 

Примеры

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

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

 

If Eof(F) then …

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

файла на признаке конца файла.

 

 

 

boolean;

 

 

Если да, возвращает True, иначе –

 

 

 

 

 

 

 

False

 

 

 

 

 

 

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

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

 

If Eol(F) then …

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

файла на признаке конца строки.

 

 

 

Boolean;

 

 

Если да, возвращает True, иначе –

 

 

 

 

 

 

 

False

 

 

 

 

 

 

33

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

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

Program PrimerTextF1; {$APPTYPE CONSOLE} uses SysUtils;

var f:Textfile; filename:string[40]; i,n,c:integer; sum,kol:integer; sr:real;

begin

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

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

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:8:3); end;

readln; close file (F); end.

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

34

содержится информация о прибыльных фирмах, а во втором – об убыточных. Записи имеют следующую структуру: название фирмы, баланс. Вывести содержимое файлов записей.

program PrimerTextF2; {$APPTYPE CONSOLE} uses SysUtils;

type Tjirm=record firma:string[20]; bal:integer; end;

Tfil=file of Tfirm; var f,f1:textfile; fp,fu:Tfil;

namef 1,namef 2,namef 3,namef4:string; s,s1,s2:string; prib,ubit,n,cod:integer; z:Tfirm;

begin

writeln(,Введите имя первого файла,); readln(namef1); writeln(,,Введите имя второго файла,); readln(namef2); writeln(,,Введите имя файла записей прибыльных,); readln(namef3);

writeln(,,Введите имя файла записей убыточных,); readln(namef4);

assignfile(f,namef1);

assignfile(f1,namef2);

//формирование текстового файла, в который занесены // название фирмы и баланс за прошедший год

reset(f );rewrite(f1); while not eof(f ) do begin

readln(f,s); n:=pos(, ,,s); позиция первого пробела s1:=copy(s,1,n); delete(s,1,n);

n:=pos(, ,,s);val(copy(s,1,n–1),prib,cod); delete(s,1,n); val(s,ubit,cod);

35

str(prib-ubit,s2); s1:=s1+s2; writeln(f1,s1);

end;

closefile(f1);

assignfile(fp,namef3);

assignfile(fu,namef4);

//формирование двух файлов записей, в файле fp

//содержится информация о прибыльных фирмах, а

//в файле fu – об убыточных

reset(f1); rewrite(fp); rewrite(fu); while not eof(f1) do begin

readln(f1,s); n:=pos(, ,,s); z.firma:=copy(s,1,n–1); delete(s,1,n); val(s,z.bal,cod);

if z.bal>0 then write(fp,z)

else if z.bal<0 then write(fu,z); end;

writeln(,Прибыльные фирмы,); reset(fp);

if filesize(fp)=0 then writeln(,Прибыльных фирм нет,) else begin

writeln(,Фирма,:20,,Баланс,:10); while not eof(fp) do begin

read(fp,z); writeln(z.firma:20,z.bal:10); end;

end; writeln(,Убыточные фирмы,); reset(fu);

if filesize(fu)=0 then writeln(,Убыточных фирм нет,) else begin

writeln(,Фирма,:20,,Баланс,:10);

36

while not eof(fu) do begin

read(fu,z); writeln(z.firma:20,z.bal:10); end;

end;

readln; close file (Fp); close file (Fu); end.

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

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

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

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

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

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

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

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

37

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

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

10.Создать в редакторе текстовый файл, каждая строка которого содержит фамилию автора, название книги и год издания. Организовать выбор из этого файла данных о книгах, изданных до заданного года. Год издания ввести по запросу. Если таких книг нет, то выдать соответствующее сообщение.

38

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ

1.Архангельский А.Я. Язык Pascal и основы программирования в Delphi: Учеб. пособие. М.: Бином-Пресс, 2004. 496 с.

2.Архангельский А.Я. Приемы программирования в Delphi. Изд. 2-е, перераб. и доп. М.: Бином-Пресс, 2004. 848 с.

3.Глушаков С.В., Клевцов А.Л. Программирование в среде Delphi. Изд. 2-е, доп. и перераб. Харьков: Фолио, 2003. 528 с.

4.Культин Н.Б. Основы программирования в Delphi 7. СПб.: БХВ – Санкт-Петербург, 2002. 608 с.

5.Петриков В.М., Маслобоев А.И. Delphi на примерах. СПб.: БХВ – Санкт-Петербург, 2005. 496 с.

6.ЮркинА.Г. Задачникпопрограммированию. СПб.: Питер, 2002. 192 с.

39

 

ОГЛАВЛЕНИЕ

 

1.

Строка .......................................................................................................

3

2.

Множество ................................................................................................

8

3.

Запись ........................................................................................................

14

4.

Файл ..........................................................................................................

22

Список рекомендуемой литературы ...........................................................

39

40

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