4778

Файлы и задачи их обработки

Лабораторная работа

Информатика, кибернетика и программирование

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

Русский

2012-11-26

64 KB

53 чел.

Файлы и задачи их обработки

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

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

Задание:  Предварительно изучив лекционный и теоретический материал, выполнить задания, изложенные в разделе Ход занятия.

Литература:

1. М.С. Львов, А.В.Спиваковский, С.В.Белоусова. Основы программирования на языке Паскаль. Херсон: МИБ, 1997.- 153 с.

2. В.М.Заварыкин, В.Г.Житомирский, М.П.Лапчик. Основы информатики и вычислительной техники. М.: Просвещение, 1989.- 207с.

3. Конспект лекций.

Теоретический материал

Файлы. Управление файлами.

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

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

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

Над файлами можно выполнять два явных вида действий:

1.Просмотр (чтение) файла.

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

Файлы, с которыми работает программа, должны быть описаны в программе. Часть файлов (представляющих собой физические устройства) имеет в операционной системе стандартные имена. Например, для чтения данных с клавиатуры и вывода результатов на экран монитора мы пользуемся стандартными файлами Input и Output. Файл - принтер имеет имя Prn:

Имена нестандартных файлов, используемых в программе, необходимо описывать в разделе переменных. Описание файлового типа соответствует диаграмме:

 

<Имя типа> = File of  <тип компоненты>

 

Файл, компоненты которого являются символами, называется текстовым и имеет стандартный тип Text:

Примеры:

Type

ExtClass = File of Person;

CardList = File of Integer;

    

Var

F : Text;

Data : File of real;

List1, List2 : CardList;

Class10A, Class10B : ExtClass;

Для работы с нестандартными файлами имя файла должно быть отождествлено с реально существующим объектом - внешним устройством. Для отождествления внутреннего имени файла со внешним именем используется процедура Assign.

Assign(< внутреннее имя >, < 'внешнее имя'>).

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

  •  Процедура Rewrite(<имя файла>) - открывает файл для записи. Если файл ранее существовал, все данные, хранившиеся в нем, уничтожаются. Файл готов для записи первой компоненты.
  •  Процедура Reset(<имя файла>) - открывает файл для чтения. Файл готов для чтения из него первой компоненты.
  •  По окончании работы с файлом (на запись) он должен быть закрыт. Для этого используется процедура Close(<имя файла>). Эта процедура выполняет все необходимые машинные манипуляции, обеспечивающие хранение данных в файле.

Для обмена данными с файлами используют процедуры Read и Writе.

  •  Процедура Read(<имя файла>, <список ввода>) читает данные из файла (по умолчанию имя файла - Input). Список ввода - это список переменных.
  •  Процедура Write(<имя файла>, <список вывода>) записывает данные в файл (по умолчанию имя файла - Output). Список вывода - это список выражений.

Если F - файл типа Text, то в списке ввода/вывода допустимы переменные/выражения типа Integer, Real, Char, String[N]. В других случаях типы всех компонент списка должны совпадать с типом компоненты файла. При работе с файлами применяют стандартные логические функции:

  •  Eof(F) (end of file) - стандартная функция - признак конца файла. Если файла F исчерпан, то Eof(F) = True, в противном случае Eof(F) = False.
  •  Eoln(F) (End of line) - стандартная функция - признак конца строки текстового файла. Если строка текстового файла F исчерпана, то Eoln(F) = True, в противном случае Eoln(F) = False. Функция Eoln определена только для файлов типа Text.

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

Пример 1  Программа формирования файла как выборки из компонент другого файла.

Пусть F - файл записей вида (поле ключа, поле данных). Требуется сформировать файл G, содержащий те компоненты F, ключи которых удовлетворяют условию: значение ключа - целое число из интервала ]Min, Max[.

Program FileForm;

    Type Component = Record

              Key: Integer; { поле ключа }

              Data: String[20] { поле данных}

            End;

OurFile = File of Component;

     

Var F, G : OurFile;

Max, Min : Integer;

X: Component;

Begin

    Read(Max, Min);

    Assign(F, 'D:InpFile.dat');   {определено значение F }

    Assign(G, 'D:OutFile.dat');   {определено значение G }

    Reset(F);     {файл F открыт для чтения}

    Rewrite(G);     {файл G открыт для записи}

    While not(Eof(F)) do begin   {цикл чтения F - записи G}

      Read(F, X);  

      If (X.Key < Max) and (X.Key > Min)  then Write(G, X)

     end;

    Close(G)     {файл G закрыт}

   End;

Основные задачи обработки файлов.

Задача 1. Добавление элемента к файлу. Дан файл F и элемент X типа Component. Расширить F, включив в него компоненту X с сохранением упорядоченности.

Вот, наверное, единственно возможное решение:

  1.  Переписывать покомпонентно F в новый файл G до тех пор, пока F^.Key < X.Key ;
  2.  Записать X в G;
  3.  Переписать "хвост" файла F в G;
  4.  Переименовать G в F.

Задача 2. Удаление элемента из файла. Дан файл F и число K - значение ключа удаляемых элементов. Сократить F, удалив из него все компоненты с ключом K.

Решение аналогично решению задачи 1:

Переписывать покомпонентно F в новый файл G до тех пор, пока F^.Key < X.Key ;

Пока F^.Key = K читать F;

Переписать "хвост" файла F в G;

Переименовать G в F.

Задача 3. Слияние файлов. Даны файлы F и G. Требуется сформировать файл H, содержащий все компоненты как F, так и G.

Алгоритм состоит в последовательном и поочередном просмотре файлов F и G и записи очередной компоненты в H. Очередность определяется сравнением значений ключей компонент F и G

Procedure FileMerge(var F, G, H: OurFile);

         Var X, Y : Component;

                Flag : Boolean;

Procedure Step(var U:OurFile; var A, B:Component);

     begin

       Write(H, A);

          If Eof(U)

            then begin Write(H, B); Flag := False end

            else Read(U, A)

     end;

Procedure AppendTail(var U: Ourfile);

       Var A: Component;

       Begin

          While not(Eof(U)) do begin

          Read(U, A); Write(H, A)

         end

       end;




   Begin

      Reset(F); Reset(G); Rewrite(H);

      Flag := True;

      Read(F, X); Read(G, Y);

      While Flag do

        If X.Key < Y.Key

          then Step(F, X, Y)

          else Step(G, Y, X);

      AppendTail(F);

      AppendTail(G);

      Close(H)

  End.

Задача корректировки файла.

Задача корректировки файла является одной из основных задач обработки файлов. Рассмотрим ее формулировку:

Исходные данные задачи - корректируемый файл F, файл корректировок G. Результат - откорректированный файл H.  Будем считать, что файл F имеет тип OurFile. Тогда файл H имеет тот же тип. Файл корректировок G состоит из записей с вариантами:

Type

      CorСomponent = record

    Key: Integer;

job: (Include, Change, Exclude); {включить, изменить, исключить}

Case job of

 Include, Change: Data: String[20];  Exclude: ()

end

End;

       CorFile = File of CorComponent;

Var G : CorFile;

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

Файл F предполагается упорядоченным (по ключу), а файл G, вообще говоря, нет. Результатом должен быть упорядоченный откорректированный файл H.

Решение задачи обычно содержит два этапа:

а) Сортировка файла корректировок G по ключу;

б) Обобщенное слияние файлов F, G в H.

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

Ход занятия.

Задание 1. Реализовать программу примера 1 для текстовых файлов F и G.

Задание 2. Реализовать процедуру преобразования текстового файла в структурированный файл примера 1.  

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

Задание 4. Составить процедуру удаления из текстового файла записи с данной фамилией абонента.

Содержание и требования к оформлению протокола. Протокол занятия должен содержать условия и программу решения заданий 1-4.

Вопросы для самоконтроля.

  1.   Сформулируйте понятие последовательного файла
  2.  Сформулируйте понятие текстового файла.
  3.  Опишите операторы открытия файла для чтения и записи.
  4.  Опишите операторы чтения и записи для файлов.
  5.  Опишите функцию – признак конца файла.
  6.  Опишите функцию – признак конца строки текстового файла.
  7.  Опишите оператор, связывающий программное и внешнее имя файла.
  8.  Перечислите основные задачи обработки файлов.  
  9.  Сформулируйте задачу корректировки файла.

Задачи для самостоятельного решения.

1.Разработайте программу Добавление элемента к файлу.

2.Разработайте программу Удаление элемента из файла.

3.Разработайте программу Пересечение файлов.

4.Разработайте программу Вычитание файлов.

5.Разработайте программу Корректировка файлов.

6.Разработайте программу корректировки упорядоченных файлов, в которой производится изменение значений ключевых полей.  Файл корректировок содержит пары

< старый ключ, новый ключ >.

7.Реализуйте улучшение a) алгоритма сортировки слиянием.

8.Реализуйте улучшение в) алгоритма сортировки - сортировку естественным слиянием.

