Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подпрограммы.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
172 Кб
Скачать
☆

Примеры решения задач с использованием процедурных типов

Пример 1. Разработать функцию проверки принадлежности точки плоскости с координатами (x,y) данной кривой y=f(x). Для задания кривой использовать процедурный тип. Использовать функцию для проверки принадлежности 5 различных точек кривым y=cos(x) и y=sin(x2).

Program TOCHKI;

{$APPTYPE CONSOLE}

Uses SysUtils;

Const nmax=5;

Type Func=Function (x:real):real;

//

Function Y1(x:real):real;

begin

Y1:=cos(x);

end;

//

Function Y2(x:real):real;

begin

Y2:=sin(x*x);

end;

//

Function Proverka(x,y:real;f:Func):boolean;

begin

if abs(y-f(x))<0.001 then Result:=true

else Result:=false;

end;

//

var // объявление глобальных параметров

i:integer;

x,y:real;

Begin

Writeln(’X’:5,’Y’:10,’Y=COS(X)’:20,’Y=SIN(X*X)’:20);

For i:=1 to nmax do

begin

writeln(’введите координаты точки:’);

readln(x,y);

write(x:10:2),y:10:2);

if Proverka(x,y,Y1)=true then write(’Принадлежит’:20)

else write(’Не принадлежит’:20);

if Proverka(x,y,Y2)=true then write(’Принадлежит’:20)

else write(’Не принадлежит’:20);

writeln;

end;

End.

Пример 2. Разработать процедуру для вычисления определенного интеграла функции f(x) по формуле прямоугольников с заданной точностью eps. Для задания функции использовать процедурный тип. Использовать процедуру для вычисления определенного интеграла одной из трех функций: y1=sin(x)/x, y2=exp(x)/(x+1), y3=x3+5x2-6.

Program INTEGRAL;

{$APPTYPE CONSOLE}

Uses SysUtils;

Type Func=Function (x:real):real;

//

Function Y1(x:real):real;

begin

Y1:=sin(x)/x;

end;

//

Function Y2(x:real):real;

begin

Y2:= exp(x)/(x+1);

end;

//

Function Y3(x:real):real;

begin

Y3:= x3+5x2-6;

end;

//

Procedure Integ(a,b,eps:real; n:integer; f:Func; Var s:real);

// Вычисление определенного интеграла. Значения a и b – границы отрезка

// n -начальное количество отрезков разбиения

Var h:real;

s1:real;

i:integer;

begin

s:=(b-a)*f(x);

repeat

s1:=s;

h:=(b-a)/n;

s:=0;

x:=a;

for i:=1 to n do

begin

s:=s+f(x);

x:=x+h;

end;

s:=s*h;

n:=n*2;

until abs(s-s1)<eps;

end;

//

var // объявление глобальных параметров

num,n:integer;

a,b,eps,opr_int:real;

y:Func;

Begin

writeln(’Введите номер функции для интегрирования:’);

writeln(’1 - y1=sin(x)/x’);

writeln(’2 - y2=exp(x)/(x+1)’);

writeln(’3 - y3=x3+5x2-6’);

readln(num);

case num of

1:y:=Y1;

2:y:=Y2;

3:y:=Y3

else writeln(’Недопустимый номер функции’);

exit;

end;

writeln(’Введите границы интервала интегрирования’);

readln(a,b);

writeln(’Введите начальное количество отрезков разбиения’);

readln(n);

writeln(’Введите точность’);

readln(eps);

Integ(a,b,eps,n,y,opr_int);

writeln(’Определенный интеграл = ’,opr_int:10:5);

readln;

end.

Задания для самостоятельной работы

  1. Разработать 3 функции уточнения корней уравнения с заданной точностью eps:

  • методом половинного деления;

  • методом хорд;

  • методом простых итераций;

Для задания уравнения использовать процедурный тип. Использовать функции для уточнения корней трех уравнений.

  1. Разработать процедуру для вычисления определенного интеграла функции f(x) по формуле трапеций с заданной точностью eps. Для задания функции использовать процедурный тип. Использовать процедуру для нахождения площади фигуры, ограниченной функциями y1=exp(x) и y2=x3+5x2-6.

24