Информатика ЕГЭ 6 задание разбор

Дата изменения: 26 августа 2020

Решение задания 6 ЕГЭ

6-е задание: «Программирование: основные конструкции»
Уровень сложности — базовый,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 4 минуты.
  
Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
До ЕГЭ 2021 года — это было задание № 8 и задание № 19 ЕГЭ

  
Задание демонстрационного варианта 2021 года ФИПИ

Определить, какое число пропущено

6_14: ЕГЭ по информатике 2020 (Тематические тренировочные задания, 2020 г., Самылкина Н.Н., Синицкая И.В., Соболева В.В., задание № 2):

Сопоставьте формулу:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var k,n,p,l,s,x:integer;
begin
  writeln('введите n='); readln(n);
  writeln('введите x='); readln(x);
  s:=0;
  p:=1;
  l:=x;
  For k:=1 to n do 
    begin
      p:=p * k;
      s:=s + 3*l/p;
      l:=l*x;
    end;
  writeln('S=',S:5:2);
end.
Бейсик:

INPUT "введите n=", n
INPUT "введите x=", x
s=0: p=1
l=x
FOR k:=1 to n  
      p = p * k: s = s + 3*l/p
      l = l*x
NEXT k
PRINT "S=",S
END
Python:

n = int(input('введите n='))
x = int(input('введите x='))
s=0
p=1
l=x
For k in range (1,n+1): 
      p*= k
      s+=3*l/p
      l*=x
print('S=',S)
С++:

#include <iostream>
using namespace std;
int main() {
int k,n,p,s,x;
printf("введите n="); scanf("%d",&n);
printf("введите x="); scanf("%d",&x);
l=x;
for (k=1,s=0,p=1;k<=n;k++) {
  p*=k;
  s+=3*l/p;
  l*=x;
}
printf("s=%d",s);
}

  

Ответ: 3

Показать решение:

  • Рассмотрим формулу:

  • Фактически она обозначает: сумма xk/ k! для всех k, начиная от 1 до n.

  • Рассмотрим алгоритм программы:
  • Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
  • For k:=1 to n do
  • В следующей строке кода происходит вычисление факториала числа k (в первой итерации цикла 1!, во второй итерации 2! и т.д.):
  • p:=p * k;
  • Следующее выражение служит для подсчета x в степени k (переменной l в начале программы присваивается значение введенного x):
  • l:=l*x;
  • Основная же формула сумматора заключена в строке:
  • s:=s + 3*l/p;
  • Видим, что в исходной заданной формуле в числителе отсутствует число 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;
}

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

Ответ: 24

Показать решение:

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

  • В цикле 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.

📹 Видео


Решение 6 задания ЕГЭ по информатике (контрольный вариант № 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;
}

Ответ: 51

Показать решение:

  • Рассмотрим алгоритм. Цикл зависит от переменной 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
  • Это значение и будет выведено на экран.

6 задание. Демоверсия ЕГЭ 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;
}

Ответ: 36

Показать решение:

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

  • Цикл зависит от значения переменной 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

📹 Видео


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

Показать решение:

📹 Видео


Решение 6 задания ЕГЭ по информатике 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

Показать решение:

📹 Видео


6_12: Решение 6 (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 (s <= 365) {
  s = s + 36;
  n = n * 2;
}
cout << n << endl;
return 0;
}

Ответ: 2048

Показать решение:

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

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

Разбор 6 (раньше №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;
}

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

Ответ: 22

Показать решение:

  • В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
  • № шага условие цикла 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

📹 Видео


ЕГЭ по информатике задание 6.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

Показать решение:

  • Для условия цикла - перенесем влево:
  • n - s > 0
  • Согласно начальным значениям, имеем:
  • 55 - 10 = 45
  • Запишем, как будет изменяться условие цикла в каждой итерации (в каждом шаге):
  • n - 1 > s + 1 =>
    n - s - 2 > 0
    
  • Т.е. условие цикла будет истинным пока возможно вычитать 2. Сколько раз можно вычесть два из 45?
  • для 22 итераций:
    2 * 22 = 44
    в условии цикла имеем 45 > 44, т.е. условие еще истинно
    для 23 итераций:
    2 * 23 = 46
    в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
  • Соответственно, получили 23 итерации цикла.
  • Изначально n = 55. С каждой итерацией выполнялось n-1. Посчитаем n:
  • n = 55 - 23 = 32

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

