Var c:array [1..10] of integer; i, even, positive, sumLessSix: integer; begin randomize; writeln ('Рандомный массив'); for i:=1 to 10 do begin c[i]:= random(20)-10; write (c[i],' '); end; {for} writeln; writeln('Произведение четных чисел'); even:=1; for i:=1 to 10 do if c[i] mod 2 = 0 then even:= even*c[i]; write(even,' '); writeln; writeln('Произведение положительных чисел'); positive:=1; for i:=1 to 10 do if c[i] > 0 then positive:= positive*c[i]; write(positive,' '); writeln; writeln('Сумма элементов меньших 6'); positive:=1; for i:=1 to 10 do if c[i] < 6 then sumLessSix:= sumLessSix+c[i]; write(sumLessSix,' '); end.
Для метода касательных (он же - метод Ньютона) надо задать начальное приближение и получить выражение для производной функции. Рекуррентная формула в методе Ньютона имеет следующий вид: Для нашей конкретной задачи можно записать: А еще надо задать погрешность решения, которую определим так:
function f(x:real):real; begin f:=sqr(x)-cos(sqr(x))-6 end;
function fn1(x:real):real; begin fn1:=x-(sqr(x)-cos(sqr(x))-6)/(2*x*(1+sin(sqr(x)))) end;
var xn,xn1,y,eps:real; begin Writeln('Введите начальное приближение для корня: '); Read(xn); Writeln('Введите значение погрешности для решения: '); Read(eps); xn1:=xn; y:=f(xn); while abs(y)>eps do begin xn1:=fn1(xn); y:=f(xn1); xn:=xn1 end; Writeln('x=',xn1,' f(x)=',y) end.
Тестовое решение: Введите начальное приближение для корня: -3 Введите значение погрешности для решения: 0.00001 x=-2.61645602631473 f(x)=1.28691349221555E-06
c:array [1..10] of integer;
i, even, positive, sumLessSix: integer;
begin
randomize;
writeln ('Рандомный массив');
for i:=1 to 10 do begin
c[i]:= random(20)-10;
write (c[i],' ');
end; {for}
writeln;
writeln('Произведение четных чисел');
even:=1;
for i:=1 to 10 do
if c[i] mod 2 = 0 then
even:= even*c[i];
write(even,' ');
writeln;
writeln('Произведение положительных чисел');
positive:=1;
for i:=1 to 10 do
if c[i] > 0 then
positive:= positive*c[i];
write(positive,' ');
writeln;
writeln('Сумма элементов меньших 6');
positive:=1;
for i:=1 to 10 do
if c[i] < 6 then
sumLessSix:= sumLessSix+c[i];
write(sumLessSix,' ');
end.
Рекуррентная формула в методе Ньютона имеет следующий вид:
Для нашей конкретной задачи можно записать:
А еще надо задать погрешность решения, которую определим так:
function f(x:real):real;
begin
f:=sqr(x)-cos(sqr(x))-6
end;
function fn1(x:real):real;
begin
fn1:=x-(sqr(x)-cos(sqr(x))-6)/(2*x*(1+sin(sqr(x))))
end;
var
xn,xn1,y,eps:real;
begin
Writeln('Введите начальное приближение для корня: ');
Read(xn);
Writeln('Введите значение погрешности для решения: ');
Read(eps);
xn1:=xn; y:=f(xn);
while abs(y)>eps do
begin xn1:=fn1(xn); y:=f(xn1); xn:=xn1 end;
Writeln('x=',xn1,' f(x)=',y)
end.
Тестовое решение:
Введите начальное приближение для корня:
-3
Введите значение погрешности для решения:
0.00001
x=-2.61645602631473 f(x)=1.28691349221555E-06