Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документ Microsoft Word (7).doc
Скачиваний:
8
Добавлен:
25.08.2019
Размер:
67.07 Кб
Скачать

3.3. Работа с текстовыми файлами

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

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

program num_positive_2;

const n = 10;

var

f_in, f_out : text;

a : array [1 .. n] of integer;

i, imax, imin, ibeg, iend, count : integer;

begin

assign (f_in, 'E:\input.txt');

reset (f_in);

assign (f_out, 'E:\output.txt');

rewrite (f_out);

for i :=1 to n do read (f_in, a[i] );

imax :=1; imin :=1;

for i:= 1 to n do begin

if a [i] > a [imax] then imax := i;

if a [i] < a [imin] then imin := i;

end;

if imax < imin then ibeg := imax else ibeg := imin;

if imax < imin then iend := imin else iend := imax;

count := 0;

for i := ibeg + 1 to iend - 1 do

if a[i] > 0 then inc(count);

writeln(f_out, ' количество положительных:', count);

close(f_out);

end.

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

1. Объявить файловую переменную (оператор 1).

2. Связать ее с файлом на диске (операторы 2 и 4).

3. Открыть файл для чтения (оператор 3) или записи (оператор 5).

4. Выполнить операции ввода-вывода (операторы б и 7).

5. Закрыть файл (оператор 8).

В этой программе объявляются две переменные и стандартного типа «текстовый файл». Процедура связывает эти переменные с файлами на диске, путь к которым задается с помощью строк символов. Если полный путь не указан, предполагается, что файл находится в текущем каталоге. Процедура открывает файл для чтения, а — для записи. Если файл, который требуется открыть для записи, существует, он стирается и создается заново.

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

При вводе из файла и выводе в файл используются процедуры , ,

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

Пример. 3.2. Написать программу, которая «сжимает» целочисленный массив из 10 элементов, удаляя из него элементы, меньшие заданной величины. Освободившиеся в конце массива элементы заполнить нулями.

Исходный массив:

6 -8 15 9 -1 3 5 -10 12 2

Допустим, требуется удалить из него все элементы, значение которых меньше 5. Результат должен иметь вид

6 15 9 5 12 0 0 0 0 0

Исходными данными являются массив и заданное число, результатом - преобразованный массив.

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

Рис. 3.2.Сжатие с использованием дополнительного массива

Обнуление «хвоста» массива происходит естественным образом, поскольку в Паскале глобальные переменные обнуляются.

Однако для массивов большой размерности выделение двойного объема памяти может оказаться слишком расточительным. Поэтому далее приводится вариант программы, в

которой преобразование массива выполняется «на месте».

Алгоритм работы этой программы выглядит следующим образом:

  1. Просматривая массив, определить номер самого первого из удаляемых элементов.

  2. Если таковой есть, сдвигать каждый последующий элемент массива на первое «свободное» место, обнуляя оставшуюся часть массива.

Иллюстрация алгоритма приведена на рис. 3.3.

Рис. 3.3. Сжатие массива «на месте»

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

Для тестирования этой программы попробуйте использовать несколько значений переменной x – таких, чтобы из массива:

▪ не был удален ни один элемент;

▪ были удалены все элементы;

▪ была удалена часть элементов.