Ход урока.
I. Новый материал.
Множества значений или переменных с одним общим именем называются структурированными (составными) типами. Имеется несколько способов построения составных типов, каждый из которых отличается способом обращения к отдельным компонентам и, следовательно, способом обозначения компонент, входящих в данные структурированных типов.
По способу организации и типу компонент выделяют четыре основные разновидности структурированных типов:
В задачах, которые мы рассматривали, данные поступали с клавиатуры, а результаты выводились на экран дисплея. Поэтому ни исходные данные, ни результаты не сохранялись. Всякий раз при выполнении одной и той же программы, особенно во время ее отладки, приходилось заново вводить исходные данные. А если их очень много? Тогда удобно оформить исходные данные и результаты в виде файлов, которые можно хранить на диске точно так же, как и программы.
Файл - это область памяти на внешнем носителе, в которой хранится некоторая информация.
Создание внешних файлов данных для постоянного хранения на магнитных дисках и возможность обрабатывать эти файлы в программе является эффективным средством программирования.
В языке программирования Паскаль файл представляет собой последовательность элементов одного типа (простого или сложного). В отличие от массива длина файла, т.е. количество элементов, не задается, место элемента не определяется индексом и каждый элемент становится доступным только после перебора всех предыдущих элементов. Такие файлы называют последовательными (или последовательного доступа) Файл последовательного доступа можно сравнить с магнитной лентой, на которой записаны песни. Для того, чтобы найти конкретную песню, надо перемотать кассету на начало и прослушивать песню за песней, до тех пор, пока не будет найдена нужная.
Зачем нужны файлы? Объем информации, которую можно сохранить в файле, очень велик. Он значительно больше, чем объем, который можно хранить в оперативной памяти, например, при использовании массивов.
Объявление файловой переменной в разделе описаний имеет вид: VAR <имя файла>: FILE OF <тип элемента>
Например, VAR FT: FILE OF
INTEGER;
VAR M: FILE OF CHAR;
TYPE F=FILE OF REAL ИЛИ VAR F1:FILE OF
REAL
VAR F1:F
Так как в описании указывается тип элементов, такие файлы называются типизированными. Все элементы файла пронумерованы, начиная с нуля.
Для установления связи
между файловой переменной в программе и физическим файлом на внешнем устройстве
используется процедура: ASSIGN (назначить)
Формат процедуры:
ASSIGN (имя файловой переменной,'имя файла на
диске')
assign(f1,'prog1.dat');
После установления такого соответствия все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящимся на диске с и имеющим имя prog1.dat.
Файл в каждый момент времени может находится в одном из двух состояний: либо он открыт только для записи, либо только для чтения.
Файл открывается с помощью процедуры RESET(имя файла) - для чтения. Для записи файл открывается с помощью процедуры REWRITE(имя файла). Процедура REWRITE уничтожает ранее записанную информацию в файле. При этом головка считывателя устанавливается на начало файла после чего будет записываться новая информация.
Процедура RESET так же устанавливает на начало и происходит считывание. Запись и чтение можно осуществить с помощью операторов READ, READLN,WRITE,WRITELN.
В этом случае используется такая форма записи: READ (имя файла, имя переменной)
Процедура CLOSE(закрыть) используется для закрытия файла, когда все действия в нем закончены CLOSE(имя файла)
Например,CLOSE(F)
Стандартная функция EOF(имя файла) используется для определения, достигнут ли конец файла (принимает значение ложь или истина). Элементы в файле хранятся по строкам. Для определения конца строки файла используется оператор цикла WHILE NOT EOLN(имя файла) DO, а для перехода на новую строку файла - оператор readln(имя файла).
Пример 1. Пусть на диске
имеется файл с именем d1.dat, в котором записаны данные:
0.54 1.7 4.56
0.2
1.32 1.524 18 0.98
5.6 7.7
Необходимо сделать эти данные доступными программе и вычистить их сумму.
Решение. Программа находится на диске c:\tp7\f1.pas
program fff1;
var
f1:text;l1:integer;
x,sum:real;
begin
sum:=0; l1:=1;
assign(f1,'c:d1.dat');
reset(f1);
while not eof(f1) do
begin
while not eoln(f1) do
begin read(f1,x);
sum:=sum+x;
end;
readln(f1);
end;
write('сумма=',sum:8:3);
close(f1);
end.
Ответ: 42.124
Пример 2. Пусть переменная a и b получают следующие значения: a=510, b=16.2. Требуется записать в файл с именем d2.dan строку в виде: a=510 b=16.2
Решение. Программа находится на диске c:\ tp7\f2.pas
program fff2;
var
f2:text;l2,a:integer;
b:real;
begin
l2:=1;
assign(f2,'c:d2.dat');
a:=510;b:=16.2;
rewrite(f2);
write(f2,'a=',a:3,' ','b=',b:4:1);
close(f2);
end.
Пример 3. Имеется
ведомость по результатам экзамена в группе.Будем считать его входным файлом с
именем dan.pas:
-------------------------
предмет "физика"
группа
т-12
-------------------------
Алексеев С.А. :5
Вертышев А.Ю. :4
Колдаев В.Д. :5
Петрова Н.Д. :4
Федоренко Р.Ф. :3
Шаронин А.В.
:4
Cоставить программу создания выходного файла с именем rez.pas, в котором
следует записать исходную ведомость и вычисленный средний
балл:
***************************
средний балл в группе 4.17
количество
учащихся 6
Решение. Программа находится на диске c:\ tp7\f3.pas
program fff3;
var
finp,fout:text;l1,l2,n,c:integer;
sr,sum:real;smb:char;
begin
l1:=1;assign(finp,'c:dan.pas');
l2:=1;
assign(fout,'c:rez.pas');
reset(finp);
rewrite(fout);
n:=0;sum:=0;
while
not eof(finp) do
begin
while not eoln(finp)
do
begin
read(finp,smb);
write(fout,smb);
if smb=':' then
begin
read(finp,c);
write(fout,c:3);
sum:=sum+c;
n:=n+1;
end;
end;
readln(finp);
writeln(fout);
end;
sr:=sum/n;
writeln(fout,'***************************');
writeln(fout,'средний
балл в группе',sr:5:2);
writeln(fout,'количество
учащихся',n:4);
writeln('вычисления закончены,',' результаты смотрите в файле
rez.pas');
close(fout);
close(finp);
end.
ОТВЕТ:
-------------------------
предмет "физика"
группа
т-12
-------------------------
Алексеев С.А. : 5
Вертышев А.Ю. : 4
Колдаев В.Д. : 5
Петрова Н.Д. : 4
Федоренко Р.Ф. : 3
Шаронин
А.В. : 4
***************************
средний балл в группе 4.17
количество учащихся 6
Пример 4. В файле
dan1.dat записаны целые числа в нескольких строках.
3 5 2
4 9 1
1 7 1
6 2 8
Вычислить сумму элементов каждой строки и результаты вместе с исходными данными поместить в файл с именем dan2.dat
Решение. Программа находится на диске c:\ tp7\f4.pas
program fff4;
var
f1,f2:text;lin1,lin2,x,sum:integer;
begin
sum:=0;
assign(f1,'c:dan1.dat');
assign(f2,'c:dan2.dat');
reset(f1);
rewrite(f2);
sum:=0;
while not eof(f1) do
begin
sum:=0;
while not eoln(f1) do
begin
read(f1,x);
write(f2,x:3);
sum:=sum+x;
end;
writeln(f2,' ':3,'сумма',sum:4);
readln(f1);
end;
writeln('Результат находится в файле dan2.dat');
close(f1);
close(f2);
end.
Ответ:
3 5 2 сумма 10
4 9 1 сумма
14
1 7 1 сумма 9
6 2 8 сумма 16
II. Практическая работа на ЭВМ.
Вызвать с диска программы примеров 1, 2, 3, 4, запустить на выполнение, получить результаты. Разобраться, как работает программа. Результаты помесить в тетрадь.
III. Домашнее задание.
Задача. Создайте файл кom1.dat, в котором хранится следующая информация:
КОРВЕТ : 48
УКНЦ : 96
ЯМАХА MSX-1 : 16
ЯМАХА MSX-2 : 128
БК-0010 : 16
IBM PC/XT : 256
IBM PC/AT : 512
Где указана видеопамять в
кбайт. Необходимо создать файл с именем Ком2.dat, в котором должна быть
представлена следующая информация: Заголовок таблицы, вся исходная информация,
объем видеопамяти в Кбайт и в мбайт. Таблица должна иметь следующий
вид:
НАЗВАНИЕ ЭВМ ВИДЕОПАМЯТЬ ВИДЕОПАМЯТЬ
(КБАЙТ) (МБАЙТ)
--------------------------------------------------------------
КОРВЕТ :
48 ?
УКНЦ : 96 ?
ЯМАХА MSX-1 : 16 ?
ЯМАХА MSX-2 : 128 ?
БК-0010: 16
?
IBM PC/XT: 256 ?
IBM PC/AT: 512 ?