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

UptoLike

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

107
{ фрагмент 18 }
y:=x;
for i:=1 to n do y:=(y+a)*x;
y:=y+a.
Пример 10.17. Вычислить y=1+x
n
/(2+x
n-1
/(3+x
n-2
/(.../(n+x)...).
Решение. Этот пример также похож на предыдущие. В нем используются
функция деления и натуральные числа от 1 до n. Аналогично предыдущим
примерам, здесь повторяется следующий оператор: y=i+p/y, где р - степень х.
Степень можно получить последовательными умножениями на х.
{ фрагмент 19 }
y:=1;
p:=1; { степени x }
for i:=n downto 1 do begin p:=p*x; y:=i+p/y end.
Упражнения:
1.Вычислите y=sin(n+sin(n-1+sin(...+sin(2+sin(1)...).
2. Вычислите y=(...(x-1)x-2)x-3)...)x-n.
3. Установите сходство и различия упражнений 1 и 2 и примеров 10.13 - 10.17.
Установите, по какому принципу были придуманы эти упражнения. Придумайте на
основе примеров 10.13 - 10.17 подобные упражнения и выполните их.
4. Вычислите выражение для n умножений. Например, для n=5
y=(((((x+a)
2
+a)
2
+a)
2
+a)
2
+a)
2
+a.
Пример 10.18. Вычислить y=sin(x)+sin(sin(x))+...+sin(...sin(x)...), в последнем
слагаемом функция вложена n раз.
Решение. Искомый результат является суммой, каждое слагаемое которой
имеет вид sin(sin(sin(...sin(x)...), где sin повторен n раз. Прямолинейным решением
этой задачи будет решение, в котором в тело цикла суммирования будет вложен
цикл вычисления очередного слагаемого. Задача вычисления очередного
слагаемого похожа на задачу примера 10.14, где функция cos заменена функцией
sin и отсутствуют натуральные числа, поэтому решение будет таким
:
{ фрагмент 20 }
y:=0; { начальное значение суммы }
for i:=1 to n do { в сумме n слагаемых }
begin s:=x; { начальное значение для очередного слагаемого }
for j:=1 to i do s:=sin(s);{ функция вкладывается i раз }
y:=y+s
end.
Цикл, находящийся в теле другого цикла, называется
вложенным.
Использование вложенных циклов упрощает программирование, но увеличивает
время решения задачи. Наличие вложенного цикла - недостаток фрагмента 20. От
него можно избавиться, если заметить, что при вычислении очередного слагаемого
можно использовать его предыдущее значение. Получаем фрагмент 21.
{ фрагмент 21 }
y:=0; { начальное значение суммы }
s:=x; { начальное значение слагаемого }
for i:=1 to n do
                                       107

    { фрагмент 18 }
    y:=x;
    for i:=1 to n do y:=(y+a)*x;
    y:=y+a.
    Пример 10.17. Вычислить y=1+xn/(2+xn-1/(3+xn-2/(.../(n+x)...).
    Решение. Этот пример также похож на предыдущие. В нем используются
функция деления и натуральные числа от 1 до n. Аналогично предыдущим
примерам, здесь повторяется следующий оператор: y=i+p/y, где р - степень х.
Степень можно получить последовательными умножениями на х.
    { фрагмент 19 }
    y:=1;
    p:=1; { степени x }
    for i:=n downto 1 do begin p:=p*x; y:=i+p/y end.
    Упражнения:
    1.Вычислите y=sin(n+sin(n-1+sin(...+sin(2+sin(1)...).
    2. Вычислите y=(...(x-1)x-2)x-3)...)x-n.
    3. Установите сходство и различия упражнений 1 и 2 и примеров 10.13 - 10.17.
Установите, по какому принципу были придуманы эти упражнения. Придумайте на
основе примеров 10.13 - 10.17 подобные упражнения и выполните их.
    4. Вычислите выражение для n умножений. Например, для n=5
y=(((((x+a)2+a)2+a)2+a)2+a)2+a.
    Пример 10.18. Вычислить y=sin(x)+sin(sin(x))+...+sin(...sin(x)...), в последнем
слагаемом функция вложена n раз.
    Решение. Искомый результат является суммой, каждое слагаемое которой
имеет вид sin(sin(sin(...sin(x)...), где sin повторен n раз. Прямолинейным решением
этой задачи будет решение, в котором в тело цикла суммирования будет вложен
цикл вычисления очередного слагаемого. Задача вычисления очередного
слагаемого похожа на задачу примера 10.14, где функция cos заменена функцией
sin и отсутствуют натуральные числа, поэтому решение будет таким:
    { фрагмент 20 }
    y:=0; { начальное значение суммы }
    for i:=1 to n do { в сумме n слагаемых }
    begin      s:=x; { начальное значение для очередного слагаемого }
               for j:=1 to i do s:=sin(s);{ функция вкладывается i раз }
               y:=y+s
    end.
    Цикл, находящийся в теле другого цикла, называется вложенным.
Использование вложенных циклов упрощает программирование, но увеличивает
время решения задачи. Наличие вложенного цикла - недостаток фрагмента 20. От
него можно избавиться, если заметить, что при вычислении очередного слагаемого
можно использовать его предыдущее значение. Получаем фрагмент 21.
    { фрагмент 21 }
    y:=0; { начальное значение суммы }
    s:=x; { начальное значение слагаемого }
    for i:=1 to n do