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


Работа с файлами

Теоретический материал Справочник по процедурам и функциям


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

Общие сведения

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

Пример

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

Этапы решения задачи:
  • Будем считывать файл f построчно и перевертывая строки будем записывать их в массив, далее создадим файл и заполним его строками из массива меняя порядок строк на обратный.
  • Составим блок -схему программы.

  • Содержимое самих блоков не должно вызвать больших затруднений в смысловом понимании, главное здесь это - техническая реализации на языке Паскаль, поэтому запишем реализации каждого блока на Паскале.
    а) "Считываем строки из файла F" 
          assign(f,'input.dat'); 
            reset(f); 
           while not eof(f) do 
         begin readln(f,st); 
        end; 
    б) "Переворачиваем строки и записываем их в массив" 
          st1:=''; 
           for i:= 1 to length(st) do 
            st1:= st[i]+st1; 
           m[k]:=st1; 
          k:=k+1; 
    в) "Записываем в файл g" 
          assign(g,'output.dat'); 
           rewrite(g); 
          for i:= 1 to k do writeln(g,m[i]); 
        3. Программа целиком 
        program example; 
          var 
           f,g:text; 
            m:array[1..100] of string; 
           k,i:integer; 
        begin 
           assign(f,'input.dat'); 
            reset(f); 
             k:=0; 
              while not eof(f) do 
        begin readln(f,st); 
          k:=k+1; 
           st1:=''; 
             for i:= 1 to length(st) do st1:= st[i]+st1;
              m[k]:=st1; 
    end; 
           assign(g,'output.dat'); 
            rewrite(g);
           for i:= 1 to k do writeln(g,m[i]); 
    end. 
    

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

    1. Что такое файл? Какие существуют виды файлов?
    2. Какими стандартными процедурами и функциями располагает Borland Pascal для работы с файлами?
    3. Каково должно быть содержание программы по созданию файла и его корректировки (замена элементов, добавление элементов, удаление элементов)?
    4. Каковы особенности работы с текстовыми файлами?
    5. Каковы особенности работы с типизированными файлами?
    6. Как подсчитать число строк в текстовом файле?

    Задания

    Работа с текстовыми файлами:
    1. Даны текстовые файлы f1 и f2. Переписать с сохранением порядка следования компоненты файла f1 в файл f2, а компоненты файла f2 в файл f1. Использовать вспомогательный файл h.
    2. Дан текстовый файл f. Записать в файл g компоненты файла f в обратном порядке.
    3. Даны текстовые файлы f и g. Записать в файл h сначала компоненты файла f, затем - компоненты файла g с сохранением порядка.
    4. Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f: а) являющимися четными числами; б) делящиеся на 3 и не делящиеся на 7; в) являющимися точными квадратами.
    5. Дан файл f, компоненты которого являются целыми числами. Получить файл g, образованный из файла f исключением повторных вхождений одного и того же числа.
    6. Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g:
      a) не было двух соседних чисел с одинаковым знаком;
      b) вначале шли положительные, затем отрицательные числа;
      c) числа шли в следующем порядке: два положительных, два отрицательных, два положительных, два отрицательных и т.д. (предполагается, что число компонент в файле f делится на 4).
    7. Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Числа в файле идут в следующем порядке: десять положительных, десять отрицательных, десять положительных, десять отрицательных и т.д. Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: а) пять положительных, пять отрицательных, пять положительных, пять отрицательных и т.д.; б) двадцать положительных, двадцать отрицательных, двадцать положительных, двадцать отрицательных и т.д. (предполагается, что число компонент в файле f делится на 40).
    8. Дан файл f, компоненты которого являются целыми числами. Записать в файл g наибольшее значение первых пяти компонент файла f, затем - следующих пяти компонент и т.д. Если в последней группе окажется менее пяти компонент, то последняя компонента файла g должна быть равна наибольшей из компонент файла f, образующих последнюю (неполную) группу.
    9. Дан символьный файл f: а) подсчитать число вхождений в файл сочетаний 'ab'; б) определить входит ли в файл сочетание 'abcdefgh'; в) подсчитать число вхождений в файл каждой из букв 'a','b','c','d', 'e','f' и вывести результат в виде таблицы
      a --> Na b --> Nb c --> Nc
      d --> Nd e --> Ne f --> Nf
      где Na, Nb, Nc, Nd, Ne, Nf - числа вхождений соответствующих букв.
    10. Дан символьный файл f. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Удалить из файла все однобуквенные слова и лишние пробелы. Результат записать в файл g. Типизированные файлы
    11. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах).
      a) Найти багаж, средний вес одной вещи в котором отличается не более, чем на 0.3 кг от общего среднего веса одной вещи.
      b) Найти число пассажиров, имеющих более двух вещей и число пассажиров, количество вещей которых превосходит среднее число вещей.
      c) Определить, имеются ли два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0,5 кг.
      d) Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров и по числу вещей, и по весу.
      e) Выяснить, имеется ли пассажир, багаж которого состоит из одной вещи весом менее 30 кг.
    12. Прямая на плоскости задается уравнением ax+by+c=0, где a и b одновременно не равны нулю. Будем рассматривать только прямые, для которых коэффициенты a,b,c - целые числа. Пусть f - файл, содержащий коэффициенты нескольких прямых (не менее трех). Переписать из файла f в файл g коэффициенты тех прямых, которые:
      a) параллельны первой из прямых, заданной в файле f;
      b) указаны в пункте а), но дополнительно требуется, чтобы все прямые были различны;
      c) пересекают первую из прямых, заданных в файле f;
      d) указаны в пункте b), но дополнительно требуется, чтобы среди прямых не было параллельных.
    13. Условие предыдущей задачи сохраняется. Требуется получить в файле g коэффициенты всех различных прямых файла f.
    14. Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится. Дан файл f, содержащий сведения об учениках школы:
      a) выяснить, имеются ли в школе однофамильцы;
      b) выяснить, имеются ли однофамильцы в каких-либо параллельных классах;
      c) выяснить, имеются ли однофамильцы в каком-нибудь классе;
      d) ответить на вопросы а)-в), но в отношении учеников, у которых совпадают и имя, и фамилия;
      e) выяснить, в каких классах насчитывается более 35 учащихся;
      f) выяснить на сколько человек в восьмых классах больше, чем в десятых;
      g) собрать в файле g сведения об учениках 9-х и 10-х классов, поместив вначале сведения об учениках класса 9а, затем 9б и т.д., затем 10а, 10б и т.д.
    15. Дан файл f, содержащий те же сведения об учениках, что и в предыдущей задаче, и дополнительно отметки, полученные учениками в последней четверти.
      a) выяснить, сколько учеников школы не имеют отметок ниже четырех;
      b) собрать в файле g сведения о лучших учениках школы, т.е. об учениках, не имеющих отметок ниже четырех и по сумме баллов не уступающих другим ученикам своего и параллельных классов.
    16. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти: а) фамилии владельцев и номера автомобилей данной марки; б) количество автомобилей каждой марки. Найденные данные записать в файл g.
    17. Дан файл f, содержащий различные даты. Каждая дата - это число, месяц и год. Найти: а) год с наименьшим номером; б) все весенние даты; в) самую позднюю дату. Найденные данные записать в файл g.
    18. Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг - это фамилия автора, название и год издания. 1) Найти названия книг данного автора, изданных с 1960 г. 2) Определить, имеется ли книга с названием "Информатика". Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех книгах.
    19. Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, зеленый, желтый или синий) и материал (деревянный, металлический, картонный). Найти: а) количество кубиков каждого из перечисленных цветов и их суммарный объем; б) количество деревянных кубиков с ребром 3 см и количество металлических кубиков с ребром, большим 5 см.
    20. Дан файл f, содержащий сведения о веществах: указывается название вещества, его удельный вес и проводимость (проводник, полупроводник, изолятор). 1) Найти удельные веса и названия всех полупроводников. 2) Выбрать данные о проводниках и упорядочить их по убыванию удельных весов.
    Задачи повышенной сложности
    1. Написать программу для сжатия и распаковки фалов: а) текстового, б) типизированного (file of string), в) нетипизированного.
    2. Дан текстовый фал, содержащий программу на языке Паскаль. Проверить эту программу на соответствие числа открывающихся и закрывающихся скобок (любых).
    3. Дан нетипизированный файл. Записать фал "в обратном порядке" (с изменением порядка байтов).

    Назад
    На главную
        Учебник по языку Pascal          Лабораторные работы по программированию          Справочник




    Нет комментариев.



    Оставить комментарий:
    Ваше Имя:
    Email:
    Антибот: *  
    Ваш комментарий: