Погода
Календарь
Март 2019
Пн Вт Ср Чт Пт Сб Вс
« Сен    
 123
45678910
11121314151617
18192021222324
25262728293031
Страницы сайта

Анализ программ.

АЛГОРИТМИЧЕСКИЕ СТРУКТУРЫ С ЦИКЛАМИ

В задании используются алгоритмические структуры с циклами.

СУММА АРИФМЕТИЧЕСКОЙ ПРОГРЕССИИ

Формула для вычисления n-ого элемента арифметической прогрессии:

an = a1 + d * (n-1)

Формула для вычисления суммы первых n членов арифметической прогрессии:

суммы первых членов арифметической прогрессии

где:

  • ai – i-ый элемент последовательности,
  • d – шаг (разность) последовательности.

СУММА ГЕОМЕТРИЧЕСКОЙ ПРОГРЕССИИ

Свойство геометрической прогрессии:


bn2 = bn+1 * qn-1

Формула для вычисления знаменателя геометрической прогрессии:

q= bn+1/ bn

Формула для вычисления n-ого элемента геометрической прогрессии:                              

bn = b1 * qn-1

bn = bn-1 * q

Формула для вычисления знаменателя геометрической прогрессии:Формула для вычисления суммы первых n членов геометрической прогрессии:

Sn= (b1 − bn ∗ q) / (1−q)

Sn= b1 ∗ (1− qn )  / (1−q)

где:

  • bi – i-ый элемент последовательности,
  • q – знаменатель последовательности.

Решение заданий.

Задание 1.  При каком наибольшем введенном числе d после выполнения программы будет напечатано 55?

var n, s, d: integer;
begin
readln(d);
n := 0;
  s := 0;
while s <= 365 do begin
s := s + d;
n := n + 5
end;
write(n)
end.

 Решение:

  1. из программы видно, что начальные значения переменных s и n равны нулю
  2. шаг изменения переменной n равен 5, а шаг изменения переменной s равен неизвестному значению d
  3. для того, чтобы значение n стало равно 55, нужно увеличить его на 5 (с нуля) ровно 11 раз, поэтому цикл выполнится ровно 11 раз
  4. следовательно, s увеличится на d тоже 11 раз и станет равно 0 + 11·d = 11·d
  5. чтобы цикл остановился на 11-м шаге, нужно выполнить условие 11·d > 365, при этом он не должен остановиться на 10-м шаге, то есть, 10·d <= 365, поэтому получаем два неравенства:
  • в итоге значение d  – целое число – ограничено отрезком [34; 36], наибольшее из подходящих чисел равно 36. Ответ: 36.

Задание 2.  Запишите число, которое будет напечатано в результате выполнения программы.

var s, n: integer;
begin
s := 33;
n := 1;
while s > 0 do begin
    s := s – 7;
    n := n * 3
  end;
  writeln(n)
end.

 Решение:

  1. из программы видно, что начальные значения переменных s и n равны соответственно 33 и 1
  2. цикл заканчивается, когда нарушается условие s > 0, то есть количество шагов цикла определяется изменением переменной s
  3. после окончания цикла выводится значение переменной n
  4. таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало меньше или равно 0
  5. с каждым шагом цикла значение s уменьшается на 7, а значение n увеличивается в 3 раза, так что n=3k, где k – это число шагов цикла
  6. поскольку s уменьшается на 7, конечное значение s должно быть равно 33-7*k , причём первое значение, меньшее или равное 0, достигается при k=5s=33–7*5=-2)
  7. тогда n=3k=35=243. Ответ:  243.

Задание 3.  За­пи­ши­те число, ко­то­рое будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния про­грам­мы. Для Ва­ше­го удоб­ства про­грам­ма пред­став­ле­на на пяти язы­ках про­грам­ми­ро­ва­ния.

Решение:

Цикл while вы­пол­ня­ет­ся до тех пор, пока ис­тин­но усло­вие n ≤ 100, т. е. пе­ре­мен­ная n опре­де­ля­ет, сколь­ко раз вы­пол­нит­ся цикл. По­сколь­ку из­на­чаль­но n = 1 и на каж­дом шаге n уве­ли­чи­ва­ет­ся в три раза, цикл вы­пол­нит­ся пять раз. Сле­до­ва­тель­но, после вы­пол­не­ния цикла s при­мет зна­че­ние 30 · 5 = 150. Ответ: 150.

