Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа №8 ТКС-12а (файлы).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
461.82 Кб
Скачать

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

Программирование с использованием внешних файлов”

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

1. Теоретическая часть

1.1. Описание файлов в языке программирования Pascal.

В Паскале файлы делятся по типу информации, которая заносится в файл:

– типизированные

– текстовые

– нетипизированные

Типизированный файл содержит последовательность компонент любого заданного типа.

Нетипизированный файл содержит последовательность компонент произвольного типа.

Текстовый файл содержит набор любых символов.

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

file of тип – типизированный файл;

text – текстовый файл;

file – нетипизированный файл.

Примеры описания файловых переменных:

var

f1: file of char;

f2: file of integer;

f3: file;

t: text;

До начала работы с файлами необходимо установить связь между файловой переменной и именем физического дискового файла. Это осуществляется с помощью процедуры Assign(f,’ff’). При этом устанавливается связь между файловой переменной с именем f и физическим файлом с именем ‘ff’.

После связи файловой переменной с именем файла в программе нужно указать направление передачи данных (открыть файл). Процедура Reset(f) открывает для чтения файл, с которым связана файловая переменная f. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента. Процедура Rewrite(f) открывает для записи файл, с которым связана файловая переменная f. После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Если указанный файл уже существовал, то все данные из него уничтожаются.

После окончания работы с файлами на Паскале, они должны быть закрыты с помощью процедуры Close(f).

1.2. Чтение и запись файлов в языке программирования Pascal.

Чтение из текстового файла осуществляется с помощью процедур:

– Read(f, список переменных),

– ReadLn(f, список переменных).

Эти процедуры читают информацию из файла f в переменные. Отличие ReadLn от Read в том, что при использовании ReadLn после прочтения данных, указанных внутри скобок в списке переменных пропускаются все оставшиеся символы в данной строке.

Запись в текстовый файл осуществляется с помощью процедур:

– Write(f, список переменных),

– WriteLn(f, список переменных).

При записи учитывается формат вывода. WriteLn от Write отличается тем, что после записи всех значений из переменных записывается еще и метка конца строки (формируется законченная строка файла).

Добавление информации к концу файла осуществляется с помощью процедуры Append(f), которая открывает текстовый файл для добавления информации к его концу.

1.3 Пример составления алгоритма и программы на языке Pascal для обработки одномерных массивов с использованием внешних файлов.

Задание: Для массива вещественных чисел A(40) выполнить ввод элементов из текстового файла. Вывести на экран все элементы массива. Разделить в массиве все элементы на среднее арифметическое значение, вывести результат в текстовый файл и на экран.

Решение.

Для объявления массива A опишем в разделе Type тип массива из 40 вещественных чисел. Для обозначения количества элементов массива A введем переменную n.

Для решения задачи организуем в программе 4 процедуры:

– ввод элементов массива из файла,

– вывод элементов массива на экран,

– вывод элементов массива в файл,

– поиск среднего значения в массиве и деление всех элементов массива на среднее значение.

Процедуру ввода элементов массива из файла назовем EnterMassivFile, в списке формальных параметров укажем следующие переменные: количество элементов в массиве N и массив X. При этом в списке формальных параметров массив должен быть указан со служебным словом var, поскольку значения элементов массива изменяются в процедуре и возвращаются в основную программу. Внутри процедуры введем локальную переменную файлового типа f:text, которую свяжем с файлом с именем MassivA.txt. Для считывания данных из файла откроем его с помощью процедуры reset(f).

Процедуру вывода элементов массива на экран назовем PrintMassiv, и будем в нее передавать те же переменные: количество элементов в массиве N и массив X.

Процедуру вывода элементов массива в файл назовем PrintMassivFile, будем в нее передавать те же переменные: количество элементов в массиве N и массив X. Внутри процедуры введем локальную переменную файлового типа f:text, которую свяжем с файлом с именем ResultA.txt. Для записи данных в файл откроем его с помощью процедуры rewrite(f).

Функцию поиска среднего значения и деления на него всех элементов массива назовем ChangeMassiv, и будем в нее также передавать массив X и количество элементов в массиве N. Внутри функции будем использовать локальную переменную Sred для подсчета среднего значения. После вычисления среднего значения проверим его на равенство 0. Если условие Sred = 0 не выполнится, разделим все элементы массива A на Sred, иначе выведем на экран сообщение, что деление элементов на 0 невозможно, и не будем изменять элементы массива.

Решение задачи можно организовать также без использования подпрограмм. В этом случае, поскольку в программе используются два разных текстовых файла, необходимо описать две файловые переменные f1,f2:text.

1.3.1 Блок-схема алгоритма решения данной задачи выглядит следующим образом:

Блок схема подпрограммы EnterMassivFile

Блок схема подпрограммы PrintMassivFile

Блок схема подпрограммы PrintMassiv

