Содержание:
- Решение задания 6 ЕГЭ по информатике для 2021
- Решения подобных заданий прошлых лет
- Определить, какое число пропущено
- Простые задания с двумя линейными непересекающимися функциями
- Сумма или разность двух линейных функций (while s - n или while s + n)
- Поиск наименьшего/наибольшего целого введенного числа d
- Усложненные задания с двумя линейными функциями
- Арифметическая и геометрическая прогрессия
- Программирование: массивы и матрицы
Решение задания 6 ЕГЭ по информатике для 2021
Уровень сложности — базовый,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 4 минуты.
Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 | var k,n,p,l,s,x:integer; var s, n: integer; begin readln (s); n := 1; while s <=45 do begin s := s + 4; n := n * 2 end; writeln(n) end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 14
Видеорешение подобного 6 задания на Python:
📹 Видео
📹 Видеорешение на RuTube здесь
-
✎ Способ 1 (программный):
- Поскольку в цикле
s
увеличивается, а по условию задания следует найти наименьшее значениеs
, то можно начать сs=1
, постоянно увеличивая значениеs
на единицу во внешнем цикле. - Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная
s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменнуюS1
для этих целей.
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | begin var s0 := 1; while true do // внешний цикл, бесконечный begin var s := s0; // --- код из условия задания --- // var n := 1; while s <= 45 do // внутренний цикл из задания begin s := s + 4; n := n * 2; end; // --- конец кода из условия задания --- // if n = 256 then // если найдено, то выводим соответствующее s begin print(s0); break; // выход из бесконечного цикла end; s0 := s0 + 1; // end; end. |
Пояснение:
Бейсик:
|
Python:
|
||
С++:
|
Паскаль:
1 2 3 4 5 6 7 8 9 10 | var s, n: integer; begin readln (s); n := 3; while s <= 51 do begin s := s + 7; n := n * 2 end; writeln(n) end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 23
📹 Видео
📹 Видеорешение на RuTube здесь
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | begin var s1 := 50; while true do // внешний цикл, бесконечный begin var s := s1; // --- код из условия задания --- // var n := 3; while s <= 51 do // внутренний цикл из задания begin s := s + 7; n := n * 2; end; // --- конец кода из условия задания --- // if n = 96 then // если найдено, то выводим соответствующее s begin print(s1); break; // выход из бесконечного цикла end; s1 := s1 - 1; // end; end. |
Пояснение:
s
увеличивается, и цикл работает пока s<=50, а по условию следует найти наибольшее значение s
, то можно начать с s = 50
, постоянно уменьшая значение s
на единицу во внешнем цикле.s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s
, уменьшив его всего на 1. Используем переменную S1
для этих целей.
Бейсик:
|
Python:
|
||
С++:
|
Сколько существует различных значений
d
, оканчивающихся на 8, при вводе которых эта приведенная программа выведnет число 50?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 | var S, N, d: integer; begin readln(d); S := 15; N := 10; while S <= 2400 do begin S := S + d; N := N + 5; end; writeln(N); end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 4
-
✎ Способ 1 (программный):
- Вывод:
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | begin var counter:=0; var d1:=1; while true do begin var d := d1; // из условия задачи var s := 15; var n := 10; while s <= 2400 do begin s := s + d; n:=n + 5; end; // проверка условий: увеличение счетчика if (d mod 10 = 8) and (n = 50) then begin counter+=1;; end; d1 += 1; // выход из бесконечного цикла if d1 = 2400 then break; end; print (counter) end. |
4
Бейсик:
|
Python:
|
||
С++:
|
Определите наименьшее и наибольшее введённое значение переменной
s
, при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей
Паскаль:
1 2 3 4 5 6 7 8 9 10 | var s, n: integer; begin readln(s); n := 600; while n > s do begin s := s + 3; n := n - 6 end; writeln(n) end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 2315
-
✎ Способ 1 (программный):
- Вывод:
- Записываем в порядке убывания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | begin var s_ := -100; while true do begin var n := 600; var s := s_; while n > s do begin s := s + 3; n := n - 6 end; if n = 210 then print(s_); s_ += 1; if s > 1000 then break; end; end. |
15 16 17 18 19 20 21 22 23
2315
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | s_ = -100 while True: # внешний цикл, бесконечный s = s_ n = 600 # --- код из условия задания --- while n > s: s = s + 3 n = n - 6 # --- конец кода из условия задания --- if n == 210: print(s_) s_ += 1 if s > 1000: break |
Определите, при каком наибольшем положительном введённом значении переменной
s
программа выведет трёхзначное число.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 | var s, n: integer; begin readln (s); n := 200; while s div n >= 2 do begin s := s + 5; n := n + 5 end; writeln(s) end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 699
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | begin var s_ := 1000; while true do begin var n := 200; var s := s_; while s div n >= 2 do begin s := s + 5; n := n + 5 end; if (s > 99) and (s<1000) then begin print(s_); break; end; s_ -= 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 | s_ = 1000 while True: # внешний цикл, бесконечный s = s_ n = 200 # --- код из условия задания --- while s // n >=2: s = s + 5 n = n + 5 # --- конец кода из условия задания --- if 99 < s < 1000: print(s_) break s_ -= 1 |
Получив на вход некоторое натуральное число
X
, этот алгоритм печатает одно число. Сколько существует чисел Х
, для которых алгоритм напечатает число на отрезке [2;500]?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 | var x, s, n: integer; begin readln(x); s := 6 * (x div 15); n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; writeln(n) end. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 360
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | begin var x := 1; var count := 0; while true do begin var s := 6 * (x div 15); var n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; if (n >= 2) and (n <= 500) then count += 1; x += 1; if x > 1000 then break; end; print(count) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | x = 1 count = 0 while True: # внешний цикл, бесконечный s = 6 * (x // 15) n = 1 while s <300: s = s + 18 n = n * 2 # --- конец кода из условия задания --- if 1 < n < 501: count+=1 x += 1 if x > 1000: break print (count) |
Решения подобных заданий прошлых лет
Определить, какое число пропущено
Сопоставьте формулу:
и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
Паскаль:
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. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 3
- Рассмотрим формулу:
- Рассмотрим алгоритм программы:
- Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
Фактически она обозначает: сумма xk/ k!
для всех k, начиная от 1 до n.
For k:=1 to n do
p:=p * k;
l:=l*x;
s:=s + 3*l/p;
Простые задания с двумя линейными непересекающимися функциями
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 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
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите, что будет напечатано в результате выполнения программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 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 = 50 -> количество итераций цикла
50 + 1 = 51
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 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)
n = 18 * 2 = 36
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите значение переменной 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; |
Бейсик:
|
Python:
|
С++:
|
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите, что будет напечатано в результате работы следующего фрагмента программы.
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 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)
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 22
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
- Видим, что в условии разница между значениями составляет 5:
№ шага | условие цикла | 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 |
... | ... |
122 - 117 = 5 117 - 112 = 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 * 5 = 125 (125 - 3 = 122)
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=... | n-15=... |
26 | 3 < 0 | не выполняется | не выполняется |
25 * 20 = 500 (за 25 итераций)
522 - 500 = 22 (вычитаем из исходных данных)
Результат: 22
📹 Видеорешение на RuTube здесь (теоретическое решение)
Запишите число, которое будет выведено в результате работы программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 32
- Для условия цикла - перенесем влево:
n - s > 0
55 - 10 = 45
n - 1 > s + 1 => n - s - 2 > 0
для 22 итераций: 2 * 22 = 44 в условии цикла имеем 45 > 44, т.е. условие еще истинно для 23 итераций: 2 * 23 = 46 в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
n = 55 - 23 = 32
Поиск наименьшего/наибольшего целого введенного числа d
При каком наименьшем целом введенном числе 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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 67
- Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит "работу", когда k сравняется с 200 или превысит его (k >= 200).
- Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
- Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
64 * x = 192 число повторов: x = 192 / 64 = 3
3 * d = 200 d = 200/3 ~ 66,66
66 + 66 + 66 = 198 (< 200)
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
67 + 67 + 67 = 201 (>200)
📹 Видео
📹 Видеорешение на RuTube здесь
Запишите через запятую наименьшее и наибольшее значение числа 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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 115, 122
- Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
- Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
- Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 "поместится" в 120 (153 - 33)? :
120 / 8 = 15 раз (количество итераций цикла)
s <= 1725
сделаем s <= 1721
(1725-1721)... s := 0; while s <= 1721 do begin ...
1721 / 15 = 114,733 - не целое, не подходит 1722 / 15 = 114,8 - не целое, не подходит ... берем кратное 5: 1725 / 15 = 115 - целое, подходит!
14 * d <= 1721 при этом: 15 * d > 1721
14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
Усложненные задания с двумя линейными функциями
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 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 - подходит!
n = 2 * 8 = 16
Арифметическая и геометрическая прогрессия
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 147
- Результатом программы является вывод значения s.
- В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
- Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
- В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
n = 25 / 2 ~ 12
(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)
s:=0; k:=1; while k < 25 do begin ...
1 + 3 + 5 + 7 ... количество членов прогрессии - 12, т.к. 12 итераций цикла
где a1 - первый член прогрессии,
d - разность,
n - количество членов прогрессии (в нашем случае - кол-во итераций цикла)
(2 * 1 + 2 * 11) / 2 * 12 = 144
144+3 = 147
Запишите число, которое будет напечатано в результате выполнения программы:
Паскаль:
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. |
Бейсик:
|
Python:
|
С++:
|
Ответ: 1023
- Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
Рассмотрим алгоритм:
1 2 4 8 16 32 64 128 256 512 1024
1.
\[ S_{n} = \frac {b_1-b_{n}*q}{1-q} \]
2.
\[ S_{n} = b_{1} * \frac {1-q^n}{1-q} \]
\[ S_{n} = \frac {1-512*2}{1-2} =1023 \]
\[ S_{n} = 1 * \frac {1-2^{10}}{1-2}=1023 \]
Программирование: массивы и матрицы
Наибольшее или наименьшее значение переменной s (сумматор)
В программе используется одномерный целочисленный массив 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]; |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 202
В программе описан одномерный целочисленный массив А с индексами от 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 = 0 + 98 + 98 = 196
s = 196 + 98 + 98
196 * 10 = 1960
В программе описан одномерный целочисленный массив А с индексами от 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]
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 = 1 * 2 * 2 = 4
s = 4 * 2 * 2 = 16 ...
45 = 1024
Перестановка в массиве. Определить значение переменной
В программе используется одномерный целочисленный массив 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
В программе используется одномерный целочисленный массив 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 | - | - | - | - | - | - |
В программе используется одномерный целочисленный массив 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 ...
j:=j-1
).
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 - нет, цикл прекращает свою работу
В программе используется одномерный целочисленный массив 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
В программе используется одномерный целочисленный массив 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); |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 75
- Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой - очередная итерация цикла.
- При последнем изменении 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 |
В результате выполнения программы напечатано число 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. |
Бейсик:
|
Python:
|
||
С++:
|
Ответ: 60
-
Рассмотрим алгоритм.
- В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
- Изначально переменная N равна значению 5:
- В первом цикле формируются значения для пяти элементов массива:
- Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
- Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива - это значение 6. Так как в результате
m = 6
. - В цикле помимо условия находится сумматор, который суммирует
2 * Dat[k]
. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение. - Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
- Посчитаем S в цикле:
N:= 5; |
for k := 1 to N do readln(Dat[k]); |
if Dat[k]>m then begin m := Dat[k] end |
S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60
2 комментария для “Информатика ЕГЭ 6 задание разбор”
Обсуждение закрыто.
Добрый день! В первом примере ошибка — правильный ответ 14, а не 3. Представленная в пояснении программа выдает такой же ответ( 14).
Очень познавательный сайт.
Обнаружил опечатку в Задании 6_1 new
Указан ответ: 3, а должен быть — 14
С уважением, Геннадий.