Задания для зачетной работы.

  1.  Опишите тип записи - клетки расписания занятий на факультете для своей специальности и курса. Сформируйте файл двухнедельного расписания для своей подгруппы. Разработайте программу, которая определяет количество лекционных, практических и лабораторных занятий в двухнедельном цикле для своей подгруппы по указанию дисциплины. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения о студенте группы, необходимые декану факультета. Сформируйте файл студентов своей подгруппы. Разработайте программу, которая определяет состояние успеваемости в подгруппе. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - строчку зачетной книжки (экзаменационная часть). Сформируйте файл экзаменов, сданных Вами. Разработайте программу, которая определяет средний балл, составляет список экзаменаторов и по номеру семестра распечатывает результаты Вашей сессии. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - строчку зачетной книжки (зачетная часть). Сформируйте файл зачетов, сданных Вами. Разработайте программу, которая определяет дни, когда Вы сдавали по два и более зачетов. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения о книге (например, по информатике). Сформируйте файл книг, необходимых преподавателю информатики. Составьте программу, которая подбирает книги для курса, номер которого вводится, печатает имена их авторов и год издания. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения о товаре в магазине. Сформируйте файл товаров, имеющихся в магазине. Разработайте программу корректировки файла товаров и определения выручку магазина к данному моменту времени. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

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

  1.  Опишите тип записи - сведения о клиентах Вашей фирмы. Сформируйте файл клиентов фирмы. Разработайте программу корректировки файла клиентов и определения всех клиентов, получивших услуги фирмы к данному моменту времени. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения Ваших доходах и расходах. Сформируйте файл доходов - расходов. Разработайте программу корректировки этого файла. Разработайте программу получения сведений о расходах. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения о служащих Вашей фирмы. Сформируйте файл служащих фирмы. Разработайте программу корректировки файла служащих и определения служащих, которые родились в данный интервал времени. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи  - сведения о пациентах поликлиники. Сформируйте файл пациентов поликлиники. Разработайте программу корректировки этого файла. Разработайте программу получения сведений о пациентах с данным заболеванием. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи  - сведения Ваших доходах и расходах. Сформируйте файл доходов - расходов. Разработайте программу корректировки этого файла. Разработайте программу получения сведений о доходах. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи – студенческий билет. Сформируйте файл студентов, родившихся в данном месяце. Разработайте программу, которая определяет месяц, в котором родилось наибольшее количество студентов. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.

  1.  Опишите тип записи - сведения о студенте группы, необходимые преподавателю дисциплины. Сформируйте файл студентов своей подгруппы. Разработайте программу, которая определяет состояние успеваемости в подгруппе по данной дисциплине. Расширьте возможности Вашей программы другими процедурами обработки файлов по Вашему выбору.


 

А также другие работы, которые могут Вас заинтересовать

78178. Разработка программ с использованием Unit 61 KB
  Модуль – программная единица, текст которой компилируется независимо (автономно). Структура модуля позволяет использовать его как своеобразную библиотеку описаний. Модули являются достаточно гибким и удобным инструментальным средством при разработке больших программах комплексов рамках совместной технологии разработки программного обеспечения
78179. Разработка программ обработки строк, множеств и записей 192 KB
  Количество символов в строке длина строки может динамически изменяться от 0 до 255. Для определения данных строкового типа используется идентификатор String за которым следует заключенное в квадратные скобки значение максимально допустимой длины строки данного типа. Если это значение не указывается то по умолчанию длина строки равна 255 байт. Формат описания строкового типа Type имя типа...
78180. Разработка программ с использованием методов сортировки 77 KB
  Изучить основные приемы программирования по написанию программ с использованием сортировок включением, выбором и обменных сортировок. Согласно своему варианту разработать программу с применением одного из методов сортировки массивов.
78181. Разработка рекурсивных алгоритмов и программ 115.5 KB
  Задачи для индивидуального решения Вычислить значение выражения используя рекурсивный метод: y= Для данного N вычислить значение выражения используя рекурсию: P= Написать программу с рекурсивной функцией вычисляющей разность элементов одномерного массива. Написать рекурсивную функцию сложения целых чисел двумерного массива. Написать рекурсивную процедуру которая считывает вводимые с клавиатуры числа до тех пор пока не будет обнаружен нуль. Написать рекурсивную процедуру которая считывает вводимые с клавиатуры числа до тех пор...
78182. Разработка алгоритмов и программ с подключением модулей CRT, DOS 83.5 KB
  Изучить основные приемы программирования по написанию программ, обрабатывающих прерывания, проверяющих статус дисков, управляющих программной средой, организующих работу с каталогами и их элементами реализующих процедуры и функции стандартного модуля DOS.
78183. Разработка алгоритмов и программ с подключением модуля GRAPH 81.5 KB
  Получить индивидуальное задание у преподавателя и разобрать программу в соответствии с поставленной задачей. Показать работающую программу преподавателю. Индивидуальные задания: Создайте программу вывода изображений двух туч. Создайте программу вывода на экран текстовой информации в форме бегущей строки...
78184. Разработка алгоритмов и программ с анализом организации данных 89.5 KB
  Индивидуальные задания Постройте с помощью массива стек из 6 строковых элементов. Разместите в стеке шесть элементов: ‘nme’ ‘fio’ ‘ves’ ‘ge’ ‘rost’ ‘dlin’. Удалите из стека два элемента ‘dlin’ и ‘fio’ и добавьте новый элемент ‘size’. После этого добавьте в список шесть элементов 1357911 затем найдите указатель на элемент 9 и удалите этот элемент.
78185. Разработка алгоритмов и программ с использованием указателей 75 KB
  Организация динамической памяти и структур данных. Получить индивидуальное задание у преподавателя и разобрать программу с использованием выделения динамической памяти и создания указателей. Использовать динамическое выделение памяти. Использовать динамическое выделение памяти.
78186. Разработка программ обработки одномерных массивов 80.5 KB
  В качестве элементов массива можно использовать и любой другой ранее описанный тип поэтому вполне правомерно существование массивов записей массивов указателей массивов строк массивов и т. Элементами массива могут быть данные любого типа включая структурированные. Тип элементов массива называется базовым. Особенностью языка Паскаль является то что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.