8 (базовый уровень, время – 3 мин)

Тема:  Анализ программы.

Что нужно знать:

·      основные конструкции языка программирования:

o   объявление переменных

o   оператор присваивания

o   оператор вывода

o   циклы

·      уметь выполнять ручную прокрутку программы

·      уметь выделять переменную цикла, от изменения которой зависит количество шагов цикла

·      уметь определять количество шагов цикла

·      уметь определять переменную, которая выводится на экран

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

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

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

Пример задания:

Р-02. При каком наибольшем введенном числе 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, поэтому получаем два неравенства:

6)      в итоге значение d  – целое число – ограничено отрезком [34; 36], наибольшее из подходящих чисел равно 36

7)      Ответ: 36.

Ещё пример задания:

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

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

8)      Ответ:  243.

Ещё пример задания:

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

var k, s: integer;

begin

  s:=0;

  k:=0;

  while s < 1024 do begin

    s:=s+10;

    k:=k+1;

  end;

  write(k);

end.

 Решение:

1)      из программы видно, что начальные значения переменных k и s равны нулю

2)      цикл заканчивается, когда нарушается условие s < 1024, то есть количество шагов цикла определяется изменением переменной s

3)      после окончания цикла выводится значение переменной k

4)      таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало не меньше 1024

5)      с каждым шагом цикла значение s увеличивается на 10, а значение k – на единицу, так что фактически k – это счётчик шагов цикла

6)      поскольку s увеличивается на 10, конечное значение s должно быть кратно 10, то есть это 1030 > 1024

7)      для достижения этого значения переменную s нужно 103 раза увеличить на 10, поэтому цикл выполнится 103 раза

8)      так как k – это счётчик шагов цикла, конечное значение k будет равно 103

9)      Ответ:  103.

Возможные ловушки и проблемы:

·    можно перепутать переменную, которая выводится на экран (внимательно смотрим на оператор вывода)

Ещё пример задания:

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

var k, s: integer;

begin

  k:=5;

  s:=2;

  while k < 120 do begin

    s:=s+k;

    k:=k+2;

  end;

  write(s);

end.

 Решение:

1)      начальные значения переменных k и s равны соответственно 5 и 2

2)      цикл заканчивается, когда нарушается условие k < 120, то есть количество шагов цикла определяется изменением переменной k

3)      после окончания цикла выводится значение переменной s

4)      с каждым шагом цикла значение s увеличивается на k, а затем значение k – на 2, так что к начальному  значению s добавляется сумма членов арифметической  прогрессии с начальным значением  и разностью

5)      поскольку начальное значение k равно 5 и с каждым шагом оно увеличивается на 2, переменная k принимает последовательно нечётные значения: 5, 7, 9, …

6)      цикл заканчивается, когда значение k становится не меньше 120; поскольку k всегда нечётное, конечное значение k равно 121

7)      поскольку значение k увеличивается после того, как увеличивается значение s, значение 121 уже не входит в сумму, то есть последний элемент последовательности :

8)      количество  членов последовательности, которые входят в сумму, можно вычислить: чтобы из 5 получить 119 нужно 57 раз добавить шаг 2, поэтому общее число элементов последовательности равно (на один больше)

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

10)   к этой сумме нужно добавить начальное значение переменной s, равное 2:

11)   Ответ:  3598.

Возможные ловушки и проблемы:

·    попытка делать ручную трассировку, скорее всего, приведет к вычислительной ошибке, потому что число шагов слишком велико

·    легко забыть, что начальные значения переменных s и k не равны нулю

·    нужно помнить, что количество членов арифметической прогрессии на 1 больше, чем количество шагов, которые необходимы для перехода от первого значения к последнему

 


Задачи для тренировки[1]:

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

var k, s: integer;

begin

  s:=0;

  k:=1;

  while k < 11 do begin

    s:=s+k;

    k:=k+1;

  end;

  write(s);

end. 55

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

var k, s: integer;

begin

  s:=0;

  k:=0;

  while k < 30 do begin

    k:=k+3;

    s:=s+k;

  end;

  write(s);

end. 165

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

var k, s: integer;

begin

  s:=3;

  k:=1;

  while k < 25 do begin

    s:=s+k;

    k:=k+2;

  end;

  write(s);

end. 147

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

var k, s: integer;

begin

  s:=2;

  k:=2;

  while s < 50 do begin

    s:=s+k;

    k:=k+2;

  end;

  write(k);

end. 16

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

var k, s: integer;

begin

  s:=0;

  k:=0;

  while s < 100 do begin

    s:=s+k;

    k:=k+4;

  end;

  write(k);

end. 32

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

var k, s: integer;

begin

  s:=0;

  k:=1;

  while s < 66 do begin

    k:=k+3;

    s:=s+k;

  end;

  write(k);

end. 19

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

var k, s: integer;

begin

  s:=5;

  k:=0;

  while k < 15 do begin

    k:=k+2;

    s:=s+k;

  end;

  write(s);

end. 77

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

var k, s: integer;

begin

  s:=0;

  k:=0;

  while k < 12 do begin

    s:=s+2*k;

    k:=k+3;

  end;

  write(s);

end. 36

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

var k, s: integer;

begin

  s:=0;

  k:=0;

  while s < 80 do begin

    s:=s+2*k;

    k:=k+4;

  end;

  write(s);

end. 80

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

var k, s: integer;

begin

  s:=1;

  k:=0;

  while k < 13 do begin

    s:=s+2*k;

    k:=k+4;

  end;

  write(s+k);

end. 65

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

var n, s: integer;

begin

  n := 3;

  s := 0;

  while n <= 7 do begin

    s := s + n;

    n := n + 1

  end

  write(s)

