Розв'язування задач на складання алгоритмів з використанням функцій
Задача № 1
За даними цілими числами a і b обчислити u = f (b, a) + 2* f (a+b, 4), де .
Розв'язання
Зрозуміло, що обчислення значення f(х, у) потрібно описати як допоміжний алгоритм. У даному випадку зручно використовувати функцію, оскільки f(х, у) входить до складу виразу обчислення значення u. При чому формальними параметрами будуть х і у.
Допоміжний алгоритм
алг дійсн f (ціл x, y)
арг x, y
поч
знач : = 2*x*y/(x*x + y*y + 1) - 7
кін
алг дійсн f (ціл x, y)
арг x, y
поч
знач : = 2*x*y/(x*x + y*y + 1) - 7
кін
В основній частині програми описуємо формулу для u, яка викликається для фактичних параметрів a і b.
Алгоритм основної програмиалг Обчислення (ціл a, b, дійсн u)
арг a, b
рез u
поч
u : = f (b, a) + 2*f (a+b, 4)
кін
арг a, b
рез u
поч
u : = f (b, a) + 2*f (a+b, 4)
кін
1. Сконструюйте програму, вказавши послідовність кроків за зразком: 123456789.
1) Readkey;
END.
2) BEGIN
ClrScr;
Write(‘a, b => ');
3) function f (x, y: integer);
begin
4) Readln(a, b);
u : = f (b, a) + 2*f (a+b, 4);
5) Program Calculation;
Uses Crt;
6) u: real;
7) f : = 2*x*y/(x*x + y*y + 1) - 7
end;
8) Var
a, b : integer;
9) Write(‘u=', u : 4 : 2);
1) Readkey;
END.
2) BEGIN
ClrScr;
Write(‘a, b => ');
3) function f (x, y: integer);
begin
4) Readln(a, b);
u : = f (b, a) + 2*f (a+b, 4);
5) Program Calculation;
Uses Crt;
6) u: real;
7) f : = 2*x*y/(x*x + y*y + 1) - 7
end;
8) Var
a, b : integer;
9) Write(‘u=', u : 4 : 2);
2. Чи можна замінити у функції
function f (x, y : integer);
begin
f : = 2*x*y/(x*x + y*y + 1) - 7
end;команду f:= 2*x*y/(x*x+y*y+1)-7 на f(х, у):= 2*x*y/(x*x+y*y+1)-7 ?
function f (x, y : integer);
begin
f : = 2*x*y/(x*x + y*y + 1) - 7
end;команду f:= 2*x*y/(x*x+y*y+1)-7 на f(х, у):= 2*x*y/(x*x+y*y+1)-7 ?
3. При заміні алг Обчислення (ціл a, b, дійсн u) на алг Обчислення (дійсн a, b, дійсн u) виникатиме помилка через:
Задача № 2
Обчислити значення функції y = -3x3 + 4x - 10 на проміжку [a, b], де a, b - цілі числа, з кроком 0.5 і знайти максимальне з них.
Розв'язання
Як і в попередній задачі, обчислення значення заданої функції опишемо як допоміжний алгоритм. Якщо нам потрібно буде змінити задання функції (формулу), то достатньо буде внести зміни лише в тілі функції. Основна ж частина програми не буде залежати від внесених поправок.
Крім цього, опишемо функцію знаходження більшого з 2-ох елементів, яку будемо використовувати для знаходження максимального значення функції на проміжку.
Крім цього, опишемо функцію знаходження більшого з 2-ох елементів, яку будемо використовувати для знаходження максимального значення функції на проміжку.
алг дійсн f (дійсн t)
арг t
поч
знач : = -3*t*t*t + 4*t - 10
кін
арг t
поч
знач : = -3*t*t*t + 4*t - 10
кін
4. Чи можна в допоміжний алгоритм
алг дійсн f (дійсн t)
арг t
поч знач : = -3*t*t*t + 4*t - 10
кінвнести такі зміни:
алг дійсн f (дійсн t)
арг t
поч
дійсн z
z : = -3*t*t*t + 4*t - 10
знач:= z
кін
алг дійсн f (дійсн t)
арг t
поч знач : = -3*t*t*t + 4*t - 10
кінвнести такі зміни:
алг дійсн f (дійсн t)
арг t
поч
дійсн z
z : = -3*t*t*t + 4*t - 10
знач:= z
кін
5. Сконструюйте алгоритм знаходження більшого з 2-ох чисел, ввівши порядок кроків за зразком: 12345678
1) арг t1, t2
2) інакше знач:= t2
3) якщо t1>t2
4) кін
5) алг дійсн Більше_2 (дійсн t1, t2)
6) поч
7) все
8) то
знач : = t1
1) арг t1, t2
2) інакше знач:= t2
3) якщо t1>t2
4) кін
5) алг дійсн Більше_2 (дійсн t1, t2)
6) поч
7) все
8) то
знач : = t1
В основній частині програми потрібно організувати цикл від x= a до х= b із кроком 0.5. Це не може бути цикл для, де крок становить 1 або-1. Тому використовуватимемо цикл поки. У циклі треба: 1) обчислити значення функції при заданому аргументу, 2) визначити, що більше: знайдене значення функції чи поточне максимальне значення; 3) збільшити аргумент на 0.5. Спочатку максимальним можна вважати значення функції в точці а.
Алгоритм основної частини програми
алг Максим_значення (ціл a, b, дійсн max)
арг a, b
рез max
поч
дійсн x, y
max : = f(a)
x : = a+0.5;
поки x<= b
пц
y : = f(x)
max : = Більше_2 (y, max)
x : = x + 0.5
кц
кін
алг Максим_значення (ціл a, b, дійсн max)
арг a, b
рез max
поч
дійсн x, y
max : = f(a)
x : = a+0.5;
поки x<= b
пц
y : = f(x)
max : = Більше_2 (y, max)
x : = x + 0.5
кц
кін
Program Max_znach;
Uses Crt;
Var
a, b : integer;
x, y, max : real;
function f (t : real) : real;
begin
f : = -3*t*t*t + 4*t - 10
end;
function Bilshe_2 (t1, t2 : real) : real;
begin
if t1>t2
then Bilshe_2 : = t1
else Bilshe_2 : = t2;
end;
BEGIN
ClrScr;
Write(‘a, b => ');
Readln(a, b);
max : = f(a);
x : = a+0.5;
While x<= b do
begin
y : = f(x);
max : = Більше_2 (y, max);
x : = x + 0.5;
end;
Write(‘max=', max : 4 : 2);
Readkey;
END.
Uses Crt;
Var
a, b : integer;
x, y, max : real;
function f (t : real) : real;
begin
f : = -3*t*t*t + 4*t - 10
end;
function Bilshe_2 (t1, t2 : real) : real;
begin
if t1>t2
then Bilshe_2 : = t1
else Bilshe_2 : = t2;
end;
BEGIN
ClrScr;
Write(‘a, b => ');
Readln(a, b);
max : = f(a);
x : = a+0.5;
While x<= b do
begin
y : = f(x);
max : = Більше_2 (y, max);
x : = x + 0.5;
end;
Write(‘max=', max : 4 : 2);
Readkey;
END.
6. Чи рівносильною буде заміна фрагменту
While x<=b do
begin
y : = f(x);
max : = Більше_2 (y, max);
x : = x + 0.5;
end;на
While x<=b do
begin
x : = x + 0.5;
y : = f(x);
max := Більше_2 (y, max);
end;
While x<=b do
begin
y : = f(x);
max : = Більше_2 (y, max);
x : = x + 0.5;
end;на
While x<=b do
begin
x : = x + 0.5;
y : = f(x);
max := Більше_2 (y, max);
end;
Задача № 3
Юрко не переймався математичними формулами і тому весь час на уроки математики носив з собою довідник, в якому під номером 1 була написана формула обчислення периметра квадрата, під номером 2 - площі квадрата, під номером 3 - об'єму куба, під номером 4 - площі бічної поверхні куба. Допоможіть Юркові скласти для комп'ютера програму, яка за даним номером формули та довжиною сторони квадрата замінила б йому довідник для розв'язування домашніх завдань. Обчислення за кожною з формул оформити як функцію.
Розв'язання
Потрібно 4 допоміжних алгоритми (функцій) для знаходження периметра квадрату (p : = 4*a), площі (Skv : = a2), об'єму куба (V : = a3), площі бічної поверхні куба (Sbp : =6*a2).
Допоміжні алгоритми
дійсн алг Периметр (дійсн х) арг x поч знач : = 4*x кін | дійсн алг Площа_кв (дійсн x) арг x поч знач : = x2 кін |
дійсн алг Об'єм (дійсн x) арг xпоч знач : = x3 кін | дійсн алг Площа_пов (дійсн x) арг x поч знач : = 6*x2 кін |
У основній частині програми будемо викликати один із допоміжних алгоритмів залежно від введеного номеру к.
алг Довідник (ціл к, дійсн а, дійсн rez)
арг к, а
рез rez
поч
вибір к з при к=1
rez : = Периметр (а)
при к=2
rez : = Площа_кв (а)
при к=3
rez : = Об'єм (а)
при к=4
rez : = Площа_пов (а)
все
кін
арг к, а
рез rez
поч
вибір к з при к=1
rez : = Периметр (а)
при к=2
rez : = Площа_кв (а)
при к=3
rez : = Об'єм (а)
при к=4
rez : = Площа_пов (а)
все
кін
7. Чи можна замінити оператор вибору на 4 оператори умови за зразком:
якщо к=1
то rez : = Периметр (а)
все
. . .
якщо к=1
то rez : = Периметр (а)
все
. . .
Program Max_znach;
Uses Crt;
Var
k : integer;
a, rez : real;
function Perumetr (x : real) : real;
begin
Perumetr : = 4*x;
end;
function Plosha_kv (x : real) : real;
begin
Plosha_kv : = x*x;
end;
function Objem (x : real) : real;
begin
Objem : = x*x*x;
end;
function Plosha_pov (x : real) : real;
begin
Plosha_pov : = 6*x*x;
end;
BEGIN
ClrScr;
Write (‘k, a => ');
Readln(k, a);
Case k of
1: begin
rez : = Perumetr(a);
Writeln (‘p=', rez : 4 : 2);
end;
2: begin
rez : = Plosha_kv (a);
Writeln (‘S_kv =', rez : 4 : 2);
end;
3: begin
rez : = Objem(a);
Writeln (‘V=', rez : 4 : 2);
end;
4: begin
rez : = Plosha_pov (a);
Writeln (‘Sbp=', rez : 4 : 2);
end;
end;
Readkey;
END.
Uses Crt;
Var
k : integer;
a, rez : real;
function Perumetr (x : real) : real;
begin
Perumetr : = 4*x;
end;
function Plosha_kv (x : real) : real;
begin
Plosha_kv : = x*x;
end;
function Objem (x : real) : real;
begin
Objem : = x*x*x;
end;
function Plosha_pov (x : real) : real;
begin
Plosha_pov : = 6*x*x;
end;
BEGIN
ClrScr;
Write (‘k, a => ');
Readln(k, a);
Case k of
1: begin
rez : = Perumetr(a);
Writeln (‘p=', rez : 4 : 2);
end;
2: begin
rez : = Plosha_kv (a);
Writeln (‘S_kv =', rez : 4 : 2);
end;
3: begin
rez : = Objem(a);
Writeln (‘V=', rez : 4 : 2);
end;
4: begin
rez : = Plosha_pov (a);
Writeln (‘Sbp=', rez : 4 : 2);
end;
end;
Readkey;
END.
8. Чи вплине на роботу програми зміна порядку опису процедур?
9. Параметр а в програмі є:
Немає коментарів:
Дописати коментар