Практикум по основам программирования. Язык Паскаль
.pdf2 - АЯ |
ЗАПИСЬ |
СЕМЕНОВ |
1970 |
3 - АЯ |
ЗАПИСЬ |
КОРНЕЕВ |
1968 |
Во многих реализациях языка ПАСКАЛЬ вместо символа / в программах употребляется символ А . Рас смотренные ниже две программы (РР74 и РР75) ис пользуют внешний файл с именем ABC.DAT.
П р о г р а м м а РР74 формирует файл и сохраняет его на внешнем носителе, что обеспечивается заданием внешнего имени ABC.DAT при открытии файла на за пись. Форма задания внешнего имени зависит от конк ретной реализации языка ПАСКАЛЬ. В данном случае приводится программа, реализованная в ОС РАФОС для СМ ЭВМ.
Ввод исходной информации во внешний файл в программе РР74 осуществляется до тех пор, пока не будет введена фамилия, состоящая из десяти звездочек (признак конца ввода). Это сделано для того, чтобы пользователю не надо было предварительно подсчиты вать количество вводимых записей. При вводе боль ших объемов информации это весьма обременительно. В данном примере признак конца ввода записывается в конец файла. Иноща удобнее работать с признаком конца файла, чем с функцией EOF.
PROGRAM РР74(INPUT);
TYPE ZAP=RECORD
ФИО: PACKED ARRAYC1..10D OF CHAR; ГОДР: INTEGER
END; FPK=FILE OF ZAP;
VAR FIZAP,RB:FPK; A:ZAP; IsINTEGER;
BEGIN
REWRITE(FIZAP, *ABC.DAT *); READLN;
REPEAT
WRITE <*=>*);
FOR I:=l TO 10 DO
READ(А.ФИОСID);
READLN(А.ГОДР);
FIZAPT:=A; PUT(FIZAP)
UNTIL А.фИО=************;
CLOSE(FIZAP)
END. |
|
П р о т о к о л |
р а б о т ы п р о г р а м м ы РР74: |
= > ВОРОНОВ |
1966 |
= >кох |
1970 |
= > АРОНОВ |
1972 |
= > РОМАНОВ |
1968 |
= >**•****♦*• |
0 |
В п р о г р а м м е РР75 из внешнего файла с име нем ABC.DAT удаляются все записи, соответствующие людям, родившимся до 1970 года. Для этого использу ется рабочий файл с внешним именем ’L.DAT’ в кото рый сначала последовательно переписываются из внешнего файла все оставляемые записи, затем внеш ний файл открывается на запись, рабочий ф айл -на чтение и все содержимое рабочего файла переписыва ется во внешний файл. При этом для контроля рабо ты программы оставляемые записи выдаются на тер минал.
PROGRAM РР75 (OUTPUT); TYPE ZAP=RECORD
ФИО:PACKED ARRAYC1..10] OF CHAR; ГОДР:INTEGER
END; FPK=FILE OF ZAP;
VAR FIZAP,RB:FPK; A:ZAP; I:INTEGER; BEGIN
<* ОТКРЫТИЕ НА ЧТЕНИЕ ОБРАБАТЫВАЕМОГО ФАЙЛА *) RESET(FIZAP,'ABC.DAT');
(* ОТКРЫТИЕ НА ЗАПИСЬ РАБОЧЕГО ФАЙЛА *) REWRITE(RB,'L.DAT');
WHILE FIZAPt.OMK>'##********' DO BEGIN
IF FIZAPf.rOAP>=1970 THEN BEGIN RBti-FIZAPT; PUT(RB); END;
GET(FIZAP)
END;
(• ЗАПИСЬ ПРИЗНАКА КОНЦА В РАБОЧИЙ ФАЙЛ «) RBt.ФИО:»'**********'; PUT(RB); CLOSE(RB);
<« ПЕРЕПИСЬ ИЗ РАБОЧЕГО ФАЙЛА В ОБРАБАТЫВАЕМЫЙ ФАЙЛ «) RESET(RB,'L.DAT')|
REWRITE(FIZAP,'ABC.DAT'); REPEAT
A:=RBT| FIZAPT:=A; WRITELN(А.ФИО,А.ГОДР:S); PUT(FIZAP); GET(RB)
UNTIL А.ФИО^'********** *; CLOSE(FIZAP)
END.
П р о т о к о л р а б о т ы п р о г р а м м ы PP75:
КОХ 1970 АРОНОВ 1972
......... О
Для добавления записей в конец существующего файла необходимо также воспользоваться промежуточ ным файлом. Сначала скопировать все содержимое об рабатываемого файла в промежуточный файл, записать в конец добавляемые записи, затем открыть на запись обрабатываемый файл и переписать в него все содер жимое промежуточного файла.
7.2. ТЕКСТОВЫЕ ФАЙЛЫ
Файлы, компонентами которых являются симво лы, называются текстовыми. Текстовые файлы отли чаются от обычных тем, что они делятся на строки. Каждая строка заканчивается специальным символом (признаком конца строки). При занесении информации в файл признак конца строки записывается при помо щи оператора WR1TELN. Оператор WRITELN(F) закан чивает текущую строку текстового файла F признаком конца строки. Для обнаружения признака конца строки при чтении используется стандартная функция EOLN(F), принимающая значение TRUE, если из фай ла F считан символ, за которым стоит признак конца строки, и значение FALSE в противном случае. Если значение EOLN(F) равно TRUE, то очередным симво лом, прочитанным из файла, является пробел! Опера тор READLN(F) пропускает все до начала следующей строки текстового файла F (F/ становится равным пер вому символу следующей строки).
Работу с текстовыми файлами можно осуществ лять как с помощью рассмотренных операций PUT и GET, так и с помощью операторов WRITE и READ. Эквивалентными являются следующие записи:
WRITE(Cr,S) и CT/:=S; PUT(CT);
READ(CT,S) и S:=CIY; GET(CI);
гДе C T - текстовый файл; S - символьная переменная. Приведем пример программы, работающей с тек
стовым файлом. Пусть требуется построить файл, представляющий собой список группы. Удобно сделать ОД, чтобы в каждой строке файла записывалась одна Фамилия. При вводе каждая фамилия начинается с новой строки.
При обращении к стандартным процедурам READ, READLN, WRITE, WRITELN в качестве первого аргумента можно использовать имя любого текстового файла. Если имя файла не указано, то считается, что
происходит обращение к стандартному файлу. Пара метры стандартных процедур не обязательно должны быть символьного типа, они могут быть и других ти пов. В этом случае при передаче данных происходит неявное их преобразование.
7.3.ВОПРОСЫ И УПРАЖНЕНИЯ
1.В каких случаях удобно использовать файлы?
2.Где хранятся файлы?
3.Как в разделе типов задается файловый тип?
4.Как подразделяются файлы по видам доступа к его компонентам?
5.Каким образом описываются переменные файловых типов?
6*. Описать переменную СТ как переменную файло вого типа, если известно, что каждый компонент фай ла есть:
а} символ;
б) запись, содержащая поля:
ФИО:РАСКИ> ARRAY[1..10]OF CHAR; ГОДР:1960..1980.
Привести все возможные способы описания.
7*. Какие из приведенных ниже описаний являются неправильными описаниями переменных файлового типа и почему?
а) VAR F:TEXT;
б) VAR F1=FILE OF CHAR;
в) VAR F2:FILE OF PACKED ARRAY[1..15] OF CHAR; r) VAR F3:FILE OF ARRAY[’A’..T];
Д) VAR F4:FILE OF REAL;
8.Как осуществляется доступ к компонентам файлов?
9.Какие операции определены над файлами?
10. В чем разница между операторами REWR1'1E(FI) и REWRrrE(FT,,DIL.DAT’), между операторами RESET(FI)
и RESET(FI,’DIL.DAr)?
11*. Какие переменные должны быть описаны в про грамме, содержащей следующий фрагмент:
...FIL/:=’CA’; PUT(FIL)
икакие действия совершают эти операторы?
12.Известно, что X-переменная символьного типа и FELтекстовый файл. Будут ли эквивалентны операто ры
READ(FIL,X) и X:=FILf; GET(FIL);
WRTIE(FIL,X) и FILf:=X; PUT(FIL); ?
13. Определить тип стандартных файлов INPUT, OUTPUT. Нужно ли их описывать в программе? Нуж но ли эти файлы открывать на запись или на чтение? 14*. Переменная СНТ является переменной символь ного типа, переменные F1,F2 - типа TEXT, тип TEXT в языке стандартно определен как FILE OF CHAR. Какие из приведенных операторов являются эквивалентны ми? Какие операторы неправильно записаны?
а) WRITE(CHT); |
з) WRITE(OUTPUT,CHT); |
|
б) READ(CHT); |
и) |
READ(INPUT,CHT); |
в) WRrrELN(Fl,CHT); |
к) WRITELN(OUTPUT); |
|
г) READLN(CHT,F2); |
л) READLN(OUTPUT); |
|
д) EOF(Fl); |
м) |
EOF(Fl,F2); |
е) EOLN(CHT); |
н) WRTTEfOTBEP); |
|
ж) WRTrECOUTPUT.’OTBET); |
о) EOF. |
15*. Есть ли разница в результатах работы:
а) оператора WRITELN(FVAHCT) и группы операто ров:
WRITE(F1,’AH’):
WRITELN(F1,’CT);
б) оператора WRITELN(F1,’AHCT’) и группы операто ров:
WRITELN(F1,’AH’);
WRITELN(Fl,’Cr);?
16*. Известно, что файловая переменная FIL описыва ется следующим образом - FEL:FILE OF REAL, пере менная X является переменной вещественного типа, а файл FTL содержит один компонент - число 42.3. Найти ошибки в следующих фрагментах:
а) ...REWPJTE(FIL); RESET(FIL); X=FIL/;...
б) ...RESET(FIL); Х = И Ь /; GET(FIL); X:=X+FIL/;...
в) ...RESET(FIL); FIL/: =51.32; PUT(F1L);...
З А Д А Н И Е 2. РАБОТА С ВНЕШНИМИ ФАЙЛАМИ
Це л ь з а д а н и я
1.Ознакомление с возможностями организации файлов на внешних носителях в используемой ЭВМ.
2.Получение практических навыков работы с внешни
ми файлами.
П о с т а н о в к а з а д а ч и Подготовить данные об абитуриентах, поступаю
щих в техникум. Информацию о каждом абитуриенте оформить в виде записи, содержащей следующие поля:
1.Фамилия, имя, отчество.
2.Год рождения.
3.Год окончания школы.
4.Оценки в аттестате.
5.Признак - нуждается ли в общежитии.
6.Оценки вступительных экзаменов.
Разработать программу записи подготовленных данных во внешний файл и программу обработки со зданного внешнего файла.
I. Удалить из внешнего файла все записи, удовлет воряющие условию, заданному в варианте, и распеча тать информацию, оставшуюся в файле.
П. Добавить N записей в начало(конец) внешнего файла и распечатать записи полученного файла соглас но конкретному варианту.
С о д е р ж а н и е о т ч е т а
1.Постановка задачи.
2.Анкетные данные абитуриентов.
3.Тексты программ и протоколы их работы.
4.Выводы.
М е т о д и ч е с к и е у к а з а н и я
1.При подготовке исходных данных необходимо учесть, что выходная информация программы обработ ки внешнего файла должна составлять не менее одной четверти от входной.
2.Программа записи данных во внешний файл долж на иметь структуру, аналогичную структуре программы
РР74, приведенной в гл. 7. Следует учесть, что в опе раторе REWRITE форма задания внешнего имени за висит от конкретной ЭВМ.
98
3. При составлении программы обработки данных, хранящихся во внешнем файле, необходимо ознако миться с программой РР75 и комментариями к ней.
В а р и а н т ы з а д а н и я
I. Из внешнего файла, содержащего исходные данные, удалить записи, соответствующие:
1. Абитуриентам, получившим хотя бы одну оценку 2.
2.Абитуриентам, получившим все оценки 3.
3.Абитуриентам, имеющим средний балл меньше 4
ихотя бы одну оценку 3 в аттестате.
4.Абитуриентам, имеющим средний балл больше 4,5
инуждающимся в общежитии.
5.Абитуриентам, имеющим средний балл в аттестате меньше 4.
6.Абитуриентам старше восемнадцати лет.
7.Абитуриентам, не получившим ни одной оценки 5.
8.Абитуриентам, имеющим отличный аттестат и по лучившим все оценки 5.
9.Абитуриентам, нуждающимся в общежитии и полу чившим хотя бы одну оценку 3.
10. Абитуриентам старше семнадцати лет, имеющим отличный аттестат.
Распечатать полученный файл.
П. Используя внешний, файл, содержащий исходные данные, добавить N записей и распечатать:
1.Список абитуриентов, имеющих в аттестате оценки
только 5; N=2.
2.Список абитуриентов, имеющих в аттестате одну оценку 4, а остальные оценки 5; N=3.
3.Список абитуриентов, имеющих средний балл боль ше 4,5; N=4.
4.Список абитуриентов, имеющих средний балл
меньше 4; N=1.
5.Список абитуриентов, не нуждающихся в общежи тии; N=2.
6.Список абитуриентов, нуждающихся в общежитии;
N=3.
7.Список абитуриентов, сдавших вступительные экза мены только на оценки 5; N=4.
8.Список абитуриентов, сдавших вступительные экза
мены на оценки 4 и 5; N=2.
9. Список абитуриентов, сдавших экзамены с двумя оценками 4 и остальными оценками 5; N=3.
10. Список абитуриентов, получивших на вступитель ных экзаменах одну оценку 3; N=4.
З А Д А Н И Е 3. РАБОТА С УПОРЯДОЧЕННЫМИ ФАЙЛАМИ
Це л ь з а д а н и я
1.Ознакомление с возможностью добавления информа ции в упорядоченный внешний файл.
2.Получение навыков в организации работы с внеш
ними файлами.
П о с т а н о в к а з а д а ч и
Подготовить список из N наименований товаров. Конкретное значение N указано в варианте. Информа ция о каждом товаре содержит:
1.Название товара.
2.Цену.
3.Год выпуска.
4.Количество.
Список должен быть упорядочен по одному из па раметров, указанных в конкретном варианте. Сведения по каждому товару необходимо представить в виде за писи.
Разработать программу, которая заносит во внеш ний файл записи упорядоченного списка, и программу, которая добавляет в сформированный внешний файл данные об М товарах, при этом не нарушая упорядо ченности исходного файла. Если среди добавляемых товаров встречается товар, сведения о котором в файле уже есть, то необходимо их обновить, т. е. старую за пись исключить.
С о д е р ж а н и е о т ч е т а
1.Постановка задачи.
2.Упорядоченный исходный список товаров и пере чень добавляемых товаров.
3.Тексты программ и протоколы их работы.
4.Анализ допущенных ошибок.
М е т о д и ч е с к и е у к а з а н и я 1. При подготовке исходных данных в качестве наиме
нований товаров можно взять названия инструментов, книг, школьно-письменных принадлежностей и т. п. Для них соответственно указать цену, год выпуска, ко личество.
2. Программа записи информации о товарах во внешний файл по структуре может быть аналогичной программе РР74. Разница будет заключаться в
юо