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

Текстовыми файлами [Л1, стр. 70-74] называются файлы, состоящие из строк символов ASCII. Строки отделяются друг от друга символами “конец строки”, т.е. при вводе данных в файл с клавиатуры нужно нажимать клавишу “ENTER” для ввода каждой компоненты данных. В программе текстовый файл может быть описан в разделе переменных, например, так:

var f: text;

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

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

assign(f, ‘ff.dat’);

где f- имя файловой переменной в Pascal-программе, а ff.dat - соответствующее ему имя файла на магнитном диске.

В отличие от массива, количество компонент в файле не фиксировано, место компоненты не определяется индексами.

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

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

reset(f); – открыть файл для чтения

rewrite(f); - открыть файл для записи

где f - имя файловой переменной в Pascal-программе.

Для чтения (ввода данных) из файла и записи (вывода данных) в файл используются следующие процедуры:

readln(f); – прочитать данные из файла с именем f;

writeln(f); – записать данные в файл с именем f.

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

Close(f);

Пример 21. Вычислить таблицу значений функции:

yi=xi2 , если xi ≤ a

yi=xi+1, если xi > a ( i=1, 2, …, n) (n≤10)

Пусть исходные данные (выбранные произвольно) размещаются в файле с именем fread.dat и пусть они принимают следующие значения:

n =5; a =2.5; x={0.5, 1.2, 2.5, 3.2, 3.5},

где n – количество элементов массива, x – массив, состоящий из n элементов, т.е. x={x1,x2,…,xn}.

Результаты вычислений поместим в файл с именем fwrite.dat

Программа

program prim21; {заголовок программы}

var f1, f2 : text; {описание файловых переменных f1 и f2}

x, y : array[1..10] of real; {описание массивов}

i, n : integer; {описание переменных}

a : real;

begin

assign(f1,'fread.dat'); {связать f1 с именем файла на диске}

reset(f1); {открыть файл f1 для ввода данных}

read(f1,n); {ввод из файла f1 значения n}

read(f1,a); {ввод из файла f1 значения a}

for i:=1 to n do

read(f1,x[i]); {ввод из файла f1 массива x}

close(f1); {закрыть файл f1}

assign(f2,'fwrite.dat'); {связать f2 с именем файла на диске}

rewrite(f2); {открыть файл f2 для записи результатов}

for i:=1 to n do

if x[i]<=a then y[i]:=x[i]*x[i] else y[i]:=x[i]+1;

writeln(f2,'Таблица y(x)');

writeln(f2,' x y ');

for i:=1 to n do

writeln(f2,x[i]:6:3,' ',y[i]:6:3); {вывод результатов в файл f2}

close(f2); {закрыть файл f2}

end.

Файл, содержащий Файл, содержащий

исходные данные (fread.dat): результаты вычислений(fwrite.dat):

5 n Таблица y(x)

2.5 a x y

0.5 x1 0.500 0.250

1.2 x2 1.200 1.440

2.5 x3 2.500 6.250

3.2 x4 3.200 4.200

3.5 x5 3.500 4.500

Функции в языке Pascal

Функции в языке Pascal - это программные единицы (подпрограммы), предназначенные для вычисления значения функции одной или нескольких переменных [Л1, стр. 64].

Они могут помещаться в рабочей программе или в библиотеке (модуле).

Заголовок в подпрограмме-функции имеет вид:

function имя-функции (список формальных параметров);

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

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

Пример 22. Вычислить корень алгебраического уравнения f(x)=0методом половинного деления на интервале [a,b] с точностью e.

Пусть нужно решить уравнение x2 - 5 = 0 и вывести на экран приближенное значение корня x, значение функции f(x), количество последовательных приближений n.

Пусть известно, что в интервале [2,3] имеется единственный корень.

Будем выполнять расчеты при различных значениях e.

В данном примере поместим подпрограмму-функцию в рабочую программу.

В программе будем использовать следующие обозначения для имен переменных: t – середина интервала [a,b], fa – значение f(a) , ft - значение f(t), eps- значение e.

Program Primer22;

var a, b, eps, t, x, fa, ft : real;

n : integer;

function f(x: real) : real; {подпрограмма-функция f(x)}

begin

f:=x*x-5;

end;

begin writeln(‘a, b, eps’);

readln(a, b, eps);

n:=0;

fa:=f(a); {обращение к подпрограмме-функции f(x) при x=a}

while abs(b-a) > eps do

begin

t:=(a+b)/2;

n:=n+1;

ft:=f(t); {обращение к подпрограмме-функции f(x) при x=t}

if (fa*ft) < 0 then b:=t else begin a:=t; fa:=ft; end;

end;

x:=(a+b)/2;

writeln(‘x = ’, x:5:3, ‘ f(x) = ’, f(x):5:3, ‘ n = ’, n:3);

end.

Контрольные расчеты

Исходные данные Результаты вычислений
a b e x f(x) n
0.01 2.23828 0.0099
0.001 2.23583 -0.001
0.00001 2.23605 -0.00006

Примечание.

Если x является приближенным значением корня уравнения, то f(x) ≈ 0.

Процедуры в языке Pascal

Процедуры в языке Pascal - это программные единицы (подпрограммы), которые могут помещаться в рабочей программе или в библиотеке (модуле) [Л1, стр. 61-64].

Заголовок в подпрограмме- процедуре имеет вид:

Procedure имя-процедуры (список формальных параметров);

где список формальных параметров - это список параметров-значений и параметров–переменных, являющихся исходными данными и результатами вычислений соответственно.

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

Пример 23.Даны матрицы A, B. Вычислить матрицу C=A+B. Элементы матрицы С вычисляются по формуле: cij = aij + bij.

Программа

Program prim23;

const m=2;

n=2;

type matr=array[1..m,1..n] of real;

var i,j:integer;

a,b,c:matr;

procedure readmatr(var x:matr); {процедура ввода матрицы}

begin

for i:=1 to m do

for j:=1 to n do

read(x[i,j]);

end;

begin

writeln('Ввести матрицу a');

readmatr(a); {обращение к процедуре ввода матрицы a(m,n)}

writeln('Ввести матрицу b');

readmatr(b); {обращение к процедуре ввода матрицы b(m,n)}

writeln('Матрица с');

for i:=1 to m do

begin

for j:=1 to n do

begin

c[i,j]:=a[i,j]+b[i,j];

write(c[i,j]:5:2,' ');

end;

writeln;

end;

end.

Наши рекомендации