Задача 2. Составить программу, решающую следующую задачу: Дано число а. Не пользуясь никакими другими операциями ,кроме умножения получить : а в 20 степени за 5 операций
Если речь о "минимально возможном", знаачит используется какое-то кодирование данных. Простейший вариант кодирования - это присвоить числу 50 (меньше ведь не может быть) код 0. Тогда 500 также сдвинется на 50 и получит код 450. Чтобы определить, сколько бит потребуется для записи кода 450, нужно или перевести 450 в двоичную систему счисления, или вычислить и округлить результат до ближайшего большего целого. В последнем случае получим приблизительно 8.81 и округлим до 9. На запись информации по одному донору потребуется от 1 до 9 бит. Если считать, что информация по каждому донору записывается одинаковым количеством бит, то потребуется 56х9=504 бита. Если кодировку производить переменным числом бит, понадобится код - разделитель данных, который также занимает место. В подобных случаях решение о формате записи принимается исходя из конкретных условий.
Function f(x: real): real; begin f := (x - 3) / (sqr(x) + 2) end;
var a, b, x, fa, fb, fx, eps: real;
begin Write('Введите через пробел границы интервала [a;b] и точность:'); Readln(a, b, eps); fa := f(a); if abs(fa) <= eps then Writeln('x=', a, ', y=', fa) else begin fb := f(b); if abs(fb) <= eps then Writeln('x=', b, ', y=', fb) else if fa * fb > 0 then Writeln('На указанном интервале корней нет') else repeat x := (a + b) / 2; fx := f(x); if abs(fx) <= eps then Writeln('x=', x, ', y=', fx) else if fa * fx > 0 then a := x else b := x; until abs(fx) <= eps end end.
Результат выполнения программы:
Введите через пробел границы интервала [a;b] и точность:-1 4 1e-4 x=2.9990234375, y=-8.88257162245635E-05
и округлить результат до ближайшего большего целого. В последнем случае получим приблизительно 8.81 и округлим до 9.
На запись информации по одному донору потребуется от 1 до 9 бит. Если считать, что информация по каждому донору записывается одинаковым количеством бит, то потребуется 56х9=504 бита.
Если кодировку производить переменным числом бит, понадобится код - разделитель данных, который также занимает место. В подобных случаях решение о формате записи принимается исходя из конкретных условий.
begin
f := (x - 3) / (sqr(x) + 2)
end;
var
a, b, x, fa, fb, fx, eps: real;
begin
Write('Введите через пробел границы интервала [a;b] и точность:');
Readln(a, b, eps);
fa := f(a);
if abs(fa) <= eps then Writeln('x=', a, ', y=', fa)
else begin
fb := f(b);
if abs(fb) <= eps then Writeln('x=', b, ', y=', fb)
else
if fa * fb > 0 then Writeln('На указанном интервале корней нет')
else
repeat
x := (a + b) / 2;
fx := f(x);
if abs(fx) <= eps then Writeln('x=', x, ', y=', fx)
else
if fa * fx > 0 then a := x else b := x;
until abs(fx) <= eps
end
end.
Результат выполнения программы:
Введите через пробел границы интервала [a;b] и точность:-1 4 1e-4
x=2.9990234375, y=-8.88257162245635E-05