Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
1. Для варианта задания из лабораторной работы № 11 (Обработка последовательностей) необходимо представить вычисления (действия по заданию) в виде функции (процедуры):
- как обычную (нерекурсивную);
- как рекурсивную.
Задача.
Пусть дано n вещественных чисел, которые вводятся по одному. Вычислите среднее арифметическое положительных и среднее арифметическое отрицательных чисел.
Нерекурсивные процедуры:
Рекурсивные функции:
2. Построить таблицу значений функций для заданий из своего варианта, причем вычисление значений для таблицы оформить в виде функций, например, с именами f1 и f2 (параметр R вводится в клавиатуры);
f1: ; f2: .
Используя процедурный тип, реализовать обобщенные функции f3(MIN_f1) и f4(MAX_f2), которые должны для названных выше функций f1 и f2 вычислять соответственно минимальное и максимальное значение, причем функции f1 и f2 должны передаваться в функции f3 и f4 как параметры (процедурного типа).
uses
crt;
label
diapazon;
const
t='x';
type fun=function(x,r:single):single;
var
R1,R2,minf,maxf:single;
A,B,C :array[word] of single;
i,k:byte;
{F+}
Function f1(x,r:single):single;
begin
if x<=-r
then f1:=3
else
if x<=r
then f1:=-sqrt(sqr(r)-sqr(x))+3
else
if (x<=6) and (r<6)
then f1:=9-2*x
else f1:=x-9;
end;
{F-}
{F+}
Function f2(x,r:single):single;
begin
if x<-(r+7)
then f2:=-1
else
if x<=r-7
then f2:=-sqrt(sqr(r)-sqr(x+7))+2
else
if (x<-4) and (r<3)
then f2:=2
else
if (x<0) and(r<7)
then f2:=-0.5*x
else
if(x<pi) and (r<pi+7)
then f2:=sin(x)
else f2:=x-pi;
end;
{F-}
Function MAX(f:fun;Xmin,Xmax,r:single):single;
begin
MAX:=f(Xmin,r);
while Xmin<>Xmax do
begin
if MAX < f(Xmin+1,r)
then Max :=f(Xmin+1,r);
Xmin:=Xmin+1;
end;
end;
Function MIN(f:fun;Xmin,Xmax,r:single):single;
begin
MIN:=f(Xmin,r);
while Xmin<>Xmax do
begin
MIN:=f(Xmin,r);
while Xmin<>Xmax do
begin
if MIN> f(Xmin+1,r)
then MIN:=f(Xmin+1,r);
Xmin:=Xmin+1;
end;
end;
Begin
clrscr;
k:=1;
writeln('Введите радиусы для функций:');
write('R1=');
readln(R1);
write('R2=');
readln(R2);
writeln('Введите значения для функций:');
writeln('Для прекращения ввода нажмите "пробел"');
repeat
write('x',k,'=');
readln(C[k]);
A[k]:=f1(C[k],R1);
B[k]:=f2(C[k],R2);
inc(k);
until (k=65535) or (readkey=#32);
writeln(' | x | F1 | F2 | (*)');
writeln(' _____________________');
for i:=1 to k-1 do
if B[i]=-1 then
writeln(' |', C[i]:8:3,'|',A[i]:8:3,'| ',t,' |')
else
writeln(' |', C[i]:8:3,'|',A[i]:8:3,'|',B[i]:8:3,'|');
write('(*): x - функция не определена.');
writeln;
diapazon:
write('Введите диапазон аргументов для работы с функцией(до 3-x знаков после запятой):');
readln(minf,maxf);
if minf >= maxf then
begin
writeln('Неправильно указан диапазон.',#13#10,'Нажмите ENTER и введите диапазон заново');
readln;
goto diapazon;
end;
readln;
Writeln('Max_f2=', Max(@f2,minf,maxf,R1):5:2);
Writeln('Min_f1=', Min(@f1,minf,maxf,R1):5:2);
readln;
End.