Задание 4.  Опре­де­ли­те, что будет на­пе­ча­та­но в ре­зуль­та­те ра­бо­ты сле­ду­ю­ще­го фраг­мен­та про­грам­мы:

var n, s: integer;
begin
 n := 4;
 s := 15;
while s <= 250 do begin
      s := s + 12;
      n := n + 2
    end;
    write(n)
end.

Решение:

Нач­нем ана­ли­зи­ро­вать про­грам­му.
1)После вы­пол­не­ния пер­во­го цикла s = 27, n = 6
2)s = 39, n = 8
3)s = 51, n= 10
…..
18)s = 231, n = 40
19)s = 243, n = 42
20)s = 255, n = 44 так как s > 250 сле­до­ва­тель­но про­грам­ма оста­нав­ли­ва­ет­ся, зна­чит n = 44.   Ответ: 44.

Задание 5.  За­пи­ши­те число, ко­то­рое будет на­пе­ча­та­но в ре­зуль­та­те вы­пол­не­ния сле­ду­ю­щей про­грам­мы. Для Ва­ше­го удоб­ства про­грам­ма пред­став­ле­на на пяти язы­ках про­грам­ми­ро­ва­ния.

Решение:

Цикл прервётся тогда, когда будет вы­пол­не­но не­ра­вен­ство 2*s2>=123. Найдём наи­мень­шее целое s, при ко­то­ром оно вы­пол­нит­ся. Столь­ко же раз вы­пол­нит­ся цикл.
Наи­мень­шее целое s=8 . Тогда n=2*8=16. Ответ: 16

Задание 6.  Определите значение целочисленных переменных  a и  b после выполнения фрагмента программы:
a := 3 + 8*4;
b := (a div 10) + 14;              
a := (b mod 10) + 2;

Решение:
Операция div делит число с отбрасыванием остатка.
Операция mod оставляет только остаток от деления числа.
a := 3 + 8*4 = 35
b := (a div 10) + 14 = (3) + 14 = 17
a := (b mod 10) + 2 = (7) + 2 = 9
Ответ: 9, 17

Задание 7.  Определите значение переменной с после выполнения следующего фрагмента программы:
a := 30;
b := 6;
a := a / 2 * b;
if a > b then
c := a — 3 * b
else c := a + 3 * b;

Решение.
Операция div делит число с отбрасыванием остатка.
Операция mod оставляет только остаток от деления числа.
a := 30;
b := 6;
a := a / 2 * b = 90;
if a > b then
c := a — 3 * b = 90 — 18 = 72
else c := a + 3 * b;
Ответ: 72

Задание 8.   Определите значение переменной с после выполнения следующего фрагмента программы:
a := 6*12 + 3;
b := a div 10 + 5;
a := b mod 10 + 1;
c := a*a + b*b – a / 2 * b;

Решение:
Операция div делит число с отбрасыванием остатка.
Операция mod оставляет только остаток от деления числа.
a := 6*12 + 3 = 72 + 3 = 75;
b := a div 10 + 5 = 7 + 5 = 12;
a := b mod 10 + 1 = 2 + 1 = 3;
c := a*a + b*b – a / 2 * b = 9 + 144 — 18 = 135;
Ответ: 135

Задание 9. (Демонстрационный вариант ЕГЭ по информатике 2018 года). Запишите число, которое будет напечатано в результате выполнения следующей программы.

Решение:

  • Строить таблицу изменения значений в данном примере нецелесообразно, т. к. начальное значение s=260, а в цикле s уменьшается лишь на 15.
  • Вычислим сколько раз выполнялся цикл while s > 0 do
    • Программа выйдет из цикла как только условие s > 0 станет ЛОЖНЫМ, т. е. приs ≤ 0 цикл закончится.
    • В каждом шаге цикла s уменьшается на 15, следовательно 260 / 15 = 17,333…
    • Вывод: программа выполнит 18 (17,3333… округляем вверх до ближайшего целого) шагов.
    • На выходе:

s = 260 — 18*15 = -10   ,    n = 18*2 (т.к. каждый шаг цикла увеличивает n на 2) = 36

Ответ: 36

Top