Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Доп_задание.docx
Скачиваний:
11
Добавлен:
03.05.2015
Размер:
35.06 Кб
Скачать

Дополнительное задание «Работа с файлами»

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

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

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

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

Перед выполнением работы необходимо ознакомится с правилами описания файловых переменных и процедурами предназначенными для работы с файлами.[см. Приложения].

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

Этапы решения задачи:

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

2. Составим схему алгоритма (рис. 1)

Рис. 1 – Блок-схема к задаче примера

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;

whilenoteof(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. Даны текстовые файлы f1 и f2. Переписать с сохранением порядка следования компоненты файла f1 в файл f2, а компоненты файла f2 в файл f1. Использовать вспомогательный файл h.

  2. Дан текстовый файл f. Записать в файл g компоненты файла f в обратном порядке.

  3. Даны текстовые файлы f и g. Записать в файл h сначала компоненты файла f, затем - компоненты файла g с сохранением порядка.

  4. Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f: являющимися четными числами.

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

  6. Дан файл f, компоненты которого являются целыми числами. Никакая из компонент файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько и положительных. Используя вспомогательный файл h, переписать компоненты файла f в файл g так, чтобы в файле g: вначале шли положительные, затем отрицательные числа.

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

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

  9. Дан символьный файл f: а) подсчитать число вхождений в файл сочетаний 'ab'.

  10. Дан символьный файл f. Группы символов, разделенные пробелами и не содержащие пробелов внутри себя, будем называть словами. Удалить из файла все однобуквенные слова. Результат записать в файл g. Типизированные файлы.

  11. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах). Найти число пассажиров, имеющих более двух вещей.

  12. Прямая на плоскости задается уравнением ax+by+c=0, где a и b одновременно не равны нулю. Будем рассматривать только прямые, для которых коэффициенты a,b,c - целые числа. Пусть f - файл, содержащий коэффициенты нескольких прямых (не менее трех). Переписать из файла f в файл g коэффициенты тех прямых, которые: параллельны первой из прямых, заданной в файле f.

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

  14. Сведения об автомобиле состоят из его марки, номера и фамилии владельца. Дан файл f, содержащий сведения о нескольких автомобилях. Найти: количество автомобилей каждой марки. Найденные данные записать в файл g.

  15. Дан файл f, содержащий различные даты. Каждая дата - это число, месяц и год. Найти: год с наименьшим номером. Найденные данные записать в файл g.

  16. Дан файл f, содержащий сведения о книгах. Сведения о каждой из книг - это фамилия автора, название и год издания. Определить, имеется ли книга с названием "Информатика". Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех книгах.

  17. Дан файл f, содержащий сведения о кубиках: размер каждого кубика (длина ребра в сантиметрах), его цвет (красный, зеленый, желтый или синий) и материал (деревянный, металлический, картонный). Найти: количество кубиков каждого из перечисленных цветов.

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