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

UptoLike

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

104
Решение 3. Можно вначале найти сумму слагаемых, входящих в требуемую
сумму со знаком минус, затем - сумму слагаемых, входящих в требуемую сумму со
знаком плюс. Эти задачи уже решались нами (см. фрагменты 2 и 3 в подразделе
10.4.2). Затем из второй суммы вычтем первую и получим ответ для поставленной
задачи. Решение приведено во фрагменте 10.
{ фрагмент 10 }
readln(N);
sn:=0; { сумма нечетных }
i:=1;
while i<=N do
begin sn:=sn+i;
i:=i+2;
end;
sс:=0; { сумма четных }
i:=2;
while i<=N do
begin sс:=sс+i;
i:=i+2;
end;
s:=sc-sn; { ответ задачи }.
Упражнение. Измените фрагмент 10 так, чтобы он решал задачу фрагмента 8.
Пример 10.12. Усложним пример 10.11. Пусть нужно найти сумму вида s =
1+2-3+4+5-6+... . В сумму входит n слагаемых.
Решение. Попытаемся применить предыдущее решение 3. Для этого нужно
вначале сложить все числа, а затем сложить числа, кратные трем. Вычтя из первой
суммы утроенную вторую, получим ответ задачи. В самом деле, например, для n=6
получим 1+2+3+4+5+6= 1+2+4+5+3+6-2·(3+6).
Несложно применить и второе решение предыдущей задачи для решения
данной. Для этого достаточно из суммы вычитать числа,
кратные трем, а остальные
прибавлять. Получим фрагмент 11.
{ фрагмент 11 }
s:=0;
for i:=1 to n do
if i mod 3=0
then s:=s-i
else s:=s+i.
Чуть сложнее применить первое решение предыдущей задачи для решения
данной. Здесь нельзя изменять знак в цикле при каждом его исполнении.
Возможные решения представлены в приведенных ниже фрагментах 12 и 13.
{ фрагмент 12 }
s:=0; { начальное значение суммы }
z:=1; { начальное значение знака + }
for i:=1 to n do { цикл выполняется n раз }
begin if i mod 3=0 { если i
кратно трем, }
then z:=-1 { то знак слагаемого - }
else z:=1; { иначе знак слагаемого + }
                                     104

    Решение 3. Можно вначале найти сумму слагаемых, входящих в требуемую
сумму со знаком минус, затем - сумму слагаемых, входящих в требуемую сумму со
знаком плюс. Эти задачи уже решались нами (см. фрагменты 2 и 3 в подразделе
10.4.2). Затем из второй суммы вычтем первую и получим ответ для поставленной
задачи. Решение приведено во фрагменте 10.
    { фрагмент 10 }
    readln(N);
    sn:=0; { сумма нечетных }
    i:=1;
    while i<=N do
    begin      sn:=sn+i;
               i:=i+2;
    end;
    sс:=0; { сумма четных }
    i:=2;
    while i<=N do
    begin      sс:=sс+i;
               i:=i+2;
    end;
    s:=sc-sn; { ответ задачи }.
    Упражнение. Измените фрагмент 10 так, чтобы он решал задачу фрагмента 8.
    Пример 10.12. Усложним пример 10.11. Пусть нужно найти сумму вида s =
1+2-3+4+5-6+... . В сумму входит n слагаемых.
    Решение. Попытаемся применить предыдущее решение 3. Для этого нужно
вначале сложить все числа, а затем сложить числа, кратные трем. Вычтя из первой
суммы утроенную вторую, получим ответ задачи. В самом деле, например, для n=6
получим 1+2+3+4+5+6= 1+2+4+5+3+6-2·(3+6).
    Несложно применить и второе решение предыдущей задачи для решения
данной. Для этого достаточно из суммы вычитать числа, кратные трем, а остальные
прибавлять. Получим фрагмент 11.
    { фрагмент 11 }
    s:=0;
    for i:=1 to n do
       if i mod 3=0
       then s:=s-i
       else s:=s+i.
    Чуть сложнее применить первое решение предыдущей задачи для решения
данной. Здесь нельзя изменять знак в цикле при каждом его исполнении.
Возможные решения представлены в приведенных ниже фрагментах 12 и 13.
    { фрагмент 12 }
    s:=0; { начальное значение суммы }
    z:=1; { начальное значение знака + }
    for i:=1 to n do { цикл выполняется n раз }
    begin      if i mod 3=0 { если i кратно трем, }
               then z:=-1 { то знак слагаемого - }
               else z:=1; { иначе знак слагаемого + }