1. Условие: Составить схему алгоритма и написать ВР-программу вычисления суммы бесконечного ряда для заданного значения переменной и формулы общего члена ряда (см. табл. П. 1). Предусмотреть завершение суммирования и печать результата при достижении очередным членом ряда абсолютной величины, меньшей, чем 0.0001.
Пример: значение переменной – 0.1;
Формула общего члена ряда
2. Тексты программ:
PROGRAM z41; (* 1-й способ с оператором перехода GOTO *)
CONST
k=2; (* поименованная константа *)
LABEL 1; (* метка *)
VAR
x,s,a:REAL;(* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы, переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
1: i:=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO fakt:=fakt*j;
a:=znak*EXP((k*i+1)*LN(k*x))/fakt;
s:=s+a;
IF ABS (a)>0.0001 THEN GOTO 1;
WRITE (‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN (‘на’ 4:2,‘-ой итерации’);
END.
3а) Схема алгоритма задачи 4 (1-й способ (опера-торы IF и GOTO))
|
|
|
PROGRAM z42;
(* 2-й способ с оператором цикла WHILE *)
CONST
k=2; (* поименованная константа *)
VAR
x,s,a:REAL;(* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы,
переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
a:=1;
WHILE ABS (a)>0.0001 DO
BEGIN
i=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO
fakt:=fakt*i;
a:=znak*EXP((k*i+1)*LN(k*x))/fakt;
s:=s+a;
END;
WRITE (‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN (‘на ’i:2,‘-ой итерации’);
END.
3б) Схема алгоритма задачи 4 (2-й способ (цикл WHILE))
|
|
|
PROGRAM z43;
(* 3-й способ с оператором цикла REPEAT *)
CONST
k=2; (* поименованная константа *)
VAR
x,s,a:REAL;(* переменная, сумма, элемент суммы *)
i,j,znak,fakt:INTEGER; (* номер элемента суммы, переменная цикла, знак, факториал *)
BEGIN
s:=0.0;
i:=0;
znak:=1;
x:=0.1;
REPEAT
i:=i+1;
znak:=znak*(-1);
fakt:=1;
FOR j:=1 TO (k*i+1) DO
fakt:=fakt*j;
a:=znak*EXP((k*i+1)*LN(k*x)/fakt;
s:=s+a:
UNTIL ABS (a)>0.0001;
WRITE (‘При а= ’,а:9:7, ‘сумма= ’,s:9:7);
WRITELN (‘на ’ i:2,‘-ой итерации’);
END.
3в) Схема алгоритма задачи 4 (3-й способ (цикл REPEAT))
|
|
|
PROGRAM z44; (* 4-й способ с операторами описания и вызова процедур и функций *)
CONST
k=2; (* поименованная константа)
VAR
x,s,a,i:REAL; (* переменная, сумма, элемент суммы,
номер элемента суммы *)
i1:INTEGER; (* целый тип номера элемента суммы *)
FUNCTION fakt(f:INTEGER):INTEGER; (* функция факториал *)
VAR fak,j:INTEGER; (* локальные переменные *)
BEGIN
fak:=1;
FOR j:=1 TO f DO
fak:=fak*j;
fakt:=fak;
END;
PROCEDURE summa(VAR,s:REAL; b:REAL);(* процедура суммы *)
BEGIN
s:=s+b;
END;
FUNCTION stepen(osn:REAL;step:INTEGER):RЕАL; (* функция степени *)
VAR k:INTEGER;(* локальные*)
st:REAL; (* переменные *)
BEGIN
st:=1.0;
FOR k:=1 TO step DO
st:=st*osn;
stepen:=st;
END;
BEGIN
s:=0.0;
i:=0;
x:=0.1;
REPEAT
summa(i,1.0);
i1:=TRUNC(i);
a:=stepen(-1.0,i1)* stepen(k*x,k*i1+1)/fakt(k*i1+1);
summa(s,a);
UNTIL ABS (a)<0.0001;
WRITE (‘При a= ’,a:9:7, ‘сумма= ’,s:9:7);
WRITELN (‘на ’,i1:2,‘-ой итерации’);
END.
3г) Схема алгоритма задачи 4 (4-й способ (FUNCTION и PROCEDURE))
|
|
|
|
|
|
|
|