end. 25

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

var n, s: integer;

begin

  n := 4;

  s := 0;

  while n <= 8 do begin

    s := s + n;

    n := n + 1

  end

  write(s)

end. 30

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

var n, s: integer;

begin

n := 4;

s := 0;

while n <= 13 do begin

  s := s + 15;

  n := n + 1

end;

write(s)

end. 150

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

var n, s: integer;

begin

n := 1;

s := 0;

while n <= 20 do begin

  s := s + 33;

  n := n + 1

end;

write(s)

end. 660

15)   (http://ege.yandex.ru) Определите, что будет напечатано в результате работы следующего фрагмента программы:

var n, s: integer;

begin

  n := 1;

  s := 0;

  while n <= 101 do begin

    s := s + 7;

    n := n + 1

  end;

  write(s)

end. 707

16)   (http://ege.yandex.ru) Определите, что будет напечатано в результате работы следующего фрагмента программы:

var n, s: integer;

begin

  n := 0;

  s := 512;

  while s >= 0 do begin

    s := s - 20;

    n := n + 1

  end;

  write(n)

end. 26

17)   (http://ege.yandex.ru) Определите, что будет напечатано в результате работы следующего фрагмента программы:

var n, s: integer;

begin

  n := 24;

  s := 0;

  while n <= 28 do begin

    s := s + 20;

    n := n + 2

  end;

  write(s)

end. 60

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

var n, s: integer;

begin

  n := 12;

  s := 5;

  while n <= 25 do begin

    s := s + 12;

    n := n + 2

  end;

  write(s)

end. 89

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

var n, s: integer;

begin

  n := 2;

  s := 35;

  while n <= 25 do begin

    s := s + 20;

    n := n + 5

  end;

  write(s)

end. 135

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

var n, s: integer;

begin

  n := 4;

  s := 15;

  while s <= 250 do begin

    s := s + 12;

    n := n + 2

  end;

  write(n)

end. 44

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

var n, s: integer;

begin

  n := 0;

  s := 0;

  while s <= 35 do begin

    n := n + 1;

    s := s + 4

  end;

  write(n)

end. 9

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

var n, s: integer;

begin

n := 0;

s := 0;

while s <= 256 do begin

  s := s + 25;

  n := n + 1

end;

write(n)

end. 11

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

var n, s: integer;

begin

n:= 0;

s:= 0;

while s <= 365 do begin

  s:= s + 33;

  n:= n + 5

end;

write(n)

end. 60

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

var n, s: integer;

begin

n:= 0;

s:= 0;

while s <= 365 do begin

  s:= s + 36;

  n:= n + 10

end;

write(n)

end. 110

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

var n, s: integer;

begin

n := 1;

s := 0;

while s <= 365 do begin

  s := s + 36;

  n := n * 2

end;

write(n)

end. 2048

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

program B05;

var n, s: integer;

begin

  n := 0;

  s := 1;

  while s <= 1000 do begin

    s := s * 3;

    n := n + 3;

  end;

  write(n)

end.21

27)   При каком наименьшем введенном числе d после выполнения программы будет напечатано 67?

var n, s, d: integer;

begin

  readln(d);

  n := 2;

  s := 0;

  while s <= 365 do begin

    s := s + d;

    n := n + 5

  end;

  write(n)

end. 29

28)   При каком наибольшем введенном числе d после выполнения программы будет напечатано 89?

var n, s, d: integer;

begin

  readln(d);

  n := 5;

  s := 83;

  while s <= 1200 do begin

    s := s + d;

    n := n + 6

  end;

  write(n)

end. 85

29)   При каком наименьшем введенном числе d после выполнения программы будет напечатано 63?

var n, s, d: integer;

begin

  readln(d);

  n := 3;

  s := 57;

  while s <= 1200 do begin

    s := s + d;

    n := n + 4

  end;

  write(n)

end. 77

30)   При каком наибольшем введенном числе d после выполнения программы будет напечатано 150?

var n, s, d: integer;

begin

  readln(d);

  n := 3;

  s := 38;

  while s <= 1200 do begin

    s := s + d;

    n := n + 7

  end;

  write(n)

end. 58

31)   При каком наименьшем введенном числе d после выполнения программы будет напечатано 121?

var n, s, d: integer;

begin

  readln(d);

  n := 1;

  s := 46;

  while s <= 2700 do begin

    s := s + d;

    n := n + 4

  end;

  write(n)

end. 89

32)   При каком наибольшем введенном числе d после выполнения программы будет напечатано 46?

var n, s, d: integer;

begin

  readln(d);

  n := 8;

  s := 78;

  while s <= 1200 do begin

    s := s + d;

    n := n + 2

  end;

  write(n)

end.62

33)   Запишите число, которое будет напечатано в результате выполнения следующей программы:

var n, s: integer;

begin

  n := 1;

  s := 0;

  while n <= 650 do begin

    s := s + 20;

    n := n * 5

  end;

  write(s)

end.100

34)   Запишите число, которое будет напечатано в результате выполнения следующей программы:

var n, s: integer;

begin

  n := 1;

  s := 0;

  while n <= 300 do begin

    s := s + 30;

    n := n * 5

  end;

  write(s)

end. 120

35)   Запишите число, которое будет напечатано в результате выполнения следующей программы:

var s, n: integer;

begin

  s := 0;

  n := 0;

  while s < 111 do begin

    s := s + 8;

    n := n + 2

  end;

  writeln(n)

end.28

 



[1] Источники заданий:

1.   Демо-варианты ЕГЭ 2012-2016 гг.

2.   Тренировочные и диагностические работы МИОО.