ЕГЭ 6.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;
}

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

Ответ: 67

Показать решение:

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

  • Цикл зависит от переменной 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 нас устраивает, оно наименьшее из возможных, что и требуется по заданию.

📹 Видео


ЕГЭ по информатике задание 6.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;
}

Ответ: 115, 122

Показать решение:

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

  • Цикл программы зависит от значения переменной 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

📹 Видео


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

ЕГЭ по информатике задание 6.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;
}

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

Ответ: 16

Показать решение:

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

  • В цикле переменная 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

📹 Видео


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

ЕГЭ по информатике задание 6.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;
}

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

Ответ: 147

Показать решение:

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

  • Результатом программы является вывод значения 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, которое выводится в результате работы программы.

📹 Видео


Государственный выпускной экзамен ГВЭ 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;
}

Ответ: 1023

Показать решение:

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

  • Условие цикла зависит от переменной 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.

Программирование: массивы и матрицы

Наибольшее или наименьшее значение переменной s (сумматор)

Досрочный экзамен 2020 г., вариант 1:

В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.

i 0 1 2 3 4 5 6 7 8 9 10 11
A[i] 14 13 15 8 4 12 30 21 22 16 5 9

Определите значение переменной s после выполнения следующего фрагмента этой программы

Язык программирования Паскаль:
s := 0;
n := 1;
for i := 0 to 11 do
 if A[i] > A[n] then
  s := s + A[i] + i
 else
  A[n] := A[i];
Бейсик:

s = 0
n = 1
FOR i = 0 TO 11
 IF A(i) > A(n) THEN
   s = s + A(i) + i
 ELSE
   A(n) = A(i)
 END IF
NEXT i
Python:

s = 0
n = 1
for i in range(0, 12):
 if A[i] > A[n]:
   s += A[i] + i
 else:
   A[n] = A[i]
С++:

s = 0;
n = 1;
for (int i = 0; i < 12; i++)
{
 if (A[i] > A[n])
   s += A[i] + i;
 else
   A[n] = A[i];
}

Ответ: 202

Показать решение:

Результат: 202

📹 Видео


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

В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

Язык программирования Паскаль:
s:=0;
n:=10;
for i:=0 to n-1 do begin
  s:= s + A[i] + A[i+1]
end;

В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.
  
Какое наибольшее значение может иметь переменная s после выполнения данной программы?

Ответ: 1960

Показать решение:

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

  • Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
  • В цикле повторяется операция, суммирующая два подряд идущих элемента массива, - текущего и следующего:
  • A[i] + A[i+1]
  • Данная сумма накапливается в переменной s, значение которой требуется узнать в задаче.
  • Поскольку по заданию необходимо найти наибольшее значение переменной s, и по заданию элементы массива - двухзначные четные натуральные числа, то представим, что все элементы равны самому большому двухзначному четному числу - 98. Это будет оптимальным вариантом.
  • В первый проход цикла получим:
  • s = 0 + 98 + 98 = 196
  • Полученная сумма будет каждый проход цикла увеличиваться на то же самое число (196):
  • s = 196 + 98 + 98
  • Так как проходов (итераций) цикла 10, то получим:
  • 196 * 10 = 1960

📹 Видео


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

В программе описан одномерный целочисленный массив А с индексами от 0 до 10.

Язык программирования Паскаль:
s:=1;
n:=10;
for i:=1 to 5 do begin
  s:= s * A[i] * A[n-i+1]
end;

В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.
  
Какое наименьшее значение может иметь переменная s после выполнения данной программы?

Ответ: 1024

Показать решение:

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

  • Цикл выполняется 5 раз: от 1 до 5.
  • В цикле повторяется операция произведения двух элементов массива:
  • A[i] * A[n-i+1]
  • Определим, какие элементы перемножаются, подставив для n и i конкретные значения:
  • 1 шаг: A[1]*A[10]
    2 шаг: A[2]*A[9]
    3 шаг: A[3]*A[8]
    4 шаг: A[4]*A[7]
    5 шаг: A[5]*A[6]
    
  • Результат каждой операции умножения накапливается в переменной s, значение которой и требуется найти.
  • Поскольку в s накапливается произведение элементов массива, а по заданию элементы - однозначные четные натуральные числа, то представим, что в массиве все элементы равны самому малому однозначному четному числу - 2. Это будет оптимальным вариантом, т.к. по заданию, необходимо определить наименьшее значение.
  • В первый проход цикла получим:
  • s = 1 * 2 * 2 = 4
  • Полученное произведение будет каждый проход цикла перемножаться на предыдущее значение (4 - в первом шаге, 16 - во втором шаге и т.п.):
  • s = 4 * 2 * 2 = 16
    ...
    
  • Так как проходов цикла 5, то получим:
  • 45 = 1024

📹 Видео


Перестановка в массиве. Определить значение переменной

6 (19) задание. Демоверсия ЕГЭ 2018 информатика:

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т.е. A[0] = 3, A[1] = 0 и т.д.

Определите значение переменной c после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
c := 0;
for i := 1 to 9 do
 if A[i-1] > A[i] then
 begin
   c := c + 1;
   t := A[i];
   A[i] := A[i-1];
   A[i-1] := t;
 end;

Ответ: 5

Показать решение:

Результат: 5

📹 Видео


Решение 6 (19) задания ЕГЭ по информатике, вариант 1 (ФИПИ, «ЕГЭ информатика и ИКТ, типовые экзаменационные варианты 2018», С.С. Крылов, Т.Е. Чуркина):

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 3, 4, 7, 2, 9, 1, 2, 3, 0 соответственно, т.е. A[0] = 1, A[1] = 3 и т.д.

Определите значение переменной c после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
c := 0;
for i := 1 to 9 do
 if A[i] > A[0] then
 begin
   c := c + 1;
   t := A[i];
   A[i] := A[0];
   A[0] := 2*t;
 end;

Ответ: 2

Показать решение:

  • Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
  • 1 2 3 4 5 6 7 8 9
    i 1 2 3 4 5 6 7 8 9
    if 3>4
    true
    4>6
    false
    7>6
    true
    2>14
    false
    9>14
    false
    1>14
    false
    2>14
    false
    3>14
    false
    0>14
    false
    c 1 - 2 - - - - - -
    t 3 - 7 - - - - - -
    A[i] 1 6
    A[0] 6 - 14 - - - - - -

📹 Видео


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

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 0, 7, 1, 3, 2, 1, 8, 9, 6, 3 соответственно, т.е. A[0] = 0, A[1] = 7 и т.д.

Определите значение переменной j после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
j:=9;
while A[j] + A[j-1] > 4 do
 begin
  t:=A[j];
  A[j]:=A[j-1];
  A[j-1]:=t;
  j:=j-1;
 end;

Ответ: 6

Показать решение:

  • В задании используется цикл while - с предусловием. Такой цикл выполняется пока условие истинно.
  • В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (j=9), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
  • Для первой итерации цикла имеем:
    while A[9] + A[8] > 4 do
    ...
    
  • Как только встретится сумма элементов, которая меньше либо равна четырем, цикл прекратит свою работу.
  • В цикле происходит обмен значений двух элементов массива, сумма которых рассматривается в условии цикла (через переменную t). Кроме того, происходит уменьшение счетчика цикла, чтобы осуществился переход к следующему элементу массива (j:=j-1).
  • Таким образом, надо узнать сумму элементов, начиная с элементов A[9]+A[8], затем A[8]+A[7] и т.д.:
  • A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
    A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
    A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
    A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
    
  • Последнее значение счетчика j было равно 6.

Разбор досрочного ЕГЭ по информатике 2019:

В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.

Определите значение переменной s после выполнения следующего фрагмента этой программы:

1
2
3
4
5
6
7
8
9
  n := 1;
  s := 1;
  for i := 1 to 11 do
    if A[i] < A[n] then begin
      s := s * i;
      t := A[i];
      A[i] := A[n];
      A[n] := t;
    end;

  
Типовые задания для тренировки - демоверсия ЕГЭ информатика 2020

Ответ: 240

Показать решение:

📹 Видео


Решение 6 (19) задания (с сайта К. Полякова, № 112):

В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.

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

1
2
3
4
5
6
7
8
9
10
11
s := 0;
n := 4;
for i:=0 to 9 do
  if A[i] <= A[n] then begin
    s := s + A[i];
    t := A[i];
    A[i] := A[n];
    A[n] := t;
    n := i mod 3;
  end;
writeln(s);
Бейсик:

s=0: n=4
FOR k=1 to 10  
    IF A(i) <= A(n) THEN
      s = s + A(i)
      t = A(i)
      A(i) = A(n)
      A(n) = t
      n = i MOD 3
    END IF
NEXT k
PRINT S
END
Python:

s = 0
n = 4
for i in range(10):
  if A[i] <= A[n]:
    s = s + A[i]
    t = A[i]
    A[i] = A[n]
    A[n] = t
    n = i % 3
print(s)
С++:

s = 0;
n = 4;
for (i=0; i<=9; i++)
  if (A[i]<=A[n])
    {
    s+=A[i];
    t=A[i];
    A[i]=A[n];
    A[n]=t;
    n=i%3;
    }
cout << s;

  
Типовые задания для тренировки

Ответ: 75

Показать решение:

  • Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой - очередная итерация цикла.
  • i <= ? 0 1 2 3 4 5 6 7 8 9 s n
    21 16 7 12 18 3 8 13 11 17 0 4
    0 21<=18
    нет
    21 18
    1 16<=18
    да
    16
    18
    18
    16
    16 1 mod 3 = 1
    2 7<=18
    да
    18
    7
    7
    18
    16+7=23 2 mod 3 = 2
    3 12<=18
    да
    18
    12
    12
    18
    23+12=35 3 mod 3 = 0
    4 16<=21
    да
    21
    16
    16
    21
    35+16=51 4 mod 3 = 1
    5 3<=7
    да
    7
    3
    3
    7
    51+3=54 5 mod 3 = 2
    6 8<=12
    да
    12
    8
    8
    12
    54+8=62 6 mod 3 = 0
    7 13<=16
    да
    16
    13
    13
    16
    62+13=75 7 mod 3 = 1
    8 нет 3 11
    9 нет 13 17
  • При последнем изменении s стало равным 75.

📹 Видео


6_23: Решение 19 задания (с сайта К. Полякова, № 117):

В результате выполнения программы напечатано число 6.
  
Какое наибольшее значение может иметь переменная S после выполнения программы?
Паскаль:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var k, m, S, N: integer; 
    Dat: array[1..100] of integer; 
begin 
  N:= 5; 
  m := 0; S := 0; 
  for k := 1 to N do      
    readln(Dat[k]); 
  for k := 1 to N do begin
    S := S + 2 * Dat[k];
    if  Dat[k]>m then
      begin
        m := Dat[k]
      end
  end; 
  writeln(m) 
end.
Бейсик:

N=5
m=0
S=0
FOR k=1 to N
   INPUT Dat(k) 
NEXT k 
FOR k=1 to N
    S = S + 2 * Dat(k)
    IF Dat(k) > m THEN
      m = Dat(k)
    END IF
NEXT k
PRINT m
END
Python:

Dat = [0]*100
N = 5
m = S = 0
for k in range(0, N):
    Dat[k] = int(input())
for k in range(0, N):
    S += 2 * Dat[k]
    if Dat[k] > m:
        m = Dat[k]
print(m)
С++:

#include <iostream> 
using namespace std; 
 
int main() {     
int Dat[100];
int N = 5;
int k, m = 0, S = 0;
for(k=0; k<N; k++)
   cin >> Dat[k];
for(k=0; k<N; k++) {
   S += 2 * Dat[k];
   if (Dat[k]>m)
       m = Dat[k];
   }
cout << m;
return 0;
}

Ответ: 60

Показать решение:

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

  • В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
  • Изначально переменная N равна значению 5:
  • N:= 5;
  • В первом цикле формируются значения для пяти элементов массива:
  •   for k := 1 to N do      
        readln(Dat[k]);
  • Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
  •    if  Dat[k]>m then
          begin
            m := Dat[k]
          end
  • Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива - это значение 6. Так как в результате m = 6.
  • В цикле помимо условия находится сумматор, который суммирует 2 * Dat[k]. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение.
  • Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
  • Посчитаем S в цикле:
  • S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60

📹 Видео


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

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

*
*


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