Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгор_ТХТК_пособие.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.6 Mб
Скачать

I,n : Integer;

Function SumMas (k:Integer;X:Mas):Real;

{Нахождение суммы элементов массива вещественных чисел}

Var

I : Integer;

S : Real; { Вспомогательная переменная - сумма}

Begin

S := 0;

For i := 1 to k Do

S:=S + X[i];

SumMas:=S;

End; { SumMas }

Begin

{ Основная программа }

Writeln(’Введите размер массивов’);

ReadLn(n);

Writeln(’Введите первый массив’);

For i := 1 to n Do

ReadLn (A[i]);

Writeln(’Введите второй массив’);

For i := 1 to n Do

ReadLn (B[i]);

Suma := SumMas(n,A);

Sumb := SumMas(n,B);

Writeln(’Сумма чисел 1-го массива =’,Suma:8:2);

Writeln(’Сумма чисел 2-го массива =’,Sumb:8:2);

WriteLn(’Работа окончена. Нажмите клавишу ENTER’);

Readln;

End.

Пример 6.6 Составить программу вычисления n! С использованием функции.

Первый вариант задачи.

program factorial;

Описательная часть основной программы:

var

n, k: integer;

function fac (k: integer): integer;

Описательная часть подпрограммы:

var

p, i: integer

begin

Исполнительная часть подпрограммы:

p:=1

for i:=1 to k do

p: = p*i;

fac: =p;

end;

Исполнительная часть основной программы:

begin

write ('введите n');

readln (n);

for k: = 1 to n do

writeln (fac(k));

end.

n, k - глобальные переменные.

p, i - локальные переменные.

fac - имя "функции", возвращает результат в основную программу. Может в подпрограмме присутствовать в операторах присваивания только слева от знака "=".

Второй вариант задачи вычисления n!

program factorial;

var

n: integer;

function fac (i: integer): integer;

begin

if i=1 then fac: = 1

else fac: = i * fac(i-1);

end;

begin

writeln ('введите n');

readln (n);

writeln ('n! = ', fac(n));

end.

Подпрограмма-функция многократно обращается сама к себе. Вычисление начинается с конца i = n и до i = 1.

Пример 6.7 Составить программу для вычисления определенного интеграла

tk

2t

I= S--------------- dt

sqrt(1-sin2t)

tn

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

ISimps=2*h/3*(0.5*F(A)+2*F(A+h)+F(A+2*h)+2*F(A+3*h)+...

+2*F(B-h)+0.5*F(B))

где A и B - нижняя и верхняя границы интервала интегрирования, N - число разбиений интервала интегрирования, h=(B-A)/N, причем N должно быть четным.

Program INTEGRAL;

type

Func= function(x: Real): Real;

var

I,tn,tk:Real;

N:Integer;

{$F+}

Function Q(t: Real): Real;

begin

Q:=2*t/Sqrt(1-Sin(2*t));

end;

{$F-}

Procedure Simps(F:Func; a,b:Real; N:Integer; var INT:Real);

var

sum, h: Real;

j:Integer;

begin

if Odd(N) then N:=N+1;

h:=(b-a)/N;

sum:=0.5*(F(a)+F(b));

for j:=1 to N-1 do

sum:=sum+(j mod 2+1)*F(a+j*h);

INT:=2*h*sum/3

end;

begin

WriteLn(' ВВЕДИ TN,TK,N');

Read(TN,TK,N);

Simps(Q,TN,TK,N,I);

WriteLn('I=',I:8:3)

end.