Конспект лекций по программированию для начинающих. Гладков В.П. - 107 стр.

UptoLike

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

109
10. Вычислите y=1
1
+2
2
+3
3
+4
4
+...+n
n
.
Пример 10.20. Дано натуральное число n. Найти сумму цифр этого числа.
Решение. Воспользуемся информацией главы 8 «Линейные алгоритмы» о том,
что для определения последней цифры числа нужно найти остаток от деления
этого числа на 10, а для отбрасывания этой цифры - найти частное от деления
целых чисел (операция div). В этом примере заранее неизвестно количество
выполнений цикла, но существует одна причина его окончания - цифры числа n
закончились,
поэтому этот цикл итерационный. Переменной этого цикла является
переменная, где хранится значение числа n, которое уменьшается от шага к шагу
на одну цифру, а когда все цифры закончатся, закончится и цикл.
{ фрагмент 23 }
s:=0; { сумма цифр числа n }
while n>0 do { пока есть цифры в числе n }
begin s:=s+n mod 10; { прибавить последнюю цифру к сумме }
n:=n div 10 { отбросить последнюю цифру }
end.
Пример 10.21. Дано натуральное число n. Выяснить, входит ли цифра 2 в
запись этого числа.
Решение. В теле цикла повторяются те же операции (найти и проанализировать
последнюю цифру, отбросить ее), что и в предыдущем примере. Однако причин
окончания цикла может быть две: цифра 2 входит в запись числа n и цифра 2 не
входит в запись этого числа. Следовательно, этот цикл должен быть построен как
поисковый с проверкой каждой
из двух причин его окончания.
{ фрагмент 24 }
f:=false;
while (n>0) and not f do
if n mod 10 =2 then f:=true else n:=n div 10;
if f then write('цифра 2 входит в число ')
else write('цифра 2 НЕ входит в запись числа').
Пример 10.22. Дано натуральное число n. Поменять порядок цифр числа n на
обратный.
Решение. Например, для n=1829 должно получиться m=9281. Здесь
используются те же операции, что и в примерах 10.20 и 10.21. Но последовательно
получаемые цифры числа не отбрасываются, а результат m домножается на 10 и
цифра прибавляется к результату. Цикл выполняется до тех пор, пока есть цифры в
исходном числе.
{ фрагмент 25 }
m:=0; { в начале результата нет }
while n>0 do
begin m:=m*10+n mod 10;
n:=n div 10
end.
Пример 10.23. Вычислить
y = n!! =
n если n - не кратно двум,
n, если n - кратно двум.
135
246
⋅⋅
⋅⋅⋅⋅
... ,
...
                                      109

10. Вычислите y=11+22+33+44+...+nn.
    Пример 10.20. Дано натуральное число n. Найти сумму цифр этого числа.
    Решение. Воспользуемся информацией главы 8 «Линейные алгоритмы» о том,
что для определения последней цифры числа нужно найти остаток от деления
этого числа на 10, а для отбрасывания этой цифры - найти частное от деления
целых чисел (операция div). В этом примере заранее неизвестно количество
выполнений цикла, но существует одна причина его окончания - цифры числа n
закончились, поэтому этот цикл итерационный. Переменной этого цикла является
переменная, где хранится значение числа n, которое уменьшается от шага к шагу
на одну цифру, а когда все цифры закончатся, закончится и цикл.
    { фрагмент 23 }
    s:=0; { сумма цифр числа n }
    while n>0 do { пока есть цифры в числе n }
    begin      s:=s+n mod 10; { прибавить последнюю цифру к сумме }
               n:=n div 10 { отбросить последнюю цифру }
    end.
    Пример 10.21. Дано натуральное число n. Выяснить, входит ли цифра 2 в
запись этого числа.
    Решение. В теле цикла повторяются те же операции (найти и проанализировать
последнюю цифру, отбросить ее), что и в предыдущем примере. Однако причин
окончания цикла может быть две: цифра 2 входит в запись числа n и цифра 2 не
входит в запись этого числа. Следовательно, этот цикл должен быть построен как
поисковый с проверкой каждой из двух причин его окончания.
    { фрагмент 24 }
    f:=false;
    while (n>0) and not f do
        if n mod 10 =2 then f:=true else n:=n div 10;
    if f then write('цифра 2 входит в число ')
    else write('цифра 2 НЕ входит в запись числа').
    Пример 10.22. Дано натуральное число n. Поменять порядок цифр числа n на
обратный.
    Решение. Например, для n=1829 должно получиться m=9281. Здесь
используются те же операции, что и в примерах 10.20 и 10.21. Но последовательно
получаемые цифры числа не отбрасываются, а результат m домножается на 10 и
цифра прибавляется к результату. Цикл выполняется до тех пор, пока есть цифры в
исходном числе.
    { фрагмент 25 }
    m:=0; { в начале результата нет }
    while n>0 do
    begin      m:=m*10+n mod 10;
               n:=n div 10
    end.
    Пример 10.23. Вычислить
          ⎧1 ⋅ 3 ⋅ 5⋅...⋅n, если n - не кратно двум,
y = n!! = ⎨
          ⎩2 ⋅ 4 ⋅ 6⋅...⋅n, если n - кратно двум.