Основы алгоритмизации и программирования. Часть первая. Алгоритмический язык. Операторы. Асламова В.С - 24 стр.

UptoLike

Составители: 

47
B=(2N
2
+1)*C*H
НАЧАЛО
КОНЕЦ
S:=1; H:=1;
N:=0; C:=1;
Печать
Ввод X, E
|B| > E
нет
да
N:=N+1;
H=H*
x
2
(2N–1)2N
C:=
C;
S:=S+B;
Печать
Сумма ряда S
Число членов N
C =
()
–1
n
; H =
x
2n
()
2n !
; B =
()
2n
2
+ 1 *C*H.
Возведение в степень для некоторых алгоритмических языков
вычисляется с помощью логарифмов, поэтому разрешается возводить
отрицательное число в квадрат. Учитывая этот факт, будем рассчитывать
значение C через предыдущее С = – C.
где C =
+1 при n нечетном
, –1 при n четном.
Тогда начальное значение C = 1. Сомножитель H будем вычислять
по рекуррентной формуле.
H = H *
x
2
()
2n – 1 2n
, где под H справа от
знака “=” подразумевается предыдущее значение
H, а под H слевапоследующее его значение.
При накоплении произведения начальное
значение H = 1.
Накопление суммы ряда будем
производить в переменной S, используя формулу
S = S + B. За начальное значение S в нашем
примере следует взять 1.
Программа 5
Var x,eps,S,H,B:real;
n,C:integer;
begin writeln(‘Введите переменную и точность
расчета ’);
readln(x,eps);
B:=1; S
:
=1; H
:
=1 n
:
=0; C
:
=1;
while ABS(B)>eps do begin
n
:
=n+1; H
:
=H*SQR(x)/((2*n–1)*(2*n));
C
:
=–C; B
:
= (2*SQR(n)+1)*C*H; S
:
=S+B;
end;
writeln(‘Сумма ряда = ’,S);
writeln(‘ число членов ряда n = ’,n)
End.
Р
исунок 34 Блок-схема
программы 5
48
Пример 12 Итерационный цикл
Для целого положительного десятичного числа n подсчитать сумму
S цифр числа и их количество K. Для целого числа существует две
операции деления n
mod 10 – остаток от деления числа n на 10, и n div 10
целая часть от деления числа n на 10.
В начале выделяем количество единиц (пусть n = 32876)
n
mod 10 = 6, n div 10 = 3287. Проверяем, если n div 10 0, то вновь
повторяем эти две операции.
Программа 6
Var A, n: longint;
K,S: byte;
begin write('Введите целое
положительное число');
readln(n);
A
:
=n; K
:
=0; S
:
=0;
while n div 10 <> 0 do begin
S
:
=S+n mod 10;
K
:
=K+1;
n
:
=n div 10 end;
writeln('В числе ',A,' количество
цифр = ',K,' их сумма = ',S);
End.
Оператор цикла с постусловием
Repeat
Оператор
Условие выхода
из цикла
Until
;
;
Рисунок 36 Оператор цикла с постусловием
Этот оператор аналогичен предыдущему оператору и отличается от
него тем, что условие проверяется после выполнения очередной итерации
(тем самым гарантируется хотя бы однократное выполнение цикла). Если
НАЧАЛО
КОНЕЦ
A:=n;
K:=0; S:=0
S:=S+n
mod10;
K:=K+1;
n:=n div10
Экран
Ввод n
Экран
S,K
n div10<>0
Рисунок 35 Блок-схема
п
р
ог
р
аммы 6
                     x 2n                                                       Пример 12 Итерационный цикл
 C = (–1)n;    H=          ;    B = (2n2 + 1)*C*H.
                    (2n) !                                                            Для целого положительного десятичного числа n подсчитать сумму
      Возведение в степень для некоторых алгоритмических языков                 S цифр числа и их количество K. Для целого числа существует две
вычисляется с помощью логарифмов, поэтому разрешается возводить                 операции деления n mod 10 – остаток от деления числа n на 10, и n div 10 –
отрицательное число в квадрат. Учитывая этот факт, будем рассчитывать           целая часть от деления числа n на 10.
значение C через предыдущее С = – C.                                                  В начале выделяем количество единиц (пусть n = 32876)
        ⎧ +1 при n нечетном
где C = ⎨                                                                       n mod 10 = 6, n div 10 = 3287. Проверяем, если n div 10 ≠ 0, то вновь
        ⎩, –1 при n четном.
                                                                                повторяем эти две операции.
      Тогда начальное значение C = 1. Сомножитель H будем вычислять
по рекуррентной формуле.                                                                                         Программа 6
                                                                                      НАЧАЛО

      НАЧАЛО                                x2                                         Экран                     Var A, n: longint;
                                     H=H*           , где под H справа от
                                        (2n – 1) 2n                                    Ввод n                         K,S: byte;
       Печать             знака “=” подразумевается предыдущее значение
      Ввод X, E                                                                         A:=n;                    begin      write('Введите             целое
                          H, а под H слева – последующее его значение.
                                                                                      K:=0; S:=0                 положительное число');
                          При накоплении произведения начальное
     S:=1; H:=1;          значение H = 1.                                                                                readln(n);
     N:=0; C:=1;                                                                                       Экран
                                 Накопление      суммы      ряда   будем              n div10<>0        S,K                A:=n; K:=0; S:=0;
                          производить в переменной S, используя формулу
                      нет                                                                                        while n div 10 <> 0 do begin
        |B| > E           S = S + B. За начальное значение S в нашем                    S:=S+n
                                                                                        mod10;
              да          примере следует взять 1.                                                                    S:=S+n mod 10;
                                                                                        K:=K+1;
       N:=N+1;            Программа 5                                                  n:=n div10                     K:=K+1;
                               Var x,eps,S,H,B:real;                                                  КОНЕЦ
              2                                                                                                        n:=n div 10           end;
           x                                n,C:integer;
    H=H*
        (2N–1)2N                                                                 Рисунок 35 Блок-схема            writeln('В     числе ',A,' количество
                                 begin writeln(‘Введите переменную и точность
                                                                                 программы №6                     цифр = ',K,' их сумма = ',S);
                               расчета ’);
       C:=–C;
                                      readln(x,eps);                                                              End.
         2
    B=(2N +1)*C*H                     B:=1; S:=1; H:=1 n:=0; C:=1;
                                                                                Оператор цикла с постусловием
                               while ABS(B)>eps do begin
       S:=S+B;                                                                        Repeat                                          Условие выхода
                                 n:=n+1; H:=H*SQR(x)/((2*n–1)*(2*n));                                Оператор            Until           из цикла      ;
                                 C:=–C; B:= (2*SQR(n)+1)*C*H; S:=S+B;
         Печать                end;                                                                      ;
     Сумма ряда S
     Число членов N            writeln(‘Сумма ряда = ’,S);
                               writeln(‘ число членов ряда n = ’,n)             Рисунок 36 Оператор цикла с постусловием
        КОНЕЦ                  End.
                                                                                       Этот оператор аналогичен предыдущему оператору и отличается от
 Рисунок 34 Блок-схема                                                          него тем, что условие проверяется после выполнения очередной итерации
 программы №5                                                                   (тем самым гарантируется хотя бы однократное выполнение цикла). Если

                                                                          47    48