ТЕМА: "ФАЙЛОВЫЙ ТИП ДАННЫХ"

Ход урока.

I. Новый материал.

Множества значений или переменных с одним общим именем называются структурированными (составными) типами. Имеется несколько способов построения составных типов, каждый из которых отличается способом обращения к отдельным компонентам и, следовательно, способом обозначения компонент, входящих в данные структурированных типов.

По способу организации и типу компонент выделяют четыре основные разновидности структурированных типов:

  1. регулярный тип (массивы);
  2. комбинированный тип (записи);
  3. файловый тип (файлы);
  4. множественный тип (множества).

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

Файл - это область памяти на внешнем носителе, в которой хранится некоторая информация.

Создание внешних файлов данных для постоянного хранения на магнитных дисках и возможность обрабатывать эти файлы в программе является эффективным средством программирования.

В языке программирования Паскаль файл представляет собой последовательность элементов одного типа (простого или сложного). В отличие от массива длина файла, т.е. количество элементов, не задается, место элемента не определяется индексом и каждый элемент становится доступным только после перебора всех предыдущих элементов. Такие файлы называют последовательными (или последовательного доступа) Файл последовательного доступа можно сравнить с магнитной лентой, на которой записаны песни. Для того, чтобы найти конкретную песню, надо перемотать кассету на начало и прослушивать песню за песней, до тех пор, пока не будет найдена нужная.

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

Объявление файловой переменной в разделе описаний имеет вид: 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 ?

Hosted by uCoz

к оглавлению     на домашнюю