Решение математических задач в углубленном курсе информатики
В современном информационном обществе программирование считают второй грамотностью. Деятельность по составлению программ с использованием ПЭВМ не является специфической для какой-то одной области, ею пронизываются все сферы материального, научно-технического, социально-экономического и информационного производства. Навыки алгоритмизации и программирования приобретают всё более фундаментальный характер и становятся таким же элементом культуры, как умение читать, писать и излагать свои мысли. Целью предлагаемых статей является помочь учителям информатики в более глубоком усвоении учениками основ алгоритмизации, в умении выделять главное, в грамотном использовании конструкций языка программирования при решении математических задач. Программирование – это искусство, которому надо учить, которым следует овладевать уже в школьные годы, чтобы достичь определенных успехов в данной области.
Использование рекуррентных соотношений для вычисления сумм последовательностей
Тема. Оператор цикла (рекуррентные соотношения).
Задача 1. Вычислить сумму последовательности
S = 1+(1+1/2)+(1+1/2+1/3)+…+(1+1/2+…+1/n).
Рекуррентное соотношение: - для общего члена последовательности имеет вид
ai = ai-1+1
/i;
- для суммы Si = Si-1+ai , a0 = 0, S0 = a0 , (i = 1, 2,…, n).
Определим переменные, используемые в алгоритме для решения задачи:
n – индекс последнего члена последовательности;
i - индекс текущего(ей) члена(суммы) последовательности;
s – текущая сумма последовательности, результат;
a – текущий член последовательности.
Алгоритм на языке PASCAL выглядит следующим образом.
{Вычисление суммы последовательности}
const n=10;
var s, a:real;
i:byte;
begin
{Начальная установка}
a:=0; s:=a;
for i:=1 to n do begin
a:=a+1/i;
s:=s+a
end;
writeln(‘сумма=’,s:10:4);
end.
Для n = 10 имеем S = 22.2187.
Алгоритм в Excel выглядит следующим образом.
| n= | 15 | | |
| Решение |
| № п\п | ai | si | control |
| 1 | =1/A4 | =B4 | =ЕСЛИ(A4=$B$1;"otvet") |
| =A4+1 | =B4+1/A5 | =C4+B5 | =ЕСЛИ(A5=$B$1;"otvet") |
| =A5+1 | =B5+1/A6 | =C5+B6 | =ЕСЛИ(A6=$B$1;"otvet") |
| =A6+1 | =B6+1/A7 | =C6+B7 | =ЕСЛИ(A7=$B$1;"otvet") |
| =A7+1 | =B7+1/A8 | =C7+B8 | =ЕСЛИ(A8=$B$1;"otvet") |
| =A8+1 | =B8+1/A9 | =C8+B9 | =ЕСЛИ(A9=$B$1;"otvet") |
| =A9+1 | =B9+1/A10 | =C9+B10 | =ЕСЛИ(A10=$B$1;"otvet") |
| =A10+1 | =B10+1/A11 | =C10+B11 | =ЕСЛИ(A11=$B$1;"otvet") |
| =A11+1 | =B11+1/A12 | =C11+B12 | =ЕСЛИ(A12=$B$1;"otvet") |
| =A12+1 | =B12+1/A13 | =C12+B13 | =ЕСЛИ(A13=$B$1;"otvet") |
| =A13+1 | =B13+1/A14 | =C13+B14 | =ЕСЛИ(A14=$B$1;"otvet") |
| =A14+1 | =B14+1/A15 | =C14+B15 | =ЕСЛИ(A15=$B$1;"otvet") |
| =A15+1 | =B15+1/A16 | =C15+B16 | =ЕСЛИ(A16=$B$1;"otvet") |
| =A16+1 | =B16+1/A17 | =C16+B17 | =ЕСЛИ(A17=$B$1;"otvet") |
| =A17+1 | =B17+1/A18 | =C17+B18 | =ЕСЛИ(A18=$B$1;"otvet") |
| =A18+1 | =B18+1/A19 | =C18+B19 | =ЕСЛИ(A19=$B$1;"otvet") |
Задача 2. Вычислить значение функции
, заданной в виде ряда Тейлора
.
Разделив
член последовательности на
, имеем
.
Следовательно, общий член последовательности будет вычисляться по рекуррентной формуле
,
).
Определим переменные, используемые в алгоритме для решения задачи:
n – индекс последнего члена последовательности;
i - индекс текущего(ей) члена(суммы) последовательности;
x – значение
;
mn – значение
;
s – текущая сумма последовательности, результат;
a – текущий член последовательности;
f – вспомогательная переменная.
Алгоритм на языке PASCAL выглядит следующим образом.
{Вычисление суммы последовательности}
const n=5;
var s, a, x, mn, f:real; i:byte;
begin
writeln(‘Введите x, 1
readln(x);
{Начальная установка}
a:=x; s:=a; mn:=-x*x; f:=1;
for i:=1 to n do begin
f:=f+2; a:=a*mn/(f-1)/f; s:=s+a end;
writeln(‘сумма=’,s:10:4);
end.
Для n = 5, x = 1.5 имеем S = 0.9975.
Для n = 5, x = /3 имеем S = 0.8660.
Алгоритм в Excel выглядит следующим образом.
A B C D E F G
| n= | 5 | | | | | |
| x= | =ПИ()*0,5 | | | | | |
| "-x2 | =-(B2^2) | | | | | |
| Решение |
| № п\п | "2i+1 | "(2i+1)! | x2i+1 | ai | si | control |
| 0 | =2*A6+1 | =B6 | =B2 | =D6/C6 | =E6 | =ЕСЛИ(A6=$B$1;"otvet") |
| =A6+1 | =2*A7+1 | =C6*B7*(B7-1) | =D6*$B$3 | =D7/C7 | =F6+E7 | =ЕСЛИ(A7=$B$1;"otvet") |
| =A7+1 | =2*A8+1 | =C7*B8*(B8-1) | =D7*$B$3 | =D8/C8 | =F7+E8 | =ЕСЛИ(A8=$B$1;"otvet") |
| =A8+1 | =2*A9+1 | =C8*B9*(B9-1) | =D8*$B$3 | =D9/C9 | =F8+E9 | =ЕСЛИ(A9=$B$1;"otvet") |
| =A9+1 | =2*A10+1 | =C9*B10*(B10-1) | =D9*$B$3 | =D10/C10 | =F9+E10 | =ЕСЛИ(A10=$B$1;"otvet") |
| =A10+1 | =2*A11+1 | =C10*B11*(B11-1) | =D10*$B$3 | =D11/C11 | =F10+E11 | =ЕСЛИ(A11=$B$1;"otvet") |
| =A11+1 | =2*A12+1 | =C11*B12*(B12-1) | =D11*$B$3 | =D12/C12 | =F11+E12 | =ЕСЛИ(A12=$B$1;"otvet") |
Задача 3. Вычислить сумму последовательности
S =
,
где
- индекс последнего члена последовательности;
– последний член последовательности; 2 ≤
≤ 3.
Выделим в общем члене последовательности
(
=1,2,…,
), очевидные компоненты
,
,
,
, определяемые из следующих рекуррентных соотношений:
;
;
;
α (или
α), α (α - начальное значение угла и приращение угла. В нашем случае α = 50 , или α = 36).
Общий член рассматриваемой последовательности имеет вид:
а) – нечетно);
б)– четно).
Текущая сумма определяется из рекуррентного соотношения
, ).
Введём переменные, используемые в алгоритме для решения данной задачи:
s – текущая сумма последовательности, результат;
a – значение текущего члена последовательности;
e - число ;
x - вводимое значение
;
alfa - начальный угол и приращение в радианах (alfa = π/36);
i – индекс текущего(ей) члена(суммы) последовательности;
n – индекс последнего члена последовательности;
sw – переключатель булевского типа, определяющий вид члена последовательности. Если sw = true(истина), вычисляем текущий член последовательности по формуле (а), иначе - по формуле (б).
Алгоритм на языке PASCAL выглядит следующим образом.
{Вычисление суммы последовательности}
const n=10;
var s,a, p1, p2, p3, p4, e, x, alfa:real; i:byte; sw:boolean;
begin e:=exp(1); alfa:=pi/36;
writeln(‘Введите x, 2
readln(x);
{Начальная установка}
s:=0; sw:=true; p1:=1; p2:=1; p3:=1; p4:=alfa;
for i:=1 to n do begin
p1:=p1*e; p2:=p2*x; p3:=p3*i;
p4:=p4+alfa;{или p4:=alfa*i};
if sw then a:=(p1-p2)/(p3+sin(p4))
else a:=(p1-p2)/(p3-cos(p4));
s:=s+a; sw:=not sw
end;{конец цикла}
writeln(‘сумма=’,s:10:4);
end.
Для n = 10, x = 2.5 имеем S = 3.4541.
Алгоритм в Excel выглядит следующим образом.
A B C D E
| n= | 10 | | | |
| x= | 2 | | | |
| e= | =EXP(1) | | | |
| alfa= | =РАДИАНЫ(5) | | | |
| Решение | | | | |
| № п\п | ei | xi | i! | alfai |
| 1 | =B3 | =B2 | =A7 | =$B$4 |
| =A7+1 | =B7*$B$3 | =C7*$B$2 | =D7*A8 | =A8*$B$4 |
| =A8+1 | =B8*$B$3 | =C8*$B$2 | =D8*A9 | =A9*$B$4 |
| =A9+1 | =B9*$B$3 | =C9*$B$2 | =D9*A10 | =A10*$B$4 |
| =A10+1 | =B10*$B$3 | =C10*$B$2 | =D10*A11 | =A11*$B$4 |
| =A11+1 | =B11*$B$3 | =C11*$B$2 | =D11*A12 | =A12*$B$4 |
| =A12+1 | =B12*$B$3 | =C12*$B$2 | =D12*A13 | =A13*$B$4 |
| =A13+1 | =B13*$B$3 | =C13*$B$2 | =D13*A14 | =A14*$B$4 |
| =A14+1 | =B14*$B$3 | =C14*$B$2 | =D14*A15 | =A15*$B$4 |
| =A15+1 | =B15*$B$3 | =C15*$B$2 | =D15*A16 | =A16*$B$4 |
| =A16+1 | =B16*$B$3 | =C16*$B$2 | =D16*A17 | =A17*$B$4 |
| =A17+1 | =B17*$B$3 | =C17*$B$2 | =D17*A18 | =A18*$B$4 |
F G H
| | | |
| ai | si | control |
| =ЕСЛИ(ОСТАТ(A7;2)=1;(B7-C7)/(D7+SIN(E7));(B7-C7)/(D7-COS(E7))) | =F7 | =ЕСЛИ(A7=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A8;2)=1;(B8-C8)/(D8+SIN(E8));(B8-C8)/(D8-COS(E8))) | =G7+F8 | =ЕСЛИ(A8=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A9;2)=1;(B9-C9)/(D9+SIN(E9));(B9-C9)/(D9-COS(E9))) | =G8+F9 | =ЕСЛИ(A9=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A10;2)=1;(B10-C10)/(D10+SIN(E10));(B10-C10)/(D10-COS(E10))) | =G9+F10 | =ЕСЛИ(A10=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A11;2)=1;(B11-C11)/(D11+SIN(E11));(B11-C11)/(D11-COS(E11))) | =G10+F11 | =ЕСЛИ(A11=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A12;2)=1;(B12-C12)/(D12+SIN(E12));(B12-C12)/(D12-COS(E12))) | =G11+F12 | =ЕСЛИ(A12=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A13;2)=1;(B13-C13)/(D13+SIN(E13));(B13-C13)/(D13-COS(E13))) | =G12+F13 | =ЕСЛИ(A13=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A14;2)=1;(B14-C14)/(D14+SIN(E14));(B14-C14)/(D14-COS(E14))) | =G13+F14 | =ЕСЛИ(A14=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A15;2)=1;(B15-C15)/(D15+SIN(E15));(B15-C15)/(D15-COS(E15))) | =G14+F15 | =ЕСЛИ(A15=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A16;2)=1;(B16-C16)/(D16+SIN(E16));(B16-C16)/(D16-COS(E16))) | =G15+F16 | =ЕСЛИ(A16=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A17;2)=1;(B17-C17)/(D17+SIN(E17));(B17-C17)/(D17-COS(E17))) | =G16+F17 | =ЕСЛИ(A17=$B$1;"otvet") |
| =ЕСЛИ(ОСТАТ(A18;2)=1;(B18-C18)/(D18+SIN(E18));(B18-C18)/(D18-COS(E18))) | =G17+F18 | =ЕСЛИ(A18=$B$1;"otvet") |
5