Лабораторная работа № 14. Программирование структурных типов данных
Файлы
Файлы – упорядоченные наборы данных различного типа, хранящиеся в памяти.
В языке Pascal файлы бывают:
1. Текстовые (типа Text).
2. Типизированные (типа File of …).
3. Нетипизированные (типа File).
Над текстовыми файлами обычно применяются следующие стандартные процедуры:
1. Assign(FP,F) – связывание файловой переменной FP с именем файла F.
2. Reset(FP) – открытие файла, связанного с файловой переменной FP, для чтения.
3. ReWrite(FP) – открытие файла, связанного с файловой переменной FP, для записи новых данных с удалением старых.
4. Append(FP) – открытие файла, связанного с файловой переменной FP, для записи новых данных с добавлением к старым.
5. Close(FP) – закрытие файла, связанного с файловой переменной FP.
6. Read(FP,P1,…) – ввод значений переменных P1, … из файла, связанного с файловой переменной FP.
7. ReadLn(FP,P1,…) – ввод значений переменных P1, … из файла, связанного с файловой переменной FP, и перевод указателя в файле на новую строку.
8. Write(FP,V1,…) – вывод значений выражений V1, … в файл, связанный с файловой переменной FP.
9. WriteLn(FP,V1,…) – вывод значений выражений V1, … в файл, связанный с файловой переменной FP, и перевод указателя в файле на новую строку.
Строки
Строка – упорядоченный набор символов в кавычках.
Описание строки в разделе описания переменных (Var) на языке Pascal имеет вид:
St : string [ NMax ];
где string – строка, St – имя строки, NMax – максимальное количество символов в строке.
Это означает, что переменная Stявляется строкой, которая может содержать от 1 до NMaxсимволов.
Записи
Запись – неупорядоченный набор величин разных типов, называемых полями.
Поле – именованная величина, являющаяся частью записи.
Описание записи в разделе описания переменных (Var) на языке Pascal имеет вид:
Zap : record
SP1 : T1;
…
SPN : TN
end;
где record – запись, end – конец описания записи, Zap – имя записи, SP1 – список полей 1-й, SPN – список полей N-й, T1 – тип полей в 1-м списке, TN – тип полей в N-м списке.
Это означает, что переменная Zap является записью, включающей поля в списке SP1 типа T1 … поля в списке SPN типа TN.
Пример 1. Var
computer:record
nazv:string[10];
god:integer;
bystr:real;
end;
Это означает, что переменная computer – запись, включающая поля nazv строкового типа, god целочисленного типа, bystr вещественного типа.
Доступ к полю записи имеет вид:
Zap . Pole
где Zap – имя записи, Pole – имя поля.
Это означает доступ к полю Pole записи Zap.
Пример 2. computer.nazv
Это означает поле nazv записи computer.
Оператор присоединения имеет вид:
with Zap do Op
где with – с, do – делать, Zap – имя записи, Op – оператор.
Это означает, что с полями записи Zap выполнять оператор Op.
Пример 3. Ввести поля записи computer без использования оператора присоединения и с его использованием.
a) readln(computer.nazv,computer.god,computer.bystr);
б) with computer do readln(nazv,god,bystr);
Порядок выполнения
1. Зайти в Borland Pascal.
2. Создать новый файл, набрать в нём исходную матрицу A и сохранить её в файле Lab14a.txt.
3. Набрать текст программы для решения задачи № 1 и выполнить программу.
4. Открыть файл Lab14c.txt и записать ответ.
5. Набрать текст программы для решения задачи № 2 и получить ответ для контрольного примера.
Примеры задач
Задача 1. Ввести матрицу A размером 3´3 из файла Lab14a.txt, заменить в ней элементы выше главной диагонали на нули, а затем вывести эту матрицу в файл Lab14c.txt.
| Program Lab14b;
Var
A:array[1..3,1..3] of real;
i,j:integer;
f1,f2:text;
Begin
assign(f1,'Lab14a.txt');
assign(f2,'Lab14c.txt');
reset(f1); rewrite(f2);
for i:=1 to 3 do
for j:=1 to 3 do
read(f1,A[i,j]);
for i:=1 to 3 do
for j:=1 to 3 do
if i<j then A[i,j]:=0;
writeln(f2,'Массив A');
for i:=1 to 3 do
begin
for j:=1 to 3 do
write(f2,A[i,j]:10:3);
writeln(f2,'');
end;
close(f1); close(f2);
readln;
End.
| Контрольный пример.
| Исходные данные:
| .
| Результаты:
| .
| Задача 2. Задана запись студента с полями: фамилия, год рождения, средний балл за сессию. Начислить студенту стипендию, если известно, что за все отличные оценки начисляется стипендия в 1000 рублей, а за остальные оценки стипендия не начисляется.
| Program Lab14d;
Var
student:record
fam:string[10];
god:integer;
ball:real;
end;
stip:real;
Begin
with student do
readln(fam,god,ball);
if student.ball=5 then stip:=1000 else stip:=0;
writeln('Стипендия – ',stip:5:1,' рублей');
End.
| Контрольный пример.
| Исходные данные:
| Фамилия – Иванов
Год рождения – 1989
Средний балл – 5
| Результаты:
| Стипендия – 1000 рублей
| Дополнительное задание
1. С использованием ввода исходных данных из файла и вывода результатов в файл найти сумму всех элементов в двумерном массиве и заменить на нули элементы на главной диагонали.
2. Дан массив студентов из полей записи: фамилия, год рождения, оценки по 3 экзаменам. Найти средний балл студентов 1989 года рождения и старше, а также вычислить количество отличников и задолжников.
Контрольные вопросы
1. Что такое файл? Какие бывают виды файлов и как они обозначаются?
2. Какие процедуры применяются для связи файловой переменной с именем файла и для закрытия файла?
3. Какие процедуры применяются для открытия файла?
4. Какие процедуры применяются для ввода данных из файла?
5. Какие процедуры применяются для вывода данных в файл?
6. Что такое запись и поле?
7. Какой вид имеет описание записи и что это означает?
8. Какой вид имеет доступ к полю записи и что это означает?
9. Какой вид имеет оператор присоединения и что он означает?
10. Напишите, что означает каждая строка в вышеприведённых программах.
11. Напишите программу к одной из задач дополнительного задания.
|