Интерактивный тренажер задания 8 демонстрационной версии ЕГЭ 2017 на "Анализ программы"
  главная : карта раздела : автора  
 


Интерактивный тренажер задания 8 демонстрационной версии ЕГЭ 2017
"Анализ программы "

Если в решении задачи, сгенерированной тренажером, вместо числового параметра появится запись
вроде NAN или иная несуразица, сообщите условие этой задачи в комментариях, расположенных ниже
и ошибка будет исправлена

 

Разбор решения задания 8 демоверсии ЕГЭ 2016 на Анализ программы.

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

var s, n: integer;

begin

  s := 0

  n := 0

  while s < 111 do begin

    s := s + 8

    n := n + 2

  end;

  writeln(n)

end.

Решение:

 

Из программы видно, что начальные значения переменных s и n равны соответственно 0 и 0

 

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

 

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

 

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

 

с каждым шагом цикла значение s увеличивается на 8, а значение n увеличивается на 2, так что n = 2 * k, где k – это число шагов цикла

 

поскольку s увеличивается на 8, делением нацело найдем значение s = 111/8 = 13

 

после k = 13, значение s станет = 13 * 8 = 104 < 111

 

поэтому количество прокруток увеличиваем. k = k+1 = 14, тогда n = 2 * k = 2 * 14 = 28

 

Правильный ответ  = 28, но проверим его прокруткой:

 

Пока выполняется условие 0 < 111, делать цикл! : s = s + 8 = 8 : n = n + 2 = 2

Пока выполняется условие 8 < 111, делать цикл! : s = s + 8 = 16 : n = n+ 2 = 4

Пока выполняется условие 16 < 111, делать цикл! : s = s + 8 = 24 : n = n + 2 = 6

Пока выполняется условие 24 < 111, делать цикл! : s = s + 8 = 32 : n = n + 2 = 8

Пока выполняется условие 32 < 111, делать цикл! : s = s + 8 = 40 : n = n + 2 = 10

Пока выполняется условие 40 < 111, делать цикл! : s = s + 8 = 48 : n = n + 2 = 12

Пока выполняется условие 48 < 111, делать цикл! : s = s + 8 = 56 : n = n + 2 = 14

Пока выполняется условие 56 < 111, делать цикл! : s = s + 8 = 64 : n = n + 2 = 16

Пока выполняется условие 64 < 111, делать цикл! : s = s + 8 = 72 : n = n + 2 = 18

Пока выполняется условие 72 < 111, делать цикл! : s = s + 8 = 80 : n = n + 2 = 20

Пока выполняется условие 80 < 111, делать цикл! : s = s + 8 = 88 : n = n + 2 = 22

Пока выполняется условие 88 < 111, делать цикл! : s = s + 8 = 96 : n = n + 2 = 24

Пока выполняется условие 96 < 111, делать цикл! : s = s + 8 = 104 : n = n + 2 = 26

Пока выполняется условие 104 < 111, делать цикл! : s = s + 8 = 112 : n = n + 2 = 28

112>111 выходим из цикла

   

Таким образом, правильный ответ  = 28

Интерактивный тренажер 8 ЕГЭ ДЕМО 2016
"Анализ программы "

Немного теории или как решать задачи

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

  • основные конструкции языка программирования
  • уметь выполнять ручную прокрутку программы
  • уметь выделять переменную цикла W, от изменения которой зависит количество шагов цикла - N
  • уметь определять количество шагов цикла N = (W - w0)/dw, где W - переменная цикла, dw - приращение изменения цикла и w0 - ее начальное значение
  • уметь определять переменную, которая выводится на экран
  • формула для вычисления n-ого элемента арифметической прогрессии:  аn = a1 + d(N – 1)
  • формулa для вычисления суммы первых n членов арифметической прогрессии: Sn = ((a1+an)/2)*N, где ann-ый элемент последовательности, d – шаг (разность) последовательности, N – количество прокруток цикла

Для начала разберемся с задачей, где переменные цикла независимые!

var n, s: integer;
begin
n := 24;
s := 0;
while n <= 28 do begin
s := s + 20;
n := n + 2;
end;
write(s);
write(n);
end.  

первый способ решения – «тупая прокрутка»

W                  s                            n
+                  20                           26
+                  40                           28
+                  60                           30

Второй способ – математический "умный способ"

N = (28-24)/2 = 2 = (но, так как в условии сказано меньше либо равно, то делаем +1, более подробно об этом можно посмотреть в методических рекомендациях по теме: "Анализ программы с несвязанными переменными") => N = 2 +1 = 3!
S = 20*3 = 60
n = 3*2+24 = 30

Скачать методические рекомендации по изучению темы в формате PDF:

Скачать методические рекомендации по изучению темы в формате DOC:


Интерактивный тренажер 8-1 ЕГЭ ДЕМО 2015
на "Анализ программы c несвязанными переменными "


Интерактивный тренажер 8-2 ЕГЭ ДЕМО 2015
на "Анализ программы c связанными переменными"


Интерактивный тренажер 8-3 ЕГЭ ДЕМО 2015
на "Анализ программы с переменной, введенной с клавиатуры "


Интерактивный тренажер 8 ЕГЭ ДЕМО 2015
на "Анализ программы"


Примеры задач, генерируемых интерактивным тренажером 8 ЕГЭ ДЕМО 2015 на "Анализ программы"

Задание №1

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

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

Решение:

Из программы видно, что начальные значения переменных s и n равны соответственно 42 и 1

цикл заканчивается, когда нарушается условие s >= 0, то есть количество шагов цикла определяется изменением переменной s

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

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

с каждым шагом цикла значение s уменьшается на 1, а значение n увеличивается в 2 раз(а), так что n = 2^k, где k – это число шагов цикла

поскольку s уменьшается на 1, конечное значение s должно быть равно 42-1*k , причём первое значение, меньшее или равное 0, достигается при k = 43 откуда s = 42-1*43 = -1

Правильный ответ = -1, но проверим его прокруткой:

Заметим, что переменная n в данном примере нам вовсе не нужна!

Правильный ответ = -1

 

Задание №2

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

var k, s: integer;
begin
s:=8;
k:=0;
while s < 579 do begin
s:=s+6;
k:=k+1;
end;
write(k);
end.

Решение:

Для решения задачи необходимо понять, что делает эта программа, анализируя которую видим, что начальные значения переменных k = 0 и s = 8

После окончания цикла выводится количество шагов записанное в переменной k Цикл заканчивается, когда нарушается условие s < 579, a k определяется изменением переменной s

Нам предстоит определить k, необходимое для того, чтобы значение s стало не меньше 579

C каждым шагом цикла s увеличивается на 6, а значение k – на 1, так что k – это счётчик шагов цикла

И поскольку s увеличивается на 6, конечное значение s должно быть кратно 6, то есть (579 - 8) / 6 = 95.1..., но количество циклов может быть только целым k = 96.

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

Но k – это счётчик шагов цикла следовательно конечное значение k будет равно 96

Правильный ответ = 96

Задание №3

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

var k, s: integer;
begin
s:=1;
k:=9;
while s < 723 do begin
s:=s+6;
k:=k+1;
end;
write(k);
end.

Решение:

Для решения задачи необходимо понять, что делает эта программа, анализируя которую видим, что начальные значения переменных k = 9 и s = 1

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

Цикл заканчивается, когда нарушается условие s < 723, a k определяется изменением переменной s

Нам предстоит определить k, необходимое для того, чтобы значение s стало не меньше 723

C каждым шагом цикла s увеличивается на 6, а значение k – на 1, так что k – это счётчик шагов цикла с началом отсчета = 9 и, поскольку s увеличивается на 6, конечное значение s должно быть кратно 6, то есть (723 - 1) / 6 = 120.3..., но количество циклов может быть только целым то и циклов будет 121.

Не забудем, что начальное значение k = 9 следовательно конечное значение k будет равно количествуциклов + 9 = 130

Правильный ответ = 130

 

Задание №4

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

var s, n: integer;
begin
s := 338
n := 1;
while s >= 0 do begin
s := s – 19
n := n * 2
end;
writeln(n)
end.

Решение:

Из программы видно, что начальные значения переменных s и n равны соответственно 338 и 1

цикл заканчивается, когда нарушается условие s >= 0, то есть количество шагов цикла определяется изменением переменной s

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

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

с каждым шагом цикла значение s уменьшается на 19, а значение n увеличивается в 2 раз(а), так что n = 2^k, где k – это число шагов цикла

поскольку s уменьшается на 19, конечное значение s должно быть равно 338-19*k , причём первое значение, меньшее или равное 0, достигается при k = 18 (и s = 338-19*18 = -4)

тогда n = 2^k = 2^18 = 262144

Правильный ответ = 262144

 

Задание №5

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

var k, s: integer;
begin s:=0;
k:=0;
while s < 580 do begin
s:=s+8;
k:=k+1;
end;
write(k);
end.

Решение:

Для решения задачи необходимо понять, что делает эта программа, анализируя которую видим, что начальные значения переменных k = 0 и s = 0

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

Цикл заканчивается, когда нарушается условие s < 580, a k определяется изменением переменной s

Нам предстоит определить k, необходимое для того, чтобы значение s стало не меньше 580

C каждым шагом цикла s увеличивается на 8, а значение k – на 1, так что k – это счётчик шагов цикла

И поскольку s увеличивается на 8, конечное значение s должно быть кратно 8, то есть 580 / 8 = 72.5, но посколькуколичество циклов может быть только целым k = 73.

Делаем вывод, что для достижения нужного значения переменную s нужно 73 раз(а) увеличить на 8, поэтому цикл выполнится 73 раз(а) Но k – это счётчик шагов цикла следовательно конечное значение k будет равно 73

Правильный ответ = 73

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

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

var k, s: integer;
begin
k:=7;
s:=2;
while k < 52 do begin
k:=k+8;
s:=s+k;
end;
write(s);
end.

Решение:

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

2) цикл заканчивается, когда k(K) >= 52, то есть конечное значение k становиться больше либо равно 52

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

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

5) поскольку начальное значение k(0) равно 7 и с каждым шагом оно увеличивается на d = 8, переменная k принимает последовательно значения: 7, 15, 23, , k(K)

6) количество циклов N находим с округлением до большего целого по формуле: N = [условие - k(0)]/d = 6

7) количество членов арифметической прогрессии, a(n) = a(1) + d (N - 1), где N - количество циклов, d - шаг и a(1) - первый элемент прогрессии a1 = 15; a(n) = 55, зная эти величины расчитываем сумму всех элементов прогрессии s = +S(n) = a(1) + a(2) + a(3)+ ... + a(n) = 15 + 23 + ... + 55

8) откуда s = [(15 + 55) / 2 ] * 6 = 210 9) к полученному результату нужно добавить начальное значение s(0) = 2

Правильный ответ = 212, но проверним его прокруткой:

N - 1 условие выполняется 7 < 52, входим в цикл! : k = k + 8 = 15 : s = s + 15 = 17
N - 2 условие выполняется 15 < 52, входим в цикл! : k = k + 8 = 23 : s = s + 23 = 40
N - 3 условие выполняется 23 < 52, входим в цикл! : k = k + 8 = 31 : s = s + 31 = 71
N - 4 условие выполняется 31 < 52, входим в цикл! : k = k + 8 = 39 : s = s + 39 = 110
N - 5 условие выполняется 39 < 52, входим в цикл! : k = k + 8 = 47 : s = s + 47 = 157
N - 6 условие выполняется 47 < 52, входим в цикл! : k = k + 8 = 55 : s = s + 55 = 212

Правильный ответ = 212

 

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

var k, s: integer;
begin
k:=8;
s:=4;
while k < 93 do begin
s:=s+k;
k:=k+3;
end;
write(s);
end.

Решение:

1) начальные значения переменных k(0) и s(0) равны соответственно 8 и 4

2) цикл заканчивается, когда k(K) >= 93, то есть конечное значение k становиться больше либо равно 93

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

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

5) поскольку начальное значение k(0) равно 8 и с каждым шагом оно увеличивается на d = 3, переменная k принимает последовательно значения: 8, 11, 14, … , k(K)

6) количество циклов N находим с округлением до большего целого по формуле: N = [условие - k(0)]/d = 29

7) количество членов арифметической прогрессии, a(n) = a(1) + d (N - 1), где N - количество циклов, d - шаг и a(1) - первый элемент прогрессии a1 = 8; a(n) = 92, зная эти величины расчитываем сумму всех элементов прогрессии s = +S(n) = a(1) + a(2) + a(3)+ ... + a(n) = 11 + 14 + ... + 92

8) откуда s = [(8 + 92) / 2 ] * 29 = 1450 9) к полученному результату нужно добавить начальное значение s(0) = 4

Правильный ответ = 1454

 

Определите, что будет напечатано в результате работы следующего фрагмента программы: var k, s: integer;
begin
k:=5;
s:=0;
while k <
95 do begin
s:=s+k;
k:=k+9;
end;
write(s);
end.

Решение:

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

2) цикл заканчивается, когда k(K) >= 95, то есть конечное значение k становиться больше либо равно 95

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

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

5) поскольку начальное значение k(0) равно 5 и с каждым шагом оно увеличивается на d = 9, переменная k принимает последовательно значения: 5, 14, 23, … , k(K)

6) количество циклов N находим с округлением до большего целого по формуле: N = [условие - k(0)]/d = 10

7) количество членов арифметической прогрессии, a(n) = a(1) + d (N - 1), где N - количество циклов, d - шаг и a(1) - первый элемент прогрессии a1 = 5; a(n) = 86, зная эти величины расчитываем сумму всех элементов прогрессии s = +S(n) = a(1) + a(2) + a(3)+ ... + a(n) = 14 + 23 + ... + 86

8) откуда s = [(5 + 86) / 2 ] * 10 = 455

9) к полученному результату нужно добавить начальное значение s(0) = 0

Правильный ответ = 455, но проверним его прокруткой:

1 - условие выполняется 5 < 95, входим в цикл! s = s + 5 = 5 : k = k + 9 = 14

2 - условие выполняется 14 < 95, входим в цикл! s = s + 14 = 19 : k = k + 9 = 23

3 - условие выполняется 23 < 95, входим в цикл! s = s + 23 = 42 : k = k + 9 = 32

4 - условие выполняется 32 < 95, входим в цикл! s = s + 32 = 74 : k = k + 9 = 41

5 - условие выполняется 41 < 95, входим в цикл! s = s + 41 = 115 : k = k + 9 = 50

6 - условие выполняется 50 < 95, входим в цикл! s = s + 50 = 165 : k = k + 9 = 59

7 - условие выполняется 59 < 95, входим в цикл! s = s + 59 = 224 : k = k + 9 = 68

8 - условие выполняется 68 < 95, входим в цикл! s = s + 68 = 292 : k = k + 9 = 77

9 - условие выполняется 77 < 95, входим в цикл! s = s + 77 = 369 : k = k + 9 = 86

10 - условие выполняется 86 < 95, входим в цикл! s = s + 86 = 455 : k = k + 9 = 95

Правильный ответ = 455

 

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

var k, s: integer;
begin
k:=8; s:=1;
while k < 59 do begin
k:=k+8;
s:=s+k;
end;
write(s);
end.

Решение:

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

2) цикл заканчивается, когда k(K) >= 59, то есть конечное значение k становиться больше либо равно 59

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

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

5) поскольку начальное значение k(0) равно 8 и с каждым шагом оно увеличивается на d = 8, переменная k принимает последовательно значения: 8, 16, 24, … , k(K)

6) количество циклов N находим с округлением до большего целого по формуле: N = [условие - k(0)]/d = 7

7) количество членов арифметической прогрессии, a(n) = a(1) + d (N - 1), где N - количество циклов, d - шаг и a(1) - первый элемент прогрессии a1 = 16; a(n) = 64, зная эти величины расчитываем сумму всех элементов прогрессии s = +S(n) = a(1) + a(2) + a(3)+ ... + a(n) = 16 + 24 + ... + 64

8) откуда s = [(16 + 64) / 2 ] * 7 = 280

9) к полученному результату нужно добавить начальное значение s(0) = 1

Правильный ответ = 281, но проверним его прокруткой:

1условие выполняется 8 < 59, входим в цикл! : k = k + 8 = 16 s = s + 16 = 17

2условие выполняется 16 < 59, входим в цикл! : k = k + 8 = 24 s = s + 24 = 41

3условие выполняется 24 < 59, входим в цикл! : k = k + 8 = 32 s = s + 32 = 73

4условие выполняется 32 < 59, входим в цикл! : k = k + 8 = 40 s = s + 40 = 113

5условие выполняется 40 < 59, входим в цикл! : k = k + 8 = 48 s = s + 48 = 161

6условие выполняется 48 < 59, входим в цикл! : k = k + 8 = 56 s = s + 56 = 217

7условие выполняется 56 < 59, входим в цикл! : k = k + 8 = 64 s = s + 64 = 281

Правильный ответ = 281


Возникли вопросы, сомнения или появились замечания, пишите...

 
© Северобайкальск, Russia
Александр Козлов, 2017

  Рейтинг@Mail.ru