Блок схема подпрограммы ChangeMassiv

Блок схема основной программы

1.3.2 Текст программы с использованием подпрограмм на языке Pascal выглядит следующим образом:

program primer81;

uses crt;

type

mas=array[1..40] of real;

var

n:byte;

A:mas;

procedure EnterMassivFile(n:byte; var X:mas);

var

i:byte;

f:text;

begin

assign(f,'MassivA.txt');

reset(f);

for i:=1 to n do read(f,A[i]);

close(f);

end;

procedure PrintMassivFile(n:byte; X:mas);

var

i:byte;

f:text;

begin

assign(f,'ResultA.txt');

rewrite(f);

for i:=1 to n do

begin

write(f,A[i]:7:2);

if i mod 10=0 then writeln(f);

end;

close(f);

end;

procedure PrintMassiv(n:byte; X:mas);

var

i:byte;

begin

for i:=1 to n do

begin

write(A[i]:7:2);

if i mod 10=0 then writeln;

end;

end;

procedure ChangeMassiv(n:byte;var X:mas);

var

Sred:real;

i:byte;

begin

Sred:=0;

for i:=1 to n do Sred:=Sred+A[i];

Sred:=Sred/n;

writeln('Srednee znachenie v massive A ', Sred:7:2);

if Sred<>0 then

for i:=1 to n do A[i]:=A[i]/Sred

else writeln('Srednee znachenie ravno 0. Delenie nevozmojno.');

end;

Begin

clrscr;

n:=40;

EnterMassivFile(n,A);

writeln('Isxodniy massiv A:');

PrintMassiv(n,A);

ChangeMassiv(n,A);

writeln('Resultat:');

PrintMassiv(n,A);

PrintMassivFile(n,A);

readkey;

end.

1.3.3 Текст программы без использования подпрограмм на языке Pascal выглядит следующим образом:

program primer82;

uses crt;

type

mas=array[1..40] of real;

var

i,n:byte;

A:mas;

Sred:real;

f1,f2:text;

begin

clrscr;

n:=40;

assign(f1,'MassivA.txt');

reset(f1);

for i:=1 to n do

read(f1,A[i]);

close(f1);

writeln('Isxodniy massiv A:');

for i:=1 to n do

begin

write(A[i]:7:2);

if i mod 10=0 then writeln;

end;

Sred:=0;

for i:=1 to n do

Sred:=Sred+A[i];

Sred:=Sred/n;

writeln('Srednee znachenie v massive A ', Sred:7:2);

if Sred<>0 then for i:=1 to n do A[i]:=A[i]/Sred

else writeln('Srednee znachenie ravno 0. Delenie nevozmojno.');

writeln('Resultat: ');

for i:=1 to n do

begin

write(A[i]:7:2);

if i mod 10=0 then writeln;

end;

assign(f2,'ResultA.txt');

rewrite(f2);

for i:=1 to n do

begin

write(f2,A[i]:7:2);

if i mod 10=0 then writeln(f2);

end;

close(f2);

readkey;

end.

1.3.4 Результаты работы программы:

Результаты с экрана

Isxodniy massiv A:

1.50 0.00 23.00 15.00 100.00 10.00 -8.20 11.00 -0.90 0.10

22.00 33.00 30.50 1.00 7.90 -94.00 30.00 5.00 -1.90 -3.00

10.00 1.00 23.00 2.00 8.00 6.00 -5.00 0.00 0.40 7.60

-3.00 2.00 -5.50 0.00 9.00 19.00 27.50 11.00 20.10 1.00

Srednee znachenie v massive A 7.90

Resultat: Kajdiy element massiva A razdelen na srednee znachenie

0.19 0.00 2.91 1.90 12.65 1.27 -1.04 1.39 -0.11 0.01

2.78 4.18 3.86 0.13 1.00 -11.89 3.80 0.63 -0.24 -0.38

1.27 0.13 2.91 0.25 1.01 0.76 -0.63 0.00 0.05 0.96

-0.38 0.25 -0.70 0.00 1.14 2.40 3.48 1.39 2.54 0.13

Файл MassivA.txt

1.5 0 23 15 100 10 -8.2 11 -0.9 0.1

22 33 30.5 1 7.9 -94 30 5 -1.9 -3

10 1 23 2 8 6 -5 0 0.4 7.6

-3 2 -5.5 0 9 19 27.5 11 20.1 1

Файл ResultA.txt

0.19 0.00 2.91 1.90 12.65 1.27 -1.04 1.39 -0.11 0.01

2.78 4.18 3.86 0.13 1.00 -11.89 3.80 0.63 -0.24 -0.38

1.27 0.13 2.91 0.25 1.01 0.76 -0.63 0.00 0.05 0.96

-0.38 0.25 -0.70 0.00 1.14 2.40 3.48 1.39 2.54 0.13