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

исходные данные (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.

Исходные данные Результаты

Матрица a Матрица b Матрица c

-5.6 7.5 8.2 1.0 2.60 8.50

3.2 4.0 -8.1 9.9 -4.90 13.90

Пример 24. Переписать все отрицательные элементы матриц A и B в одномерный массив Z.

Программа

Program prim24;

type

mas1=array[1..50] of real;

mas2=array[1..5,1..5] of real;

var

a,b : mas2;

z : mas1;

m1,n1,m2,n2,i,j,k : integer;

procedure vvod(var x:mas2;m,n:integer); {процедура ввода матрицы}

begin

for i:=1 to m do

for j:=1 to n do

read(x[i,j]);

end;

procedure negmassiv(x:mas2;m,n:integer;var p:integer;var s:mas1); {процедура,

переписывающая отрицательные элементы

матрицы в одномерный массив}

begin

for i:=1 to m do

for j:=1 to n do

if x[i,j]<0 then

begin

p:=p+1;

s[p]:=x[i,j];

end;

end;

begin

writeln('Ввести размерность матрицы a');

readln(m1,n1);

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

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

writeln('Ввести размерность матрицы b');

readln(m2,n2);

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

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

k:=0;

negmassiv(a,m1,n1,k,z); {обращение к процедуре записи отрицательных

элементов матрицы a(m1,n1) в массив z}

negmassiv(b,m2,n2,k,z); {обращение к процедуре записи отрицательных

элементов матрицы b(m2,n2) в массив z}

writeln(' Массив z');

for i:=1 to k do

writeln('z[',i,']=',z[i]:5:1);

end.

Исходные данные

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