Задача 4

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))

Вывод результата
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал
Объявление переменных

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))

Вывод результата
Объявление переменных
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал

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))

Вывод результата
Объявление переменных
X – аргумент S – сумма а – член ряда znak – знак члена ряда i – номер итерации j – счётчик циклов K – коэффициент FAKT – факториал

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))

Вывод результата
Вызов процедуры
Преобразование к целому типу
Вызов процедуры
Описание функции
Описание процедуры
Описание функции
Объявление переменных


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: