8 задание ЕГЭ информатика

Урок посвящен разбору задания 8 ЕГЭ по информатике

Объяснение заданий 8 ЕГЭ по информатике

8-я тема — «Программирование алгоритмов с циклами» — характеризуется, как задания базового уровня сложности, время выполнения – примерно 3 минуты, максимальный балл — 1

Алгоритмические структуры с циклами

В 8 задании ЕГЭ используются алгоритмические структуры с циклами. Рассмотрим их на примере языка Паскаль.

Сумма арифметической прогрессии

Формула для вычисления n-ого элемента арифметической прогрессии:
an = a1 + d(n-1)

Сумма арифметической прогрессии

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

где:

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

Сумма геометрической прогрессии

Свойство геометрической прогрессии:
bn2 = bn+1 * qn-1

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

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

\[ q = \frac {b_{n+1}}{b_n} \]

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

Формула для вычисления n-ого элемента геометрической прогрессии:
bn = b1 * qn-1
bn = bn-1 * q

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

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

\[ S_{n} = \frac {b_1-b_{n}*q}{1-q} \]

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

\[ S_{n} = b_{1} * \frac {1-q^n}{1-q} \]

члены геометрической прогрессии
где:

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

Решение заданий 8 ЕГЭ по информатике

Простые задания с двумя линейными непересекающимися функциями


8_3: ЕГЭ по информатике 2017 задание ФИПИ вариант 15 (Крылов С.С., Чуркина Т.Е.):

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

1
2
3
4
5
6
7
8
9
10
11
var k,s:integer;
begin
  s:=512;
  k:=0;
  while s < 2048 do
    begin
      s:=s + 64;
      k:=k + 1;
     end;
  write(k);
end.
Бейсик:

DIM S, K AS INTEGER
S = 512
K = 0
WHILE S < 2048
  S = S + 64
  K = K + 1
WEND
PRINT K
Python:

s = 512
k = 0
while s < 2048:
  s = s + 64
  k = k + 1
print(k)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 512, k = 0;
while (s < 2048) {
  s = s + 64;
  k = k + 1;
}
cout << k << endl;
return 0;
}

  
Подобные задания для тренировки


✍ Решение:

Рассмотрим алгоритм программы:

  • В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла значение k выводится на экран, т.е. это и есть результат работы программы.
  • В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на s < 1536 (2048 - 512 = 1536):
s:=0;
k:=0;
while s < 1536 do
   begin
   ...
  • Цикл будет выполняться пока s<1536, а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:
1536 / 64 = 24
  • Соответственно, k = 24.

Результат: 24

Для более детального разбора предлагаем посмотреть видео решения данного 8 задания ЕГЭ по информатике:



8_2: Решение 8 задания ЕГЭ по информатике (контрольный вариант № 2 экзаменационной работы 2018 года, С.С. Крылов, Д.М. Ушаков):

Определите, что будет напечатано в результате выполнения программы:
  
Паскаль:

1
2
3
4
5
6
7
8
9
10
11
var s, i: integer;
begin
i := 1;
s := 105;
while s > 5 do
begin
  s := s - 2;
  i := i + 1
end;
writeln(i)
end.
Бейсик:

DIM S, I AS INTEGER
I = 1
S = 105
WHILE S > 5
  S = S - 2
  I = I + 1
WEND
PRINT I
Python:

i = 1
s = 105
while s > 5:
  s = s - 2
  i = i + 1
print(i)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 105, i = 1;
while (s > 5) {
  s = s - 2;
  i = i + 1;
}
cout << i << endl;
return 0;
}


✍ Решение:

  • Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
  • В цикле также присутствует счетчик - переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
  • Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на while s > 0; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку на s:=100 (105-5):
...
s := 100;
while s > 0 do
begin
...
  • Для того чтобы посчитать, сколько раз выполнится цикл, необходимо 100 разделить на 2, т.к. s каждый шаг цикла уменьшается на 2:
    100 / 2 = 50 -> количество итераций цикла
    
  • В 3-й строке видим, что начальным значением i является 1, т.е. в первую итерацию цикла i = 2. Значит, нам необходимо к результату (50) прибавить 1.
  • 50 + 1 = 51
  • Это значение и будет выведено на экран.

Результат: 51



8_1: 8 задание. Демоверсия ЕГЭ 2018 информатика:

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

1
2
3
4
5
6
7
8
9
10
11
var s, n: integer;
begin
s := 260;
n := 0;
while s > 0 do
begin
  s := s - 15;
  n := n + 2
end;
writeln(n)
end.
Бейсик:

DIM S, N AS INTEGER
S = 260
N = 0
WHILE S > 0
  S = S - 15
  N = N + 2
WEND
PRINT N
Python:

s = 260
n = 0
while s > 0:
  s = s - 15
  n = n + 2
print(n)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 260, n = 0;
while (s > 0) {
  s = s - 15;
  n = n + 2;
}
cout << n << endl;
return 0;
}

  
Подобные задания для тренировки


✍ Решение:

    Рассмотрим алгоритм:

  • Цикл зависит от значения переменной s, которая изначально равна 260. В цикле переменная s постоянно меняет свое значение, уменьшаясь на 15.
  • Цикл завершит свою работу когда s <= 0. Значит, необходимо посчитать сколько чисел 15 "войдет" в число 260, иными словами:
260 / 15 ~ 17,333...
  • Эта цифра должна соответствовать количеству шагов (итераций) цикла. Так как условие цикла строгое - s > 0, то увеличим полученное число на единицу:
17 + 1 = 18 итераций цикла

Проверим:
17 * 15 = 255  (< 260)
18 * 15 = 270 (> 260)
  • Проверим на более простом примере. Допустим, изначально s=32. Два прохождения цикла даст нам s = 32/15 = 2,133... Число 2 больше 0, соответственно, цикл будет работать еще третий раз.
  • В результате работы программа распечатывает значение переменной n (искомый результат). В цикле переменная n, изначально равная 0, увеличивается на 2. Так как цикл включает 18 итераций, то имеем:
n = 18 * 2 = 36

Результат: 36

Подробное решение данного 8 задания из демоверсии ЕГЭ 2018 года смотрите на видео:



8_4: 10 Тренировочных вариантов экзаменационных работ для подготовки к ЕГЭ по информатике 2017, задание 8, вариант 1 (Ушаков Д.М.):

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

1
2
3
4
5
6
7
8
9
10
11
var k,s: integer;
begin
  k:=1024;
  s:=50;
  while s > 30 do
  begin
    s:= s - 4;
    k:= k div 2;
  end;
  write(k)
end.
Бейсик:

DIM S, K AS INTEGER
S = 50
K = 1024
WHILE S > 30
  S = S - 4
  K = K \ 2
WEND
PRINT K
Python:

s = 50
k = 1024
while s > 30:
  s = s - 4
  k = k // 2
print(k)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 50, k = 1024;
while (s > 30) {
  s = s - 4;
  k = k / 2;
}
cout << k << endl;
return 0;
}


✍ Решение:

Результат: 32

Подробное решение смотрите на видео:



8_5: Решение 8 задания ЕГЭ по информатике 2018 (диагностический вариант экзаменационной работы 2018 года, С.С. Крылов, Д.М. Ушаков, Тренажер ЕГЭ):

Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.
  
Паскаль:

1
2
3
4
5
6
7
a:=-5;
c:=1024;
while a<>0 do
begin
  c:=c div 2;
  a:=a + 1
end;
Бейсик:

A = -5
C = 1024
WHILE A <> 0
  C = C \ 2
  A = A + 1
WEND
Python:

a = -5
c = 1024
while a != 0:
  c = c // 2
  a = a + 1
С++:

int a = -5, c = 1024;
while (a != 0) {
  c = c / 2;
  a = a + 1;
}


✍ Решение:

Результат: 32

Смотрите видеоразбор задания:



8_12: Решение 8 задания (источник: вариант 25, К. Поляков):

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

1
2
3
4
5
6
7
8
9
10
var n, s: integer;
begin
n := 1;
s := 0;
while s <= 365 do begin
  s := s + 36;
  n := n * 2
end;
write(n)
end.
Бейсик:

N = 1
S = 0
WHILE S <= 365
  S = S + 36
  N = N * 2
WEND
PRINT N
Python:

n = 1
s = 0
while s <= 365:
  s = s + 36
  n = n * 2
print(n)
С++:

using namespace std;
int main() {
int n = 1, s = 0;
while (a <= 365) {
  s = s + 36;
  n = n * 2;
}
cout << n << endl;
return 0;
}


✍ Решение:

  • с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2k, где k – это число итераций цикла;
  • поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
  • тогда n = 2k = 211 = 2048.
  • Результат: 2048


Сумма или разность двух линейных функций (while s - n или while s + n)


8_7: Разбор 8 задания ЕГЭ вариант № 1, 2019 Информатика и ИКТ Типовые экзаменационные варианты (10 вариантов), С.С. Крылов, Т.Е. Чуркина:

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

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
var s, n: integer;
begin
s := 522;
n := 400;
while s - n > 0 do
  begin
  s := s - 20;
  n := n - 15
  end;
write(s)
end.
Бейсик:

DIM S, N AS INTEGER
S = 522
N = 400
WHILE S - N > 0
  S = S - 20
  N = N - 15
WEND
PRINT S
Python:

s = 522
n = 400
while s - n > 0:
  s = s - 20
  n = n - 15
print(s)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 522, n = 400;
while (s - n > 0) {
  s = s - 20;
  n = n - 15;
}
cout << s << endl;
return 0;
}

  
Подобные задания для тренировки


✍ Решение:

  • В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
  • № шага условие цикла s n
    1 522-400=122
    122 > 0
    522-20=502 400-15=385
    2 502-385=117
    117 > 0
    502-20=482 385-15=370
    3 482-370=112
    112 > 0
    ... ...
  • Видим, что в условии разница между значениями составляет 5:
  • 122 - 117 = 5
    117 - 112 = 5
    ...
    
  • Таким образом, чтобы определить количество итераций (шагов) цикла, необходимо значение условия цикла, полученное в первой итерации, разделить на 5:
  • 122 / 5 = 24,4
    
    24 * 5 = 120 (120 + 2 = 122)
    

    Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:

    № шага условие цикла s n
    25 2 > 0 s-20=... n-15=...
  • В конце выполнения 25-й итерации, получаем условие для 26-й итерации:
  • 25 * 5 = 125 (125 - 3 = 122)
    
    № шага условие цикла s n
    25 2 > 0 s-20=... n-15=...
    26 3 < 0 не выполняется не выполняется
  • Значит, всего в цикле присутствует 25 итераций, в каждой из которых s уменьшается на 20. Посчитаем, на сколько уменьшится значение s в общем:
  • 25 * 20 = 500 (за 25 итераций)
    
    522 - 500 = 22 (вычитаем из исходных данных)
    

Результат: 22

Предлагаем посмотреть видео решения задания:



8_13: ЕГЭ по информатике задание 8.13 (источник: вариант 59, К. Поляков)

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

1
2
3
4
5
6
7
8
9
10
var s, n: integer;
begin
  s := 10;
  n := 55;
  while n > s do begin
    s := s + 1;
    n := n - 1
  end;
  writeln(n)
end.
Бейсик:

DIM S, N AS INTEGER
S = 10
N = 55
WHILE N > S
  S = S + 1
  N = N - 1
WEND
PRINT N
Python:

s = 10
n = 55
while n > s:
  s = s + 1
  n = n - 1
print(n)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 10, n = 55;
while (n > s) {
  s = s + 1;
  n = n - 1;
}
cout << n << endl;
return 0;
}


✍ Решение:

Разберем листинг программы:

Результат: 32

Поиск наименьшего/наибольшего целого введенного числа d


ЕГЭ 8.8:

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

1
2
3
4
5
6
7
8
9
10
11
12
var k,s,d: integer;
begin
  readln (d);
  s:=0;
  k:=0;
  while k < 200 do
  begin
    s:=s + 64;
    k:=k + d;
  end;
  write(s);
end.
Бейсик:

DIM S, K, D AS INTEGER
INPUT D
S = 0
K = 0
WHILE K < 200
  S = S + 64
  K = K + D
WEND
PRINT S
Python:

d = int (input ())
s = 0
k = 0
while k < 200:
  s = s + 64
  k = k + d
print(s)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 0, k = 0;
int d;
cin >> d;
while (k < 200) {
  s = s + 64;
  k = k + d;
}
cout << s << endl;
return 0;
}

  
Подобные задания для тренировки

✍ Решение:

Рассмотрим алгоритм программы:

  • Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит "работу", когда k сравняется с 200 или превысит его (k >= 200).
  • Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
  • Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
64 * x = 192
число повторов: x = 192 / 64 = 3  
  • Так как в цикле k увеличивается на значение d, а повторов цикла 3 (при этом цикл завершается при k>=200), составим уравнение:
3 * d = 200 
d = 200/3 ~ 66,66
  • Поскольку число получилось нецелое, то проверим и 66 и 67. Если мы возьмем 66, то:
66 + 66 + 66  = 198  (< 200)

т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.

  • Для 67:
67 + 67 + 67 = 201 (>200)
  • Данное число 67 нас устраивает, оно наименьшее из возможных, что и требуется по заданию.

Результат: 67

Разбор задания смотрите на видео:



8_9: ЕГЭ по информатике задание 8.9 (источник: вариант 37, К. Поляков со ссылкой на О.В. Гасанова)
  
Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?
 
Паскаль:

1
2
3
4
5
6
7
8
9
10
11
var n, s, d: integer;
begin
  readln(d);
  n := 33;
  s := 4;
  while s <= 1725 do begin
    s := s + d;
    n := n + 8
  end;
  write(n)
end.
Бейсик:

DIM S, N, D AS INTEGER
INPUT D
N = 33
S = 4
WHILE S <= 1725
  S = S + D
  N = N + 8
WEND
PRINT N
Python:

d = int (input ())
n = 33
s = 4
while s <= 1725:
  s = s + d
  n = n + 8
print(n)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 4, n = 33;
int d;
cin >> d;
while (s <= 1725) {
  s = s + d;
  n = n + 8;
}
cout << n << endl;
return 0;
}


✍ Решение:

Разберем листинг программы:

  • Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
  • Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
  • Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 "поместится" в 120 (153 - 33)? :
120 / 8 = 15 раз (количество итераций цикла)
  • Как мы определили, цикл зависит от s, которая в начале программы s = 4. Для простоты работы примем, что s = 0, тогда изменим и условие цикла: вместо s <= 1725 сделаем s <= 1721 (1725-1721)
...
 s := 0;
 while s <= 1721 do begin
...
  • Найдем d. Так как цикл выполняется 15 раз, то необходимо найти такое целое число, которое при умножении на 15 возвращало бы число большее 1721:
1721 / 15 = 114,733 - не целое, не подходит
1722 / 15 = 114,8 - не целое, не подходит
...
берем кратное 5:
1725 / 15 = 115 - целое, подходит!
  • 115 - это наименьшее d при котором n станет равным 153 (за 15 шагов цикла).
  • Найдем наибольшее d. Для этого надо найти такое число, которое соответствует неравенствам:
14 * d <= 1721 при этом: 15 * d > 1721
  • Найдем:
14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
  • Наибольшее d=122

Результат: 115, 122

Смотрите видео данного 8 задания ЕГЭ:


Усложненные задания с двумя линейными функциями


8_6: ЕГЭ по информатике задание 8.6 (источник: вариант 36, К. Поляков)

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

1
2
3
4
5
6
7
8
9
10
var s, n: integer;
begin
  s := 0;
  n := 0;
  while 2*s*s < 123 do begin
    s := s + 1;
    n := n + 2
  end;
  writeln(n)
end.
Бейсик:

DIM S, N AS INTEGER
S = 0
N = 0
WHILE 2*S*S < 123
  S = S + 1
  N = N + 2
WEND
PRINT N
Python:

s = 0
n = 0
while 2*s*s < 123:
  s = s + 1
  n = n + 2
print(n)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 0, n = 0;
while (2*s*s < 123) {
  s = s + 1;
  n = n + 2;
}
cout << n << endl;
return 0;
}

  
Подобные задания для тренировки


✍ Решение:

Разберем листинг программы:

  • В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
  • В результате работы программы на экран выводится значение n.
  • Цикл зависит от s, причем работа цикла завершится когда 2 * s2 >= 123.
  • Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s2 >= 123:
1 шаг: s = 2*12=2
2 шаг: s = 2*22=8
3 шаг: s = 2*32=18
...
7 шаг: s = 2*72=98 (меньше 123, т.е. цикл еще работает)
8 шаг: s = 2*82=128 (больше 123, цикл не работает! )

Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:

s=124/2 = √62 - не подходит!
s=126/2 = √63 - не подходит!
s=128/2 = √64 = 8 - подходит!
  • Таким образом, программа выполнит 8 итераций цикла.
  • Определим n, которая увеличивается каждый шаг цикла на 2, значит:
n = 2 * 8 = 16

Результат: 16

Видео данного задания ЕГЭ доступно здесь:


Арифметическая и геометрическая прогрессия


8_10: ЕГЭ по информатике задание 8.10 (источник: вариант 3, К. Поляков)

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

1
2
3
4
5
6
7
8
9
10
var k, s: integer;
begin
  s:=3;
  k:=1;
  while k < 25 do begin
    s:=s + k;
    k:=k + 2;
  end;
  write(s);
end.
Бейсик:

DIM S, K AS INTEGER
S = 3
K = 1
WHILE K < 25
  S = S + K
  K = K + 2
WEND
PRINT S
Python:

s = 3
k = 1
while k < 25:
  s = s + k
  k = k + 2
print(s)
С++:

#include <iostream>
using namespace std;
int main() {
int s = 3, k = 1;
while (k < 25) {
  s = s + k;
  k = k + 2;
}
cout << s << endl;
return 0;
}


✍ Решение:

Разберем листинг программы:

  • Результатом программы является вывод значения s.
  • В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
  • Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
  • В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
  • Количество итераций цикла равно:
n = 25 / 2 ~ 12 

(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)

  • В s накапливается сумма арифметической прогрессии, последовательность элементов которой удобней начать с 0 (а не с 3, как в программе). Поэтому представим, что в начале программы s = 0. Но при этом не забудем, что в конце необходимо будет к результату прибавить 3!
s:=0;
k:=1;
while k < 25 do begin
 ...
  • Тогда арифметическая прогрессия будет выглядеть:
1 + 3 + 5 + 7 ... 
количество членов прогрессии - 12, т.к. 12 итераций цикла
  • Существует формула вычисления суммы арифметической прогрессии:
s = ((2 * a1 + d * (n - 1)) / 2) * n

где a1 - первый член прогрессии,
d - разность,
n - количество членов прогрессии (в нашем случае - кол-во итераций цикла)

  • Подставим значения в формулу:
(2 * 1 + 2 * 11) / 2 * 12 = 144
  • Не забудем, что мы к результату должны прибавить 3:
144+3 = 147
  • Это и есть значение s, которое выводится в результате работы программы.

Результат: 147

Решение данного задания ЕГЭ по информатике видео:



8_11: Государственный выпускной экзамен ГВЭ 2019 (информатика ГВЭ ФИПИ, № 15):

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

Паскаль:

1
2
3
4
5
6
7
8
9
10
11
var n, s: integer;
begin
n := 1;
s := 0;
while n <= 1000 do
  begin
  s := s + n;
  n := n * 2
  end;
write(s)
end.
Бейсик:

DIM N, S AS INTEGER
N = 1
S = 0
WHILE N <= 1000
  S = S + N
  N = N * 2
WEND
PRINT S
Python:

n = 1
s = 0
while n <= 1000:
  s = s + n
  n = n * 2
print(s)
С++:

#include <iostream>
using namespace std;
int main() {
int n = 1, s = 0;
while (n <= 1000) {
  s = s + n;
  n = n * 2;
}
cout << s << endl;
return 0;
}


✍ Решение:

    Рассмотрим алгоритм:

  • Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
  • 1  2  4  8  16  32  64  128  256  512  1024
    
  • Когда переменная n принимает значение 1024 (11-й шаг цикла), условие цикла становится ложным и цикл перестает работать. На экран выводится значение s.
  • Переменная s - это сумма элементов геометрической прогрессии, т.к. в ней аккумулируются значения n (числовой ряд, представляющий собой геометрическую прогрессию).
  • Вспомним формулы суммы геометрической прогрессии:
  • 1.

    \[ S_{n} = \frac {b_1-b_{n}*q}{1-q} \]

    2.

    \[ S_{n} = b_{1} * \frac {1-q^n}{1-q} \]

  • В нашем случае знаменатель q = 2, первый элемент прогрессии b1 = 1. Обратим внимание, что на последнем шаге к сумме добавляется значение 512, т.е. n = 10, а bn = 512. Только после этого n еще раз увеличивается в 2 раза и становится = 1024.
  • Вычислим s по формуле, подставив необходимые значения:
  • \[ S_{n} = \frac {1-512*2}{1-2} =1023 \]

  • Проверим по второй формуле:
  • \[ S_{n} = 1 * \frac {1-2^{10}}{1-2}=1023 \]

  • Так как в результате на экран выводится s, то ответ 1023.

Результат: 1023


Поделитесь уроком с коллегами и друзьями:
5 комментариев

    Alex

    Спасибо за видео! Пригодилось)

      admin

      очень приятно:)

    Данил

    В задании 8.3 ответ письменно 67, на видео 201, кто ошибся?

      admin

      да, спасибо! это на видео ошибка, там уже исправлено

    Nikolay

    Очень хорошие объяснения. Спасибо!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*
*


Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить