Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Типизированные файлы




Begin

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

Задача 1. Дан файл, элементами которого являются целые числа. Найти среднее арифметическое элементов файла.

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

Задание. Дополните содержание текста задачи созданием типизированного файла file.dat. Добавленные строчки программы прокомментируйте.

Program Srednee;

Uses

Crt;

Var

Kol,

Element,{переменная для хранения очередного элемента файла}

Summa {переменная для хранения суммы элементов файла}:integer;

f: file of integer;

SrAriph: real

ClrScr;

assign(f,'file.dat');{связываем файловую переменную f с физическим файлом file.dat}

reset(f);{открываем файл для чтения}

Summa:=0;{обнуление суммы}

while not Еof(f) do{просматриваем файл до конца}

begin

read(f,Element);{считываем из файла очередной элемент в переменную Element}

Inc(Kol);{увеличиваем счетчик количества элементов файла}

Inc(Summa,Element);{увеличиваем переменную Summa на Element}

end;

SrAriph:= Summa/Kol{вычисляем среднее арифметическое чисел}

write('Среднее арифметическое элементов файла равно ',SrAriph:5:2);

close(f);{закрываем файл}

readln;

End.

Задача 2. Наберите на компьютере текст программы. Сформулируйте решаемую в ней задачу. Дополните необходимыми операторами и комментарием.

Program FileString;

Uses Crt;

Var f, g: file of string;

str1, str: string;

i: integer;

Begin

ClrScr;

assign(f,'f'); rewrite(f);

assign(g,'g'); rewrite(g);

repeat

readln(str); write(f,str);

for i:=length(str) downto 1 do str1:=str1+str[i];

write(g,str1);

str1:='';

until str='';

close(f); close(g);

assign(f,'f'); reset(f);

assign(g,'g'); reset(g);

while not eof(f) do

begin

read(f,str);

writeln(str);

end;

while not eof(g) do

begin

read(g,str); writeln(str);

end;

close(f); close(g);

readln;

End.

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

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

Program TipRecord;

Uses Crt;

Type Dann=record

stag: byte;

Surname, WorkName: string;

Oklad, Year: integer;

End;

Var Spisok: file of Dann; {файл типа записи Dann}

Man: Dann; {переменная типа записи Dann для работы с файлом}

Name: string[12]; {строка для хранения имени физического файла}

Procedure VvodZap (Nomer: integer);

Begin

with Man do

begin

writeln('Введите данные ',Nomer,'-го работника');

write('Фамилия: ');

readln(Surname);

write('Год рождения:');

readln(Уear);

write('Стаж работы:');

readln(stag);

writeln('Должность:');

readln(WorkName);

write('Оклад');

readln(oklad);

write(Spisok,Man); {записать в файл созданный элемент Man}

end;

End;

Procedure FileVvod;

Var

i, count: Integer;

Begin

write('Введите имя файла данных:');

readln(Name); {имя физического файла}

assign(Spisok,Name); {связываем файловую переменную с файлом}

rewrite(Spisok); {открываем файл для записи}

write('Введите количество работников:');

readln(count);

for i:=1 to count do

VvodZap(i); {вызов процедуры ввода очередной информации в файл}

close(Spisok); {закрываем файл}

readln;

End;

Begin

ClrScr;

FileVvod;

readLn;

End.

Контрольные вопросы

1. Дать определение типизированному файлу и файловой переменной. Опишите формат файловой переменной для типизированных файлов.

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

Типизированный файл - это последовательность элементов одного типа. При последовательном обращении к файлу текущий указатель переходит от элемента к элементу.

Формат описания

TYPE <имя>=FILE OF <тип элементов>

VAR < имя файла >: <имя>

или без объявления файлового типа

VAR < имя файла >: FILE of <тип элементов>;

Допустим, мы имеем дело с файлом, в котором записываются переменные типа Word, тогда переменная файлового типа может быть введена двояко: с явным объявлением файлового типа:

Type WordFile = file of word;

Var MyFile: WordFile;

или

Var MyFile: file of word;

Приведем примеры переменных файлового типа с другими объявлениями.

Type Student = record

Name, SerName: string;

YearOld: byte;

Sessia: array [1..10] of byte;

end;

Var VarFile1: file of char;

VarFile2: file of Student;

VarFile3: file of string;

Файловые переменные имеют специфическое применение. Над ними нельзя выполнять никаких операций (присваивать значение, сравнивать и др.). Их можно использовать только для выполнения операций с файлами (чтения, записи, удаления файла и т.д.). Через файловую переменную можно получить информацию о конкретном файле (тип, параметры, имя файла и т.д.).

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

С каждым файлом можно связать понятие текущий указатель. Это неявно описанная переменная, которая указывает на конкретный элемент файла. Действия с файлами производятся поэлементно, причем в них участвует тот элемент, на который "смотрит" текущий указатель, перемещающийся в результате выполнения действия на следующий элемент.

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

Изменение имени файла производится процедурой RENAME(МуFilе, FileName);

первый аргумент которой - переменная файлового типа, а второй аргумент - строкового типа - новое имя файла, которое может быть сокращенным или полным (с указанием пути). Действие этой процедуры эквивалентно действию аналогичной процедуры DOS.

Уничтожение части файла от текущего положения до конца производится процедурой TRUNCATE(МуFilе);

Уничтожение всего файла производится процедурой ERASE(МуFilе); действие которой эквивалентно удалению файла в операционной системе DOS.

Примечание. Физические файлы на магнитных дисках и переменные файлового типа в программе на Паскале - объекты различные. Переменные файлового типа в Паскале соответствуют не только физическим файлам, но и логическим устройствам, связанным с вводом и выводом информации. Клавиатуре и экрану дисплея соответствуют файлы со стандартными именами Input и Output.

Задание. Рассмотрите предложенный ниже текст программы. Сформулируйте решенную задачу. Создайте расширенный вариант подобной задачи.

Program Files;

Uses Crt;

Var F,Fnew: file of string;

Name,NewName: string[12];

Text: string;

Ch: char;

Procedure ReadText;

Begin

repeat

write('Введите имя файла>'); readln(Name);

assign(F,Name); reset(F);

if IOresult<>0

then begin writeln('Ошибка чтения'); close(F); end;

until IOresult=0;

writeln('Содержание файла ',Name,':');

while not Eof(F) do begin readln(F,Tеxt); writeln(Tеxt); end;

close(F);

End;

Procedure EraseFile;

Begin erase(F); writeln('Файл удален');End;

Procedure ReNameFile;

Begin

write('Введите новое имя файла:');

readln(NewName); rename(F,NewName);

writeln('Файл ',Name,' переименован в файл ',NewName);

End;

Procedure CopyFile;

Begin

write('Введите имя копии файла ',Name,'>');

readln(NewName); reset(F);

assign(Fnew,NewName); rewrite(Fnew);

while not Eof(f) do

begin readln(F,Text); writeln(Fnew,Text); end;

close(F); close(F_new);

writeln('Файл',Name,' скопирован в файл ',NewName);

End;

Begin

ClrScr; readTеxt;

repeat

writeln('Удаление файла (D),переименование файла(R)');

writeln('Копирование файла (C), выход из программы (Е)');

write('Введите символ нужной операции - ');readln(ch);

case ch of

'D','d': EraseFile;

'R','r': ReNameFile;

'C','c': CopyFile;

end;

until (ch='E') or (ch='e');

read;

End.

Внимание! Следует запомнить, что процедура REWRITE обнулит файл, если файл с таким именем уже есть в рабочем каталоге, поэтому при выборе имен файлов соблюдайте осторожность.

Задание 1. Наберите предложенную для рассмотрения выше программу и дополните ее выводом на экран элементов файла (воспользуйтесь процедурой считывания из файла READ и вывода WRITE).

Задание 2. Создайте программу записи и чтения типизированного файла типа string.

 




Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 835; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.