Определите без компьютера что будет напечатано при выполнении следующих фрагментов а 100
МБУ ДО «Дворец детского творчества» г. Дзержинск, Нижегородская обл., 2019 г. Готовимся к ЕГЭ. Задание 8. Анализ программ с циклами. (Си/С++) Панченко Надежда Петровна, педагог дополнительного образования
Содержание: Общие сведения. Что нужно знать. Разбор задач. Возможные ловушки и проблемы. Задачи для тренировки и самопроверки.
Общие сведения Сложность: базовая. Примерное время решения (для тех, кто будет выполнять часть C : 3 минуты. Тема: Анализ программы. Подтема: Построение алгоритма управления исполнителем. Что проверяется: Умение построить неветвящийся алгоритм для исполнителя, описанного в условии задачи по заданным входным и выходным данным.
Что нужно знать: Как может выглядеть задание? Например, так: Дан фрагмент программы. Необходимо определить значение переменной (переменных после его исполнения). Объем задания – до шести итераций цикла (если задание требует «ручной» прокрутки цикла, или большое число итераций с очевидным алгоритмом, две - три операции присваивания внутри цикла.
Что нужно знать: основные конструкции языка программирования: объявление переменных; оператор присваивания; оператор вывода; циклы(for, while); уметь: выполнять ручную прокрутку программы; выделять переменную цикла, от изменения которой зависит количество шагов цикла; определять количество шагов цикла; определять переменную, которая выводится на экран;
Что нужно знать: формулу для вычисления n -ого элемента арифметической прогрессии: формулу для вычисления суммы первых членов арифметической прогрессии: где ai - i –ый элемент последовательности, d – шаг (разность последовательности.
Разбор задачи 1: Определите, что будет напечатано в результате работы следующего фрагмента программы: < int k, s; s = 0; k = 0; while (s < 1024) < s = s + 10; k = k + 1; >cout<<k; >
Решение: из программы видно, что начальные значения переменных k и s равны нулю; цикл заканчивается, когда нарушается условие s < 1024, то есть количество шагов цикла определяется изменением переменной s после окончания цикла выводится значение переменной k; таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало не меньше 1024; с каждым шагом цикла значение s увеличивается на 10, а значение k – на единицу, так что фактически k – это счётчик шагов цикла; поскольку s увеличивается на 10, конечное значение s должно быть кратно 10, то есть это 1030 > 1024; для достижения этого значения переменную s нужно 103 раза увеличить на 10, поэтому цикл выполнится 103 раза; так как k – это счётчик шагов цикла, конечное значение k будет равно 103; Ответ: 103.
Разбор задачи 2: Определите, что будет напечатано в результате работы следующего фрагмента программы: < int k, s; k = 5; s = 2; while (k < 120) < s = s + k; k = k + 2; >cout<<s; >
начальные значения переменных k и s равны соответственно 5 и 2; цикл заканчивается, когда нарушается условие k < 120, то есть количество шагов цикла определяется изменением переменной k; после окончания цикла выводится значение переменной s; с каждым шагом цикла значение s увеличивается на k, а затем значение k – на 2, так что к начальному значению s добавляется сумма членов арифметической прогрессии с начальным значением и разностью d = 2; поскольку начальное значение k равно 5 и с каждым шагом оно увеличивается на 2, переменная k принимает последовательно нечётные значения: 5, 7, 9, …; цикл заканчивается, когда значение k становится не меньше 120; поскольку k всегда нечётное, конечное значение k равно 121; Решение:
поскольку значение k увеличивается после того, как увеличивается значение s, значение 121 уже не входит в сумму, то есть последний элемент последовательности an = 121 – 2 = 119: количество членов последовательности, которые входят в сумму, можно вычислить: чтобы из 5 получить 119 нужно 57 раз добавить шаг 2, поэтому общее число элементов последовательности равно n = 58 (на один больше; теперь используем формулу для вычисления суммы членов арифметической прогрессии: к этой сумме нужно добавить начальное значение переменной s, равное 2: s = 2 + 3596 = 3598 Ответ: 3598. Решение:
Разбор задачи 3: Запишите число, которое будет напечатано в результате выполнения программы. < int s, n; s = 33; n = 1; while (s > 0) < s = s – 7; n = n * 3; >Cout<<n; >
из программы видно, что начальные значения переменных s и n равны соответственно 33 и 1 цикл заканчивается, когда нарушается условие s > 0, то есть количество шагов цикла определяется изменением переменной s после окончания цикла выводится значение переменной n таким образом, задача сводится к тому, чтобы определить число шагов цикла, необходимое для того, чтобы значение s стало меньше или равно 0 с каждым шагом цикла значение s уменьшается на 7, а значение n увеличивается в 3 раза, так что n = 3k, где k – это число шагов цикла поскольку s уменьшается на 7, конечное значение s должно быть равно 33-7 * k, причём первое значение, меньшее или равное 0, достигается при k = 5 (и s = 33–7 * 5 = -2 тогда n = 3k = 35 = 243 Ответ: 243. Решение:
попытка делать ручную трассировку, скорее всего, приведет к вычислительной ошибке, потому что число шагов слишком велико; легко забыть, что начальные значения переменных s и k не равны нулю; нужно помнить, что количество членов арифметической прогрессии на 1 больше, чем количество шагов, которые необходимы для перехода от первого значения к последнему. Возможные ловушки и проблемы:
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1,10):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(10):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(10):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1, 4):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(4, 0, −1):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1, 6):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(5):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1,8):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(3,11):
using namespace std;
В таблице A хранятся данные о количестве призёров олимпиады по программированию по девяти округам Москвы. Определите, что будет напечатано в результате выполнения следующего алгоритма, записанного на пяти языках программирования.
DIM A(9) AS INTEGER
DIM k, score AS INTEGER
score = score + A(k)
A = [6, 11, 7, 12, 13, 5, 9, 3, 4]
for k in range (9):
A: array[1..9] of integer;
using namespace std;
Программа предназначена для определения суммарного количества призёров в тех округах, в которых призёров не менее девяти. Это количество равно 11 + 12 + 13 + 9 = 45.
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведён на пяти языках программирования.
DIM k, s AS INTEGER
FOR k = 14 TO 18
for k in range(14,19):
using namespace std;
В таблице Dat хранятся данные ежедневных измерений количества осадков за неделю в миллиметрах (Dat[1] — данные за понедельник, Dat[2] — за вторник и т.д.). Определите, что будет напечатано в результате выполнения следующего алгоритма, записанного на пяти языках программирования.
DIM Dat(7) AS INTEGER
DIM k, day AS INTEGER
Dat(1) = 14: Dat(2) = 9
Dat(3) = 0: Dat(4) = 15
Dat(5) = 0: Dat(6) = 15
IF Dat(k) = 0 THEN
Dat = [14, 10, 0, 15, 0, 15, 10]
for k in range(7):
Var k, day: integer;
Dat: array[1..7] of integer;
using namespace std;
Программа предназначена для определения последнего дня в неделе, в который не выпало осадков. Следовательно, программа выведет число 5.
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведен на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(6,13):
using namespace std;
Цикл «for k := 6 to 12 do» выполняется семь раз. Каждый раз переменная s увеличивается на 5. Поскольку изначально s = 0, после выполнения программы получим: s = 7 · 5 = 35.
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведен на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1,6):
using namespace std;
Определите, что будет напечатано в результате работы следующей программы. Текст программы приведен на пяти языках программирования.
DIM k, s AS INTEGER
for k in range(1,11):
using namespace std;
Цикл «for k:=1 to 10 do» выполняется десять раз. Каждый раз переменная s увеличивается на 7. Поскольку изначально s = 0, после выполнения программы получим: s = 10 · 7 = 70.
DIM Dat(11) AS INTEGER
DIM k, m AS INTEGER
Dat(1) = 20: Dat(2) = 27
Dat(3) = 19: Dat(4) = 28
Dat(5) = 26: Dat(6) = 22
Dat(7) = 24: Dat(8) = 28
Dat(9) = 26: Dat(10) = 21
using namespace std;
Программа предназначена для поиска количества учеников в последнем классе в массиве, в котором менее 25 человек. Проанализировав входные данные, приходим к выводу, что ответ 21.
Обратите внимание, что находится не минимальный элемент массива.
Источник: ГИА по информатике 31.05.2013. Основная волна. Вариант 1316.DIM Dat(10) AS INTEGER
DIM k,m AS INTEGER
Dat(1) = 12: Dat(2) = 15
Dat(3) = 17: Dat(4) = 15
Dat(5) = 14: Dat(6) = 12
Dat(7) = 10: Dat(8) = 13
Dat(9) = 14: Dat(10) = 15
IF Dat(k) = 15 THEN
Dat = [12, 15, 17, 15, 14, 12, 10, 13, 14, 15]
for k in range (10):
Var k, m: integer;
Dat: array[1..10] of integer;
using namespace std;
Источник: ГИА по информатике 31.05.2013. Основная волна. Центр, Урал. Вариант 1301.Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
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.
s = int(input()) n = 1 while s <= 45: s = s + 4 n = n * 2 print( n )
Ответ: 3
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.
6_2 new: Определите, при каком наибольшем введённом значении переменной s программа выведет число 96 (с сайта К. Полякова № 68 со ссылкой на М.В. Кузнецову):var s, n: integer; begin readln (s); n := 3; while s <= 51 do begin s := s + 7; n := n * 2 end; writeln(n) end.
s = int(input()) n = 3 while s <= 51: s = s + 7 n = n * 2 print( n )
Ответ: 23
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.
6_3 new: (с сайта К. Полякова № 83):Сколько существует различных значений d , оканчивающихся на 8, при вводе которых эта приведенная программа выведnет число 50?
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.
d = int(input()) S = 15 N = 10 while S <= 2400: S = S + d N = N + 5 print(N)
Ответ: 4
var S, N: integer; begin S := 15; N := 10; var counter := 0; // цикл для перебора значений d for var d := 1 to 2400 do begin // из условия задачи while S <= 2400 do begin S := S + d; N := N + 5; end; // проверка условий: увеличение счетчика if (d mod 10 = 8) and (N = 50) then begin writeln($''); Inc(counter); end; // устанавливаем первоначальные значения S := 15; N := 10; end; writeln('Результат = ', counter); end.
6_4 new: с сайта К. Полякова № 138:Определите наименьшее и наибольшее введённое значение переменной s , при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей
var s, n: integer; begin readln(s); n := 600; while n > s do begin s := s + 3; n := n - 6 end; writeln(n) end.
s = int(input()) n = 600 while n > s: s = s + 3 n = n - 6 print(n)
Ответ: 2315
Решения подобных заданий прошлых лет
Определить, какое число пропущено
6_14: ЕГЭ по информатике 2020 (Тематические тренировочные задания, 2020 г., Самылкина Н.Н., Синицкая И.В., Соболева В.В., задание № 2):Сопоставьте формулу:
и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
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
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)
Ответ: 3
Фактически она обозначает: сумма x k / k! для всех k, начиная от 1 до n.
Простые задания с двумя линейными непересекающимися функциями
ЕГЭ по информатике 2017 задание ФИПИ вариант 15 (Крылов С.С., Чуркина Т.Е.):Определите, что будет напечатано в результате работы следующего фрагмента программы:
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
s = 512 k = 0 while s < 2048: s = s + 64 k = k + 1 print(k)
Ответ: 24
Решение 6 задания ЕГЭ по информатике (контрольный вариант № 2 экзаменационной работы 2018 года, С.С. Крылов, Д.М. Ушаков):Определите, что будет напечатано в результате выполнения программы:
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
i = 1 s = 105 while s > 5: s = s - 2 i = i + 1 print(i)
Ответ: 51
- Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
- В цикле также присутствует счетчик - переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
- Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на while s > 0 ; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку на s:=100 (105-5):
- Для того чтобы посчитать, сколько раз выполнится цикл, необходимо 100 разделить на 2, т.к. s каждый шаг цикла уменьшается на 2:
- В 3-й строке видим, что начальным значением i является 1, т.е. в первую итерацию цикла i = 2. Значит, нам необходимо к результату (50) прибавить 1.
- Это значение и будет выведено на экран.
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль:
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
s = 260 n = 0 while s > 0: s = s - 15 n = n + 2 print(n)
Ответ: 36
10 Тренировочных вариантов экзаменационных работ для подготовки к ЕГЭ по информатике 2017, задание 8, вариант 1 (Ушаков Д.М.):Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
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
s = 50 k = 1024 while s > 30: s = s - 4 k = k // 2 print(k)
Ответ: 32
Решение 6 задания ЕГЭ по информатике 2018 (диагностический вариант экзаменационной работы 2018 года, С.С. Крылов, Д.М. Ушаков, Тренажер ЕГЭ):Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.
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
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, К. Поляков):Определите, что будет напечатано в результате работы следующего фрагмента программы.
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
n = 1 s = 0 while s <= 365: s = s + 36 n = n * 2 print(n)
Ответ: 2048
- с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2 k , где k – это число итераций цикла;
- поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
- тогда n = 2 k = 2 11 = 2048 .
Сумма или разность двух линейных функций (while s - n или while s + n)
Разбор 6 (раньше №8) задания ЕГЭ вариант № 1, 2019 Информатика и ИКТ Типовые экзаменационные варианты (10 вариантов), С.С. Крылов, Т.Е. Чуркина:Запишите число, которое будет напечатано в результате выполнения следующей программы:
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
s = 522 n = 400 while s - n > 0: s = s - 20 n = n - 15 print(s)
Ответ: 22
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
№ шага условие цикла s n 1 522-400=122
122 > 0522-20=502 400-15=385 2 502-385=117
117 > 0502-20=482 385-15=370 3 482-370=112
112 > 0. . - Видим, что в условии разница между значениями составляет 5:
- Таким образом, чтобы определить количество итераций (шагов) цикла, необходимо значение условия цикла, полученное в первой итерации, разделить на 5:
Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:
ЕГЭ по информатике задание 6.13 (источник: вариант 59, К. Поляков)Запишите число, которое будет выведено в результате работы программы:
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
s = 10 n = 55 while n > s: s = s + 1 n = n - 1 print(n)
Ответ: 32
- Для условия цикла - перенесем влево:
- Согласно начальным значениям, имеем:
- Запишем, как будет изменяться условие цикла в каждой итерации (в каждом шаге):
- Т.е. условие цикла будет истинным пока возможно вычитать 2. Сколько раз можно вычесть два из 45?
- Соответственно, получили 23 итерации цикла.
- Изначально n = 55. С каждой итерацией выполнялось n-1. Посчитаем n:
Поиск наименьшего/наибольшего целого введенного числа d
При каком наименьшем целом введенном числе d после выполнения программы будет напечатано число 192?
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
d = int (input ()) s = 0 k = 0 while k < 200: s = s + 64 k = k + d print(s)
Ответ: 67
- Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит "работу", когда k сравняется с 200 или превысит его (k >= 200).
- Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
- Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
- Так как в цикле k увеличивается на значение d, а повторов цикла 3 (при этом цикл завершается при k>=200), составим уравнение:
- Поскольку число получилось нецелое, то проверим и 66 и 67. Если мы возьмем 66, то:
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
ЕГЭ по информатике задание 6.9 (источник: вариант 37, К. Поляков со ссылкой на О.В. Гасанова)Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?
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
d = int (input ()) n = 33 s = 4 while s <= 1725: s = s + d n = n + 8 print(n)
Ответ: 115, 122
- Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
- Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
- Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 "поместится" в 120 (153 - 33)? :
- Как мы определили, цикл зависит от s, которая в начале программы s = 4. Для простоты работы примем, что s = 0, тогда изменим и условие цикла: вместо s сделаем s (1725-1721)
- Найдем d. Так как цикл выполняется 15 раз, то необходимо найти такое целое число, которое при умножении на 15 возвращало бы число большее 1721:
- 115 - это наименьшее d при котором n станет равным 153 (за 15 шагов цикла).
- Найдем наибольшее d. Для этого надо найти такое число, которое соответствует неравенствам:
- Найдем:
- Наибольшее d= 122
Усложненные задания с двумя линейными функциями
ЕГЭ по информатике задание 6.6 (источник: вариант 36, К. Поляков)Запишите число, которое будет напечатано в результате выполнения следующей программы:
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
s = 0 n = 0 while 2*s*s < 123: s = s + 1 n = n + 2 print(n)
Ответ: 16
- В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
- В результате работы программы на экран выводится значение n.
- Цикл зависит от s, причем работа цикла завершится когда 2 * s 2 >= 123.
- Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s 2 >= 123:
Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:
Арифметическая и геометрическая прогрессия
ЕГЭ по информатике задание 6.10 (источник: вариант 3, К. Поляков)Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer; begin s:=3; k:=1; while k < 25 do begin s:=s+k; k:=k+2; end; write(s); end.
DIM S, K AS INTEGER S = 3 K = 1 WHILE K < 25 S = S + K K = K + 2 WEND PRINT S
s = 3 k = 1 while k < 25: s = s + k k = k + 2 print(s)
Ответ: 147
- Результатом программы является вывод значения s.
- В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
- Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
- В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)
где a1 - первый член прогрессии,
d - разность,
n - количество членов прогрессии (в нашем случае - кол-во итераций цикла)
Запишите число, которое будет напечатано в результате выполнения программы:
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
n = 1 s = 0 while n <= 1000: s = s + n n = n * 2 print(s)
№1. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while s < 66 do begin
Цикл while выполняется до тех пор, пока истинно условие s < 66, т. е. переменная s определяет, сколько раз выполнится цикл.
Значение s есть сумма первых n членов арифметической прогрессии. b =2 a 1+( n -1) d \2* n , — сумма первых n членов прогрессии, — разность прогрессии, — количество членов.
Цикл прервется, когда . s = 2 s 1+( n -1) d /2* n <66
Най дем :s=(2s1+(n-1)d)n<132 ,s1=1 ,d=3 ( т . к . k:=k+3). Чтобы решить это неравенство, нам необходимо решить квадратное уравнение 3 n ^2- n -132=0, среди его корней нас интересуют только положительные, следовательно, n =6,8
Воспользовавшись методом интервалов, находим, что первое натуральное n, при котором нарушается условие, есть n =7 .
Подставив известные параметры в Kn = k 1+( n -1) d получаем, что k 1=19
№2. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while k < 30 do begin
Цикл while выполняется до тех пор, пока истинно условие k < 30, т. е. переменная k определяет, сколько раз выполнится цикл.
Так как последовательность k представляет собой арифметическую прогрессию, найдем n из неравенства:
Kn=k1+9n-1)d<30,k1=0,d=3( т . к . k:=k+3). Воспользовавшись методом интервалов, находим первое натуральное n, при котором нарушается условие: n =11
Значение s есть сумма первых n членов арифметической прогрессии. b =2 a 1+( n -1) d \2* n — сумма первых n членов прогрессии, — разность прогрессии, — количество членов.
№3. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while k < 13 do begin
Цикл while выполняется до тех пор, пока истинно условие k < 13, т. е. переменная k определяет, сколько раз выполнится цикл.
Так как числа небольшие, можно аккуратно выписать все s и k:
(Помните, что условие k < 13 проверяется сразу после k:=k+4, следовательно, действие s:=s+2*k для k=16 выполняться не будет)
Следовательно, ответ 49+16=65
№4. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while k < 11 do begin
Цикл while выполняется до тех пор, пока истинно условие k < 11, т. е. переменная k определяет, сколько раз выполнится цикл.
Запишем последовательно значения s и k:
k 1 2 3 4 5 6 7 8 9 10
s 0 3 6 10 15 21 28 36 45 55
Цикл выполнится десять раз: так как действие k := k+1 стоит в конце цикла для k=11 действие s:= s + k не будет выполняться.
№5. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while k < 15 do begin
Цикл while выполняется до тех пор, пока истинно условие k < 15, т. е. переменная k определяет, сколько раз выполнится цикл.
Цикл будет выполняться, пока k не станет больше либо равным 15. Учитывая, что k принимает только чётные значения, последним действием будет , а цикл выполнится 8 раз. К 5 в результате последовательно прибавляются все четные числа до 16 включительно. Заметим, что это — арифметическая прогрессия с разностью прогрессии, равной 2. Пользуясь формулой для суммы n первых членов арифметической прогрессии, получим:
№6. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var n, s: integer;
while n <= 8 do begin
Поскольку изначально n = 4, цикл while n <= 8 выполнится пять раз. Следовательно, s = 4 + 5 + 6 + 7 + 8 = 30.
№7. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while s < 100 do begin
Цикл while выполняется до тех пор, пока истинно условие s < 100, т. е. переменная s определяет, сколько раз выполнится цикл.
Значение s есть сумма первых n членов арифметической прогрессии. d =2 a 1+( n -1) d \2* n , — сумма первых n членов прогрессии, — разность прогрессии, — количество членов.
Цикл прервется, когда s =2 s 1( m -1) d \2* n <100 .
Най дем :s=(2s1+(n-1)d)n<200 ,s1=0 ,d=4 ( т . к . k:=k+4). Чтобы решить это неравенство, нам необходимо решить квадратное уравнение: n ^2- n -50=0 . Среди его корней нас интересуют только положительные, следовательно, n=7,5
Воспользовавшись методом интервалов, находим, что первое натуральное n, при котором нарушается условие, есть n =8 .
Учитывая порядок операций в цикле, выясняем, что, до того как прерваться, цикл выполнится еще раз, следовательно, n =9 .
Подставив известные параметры в Kn = k 1+( n -1) d , получаем, что k 9=32
№8. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while s < 50 do begin
Цикл while выполняется до тех пор, пока истинно условие s < 50, т. е. переменная s определяет, сколько раз выполнится цикл.
Значение s есть сумма первых n членов арифметической прогрессии. d=2a1+(n-1)d\2*n , — сумма первых n членов прогрессии, — разность прогрессии, — количество членов.
Цикл прервется, когда s =2 s 1+( n -1) d \2* n <50 .
Вы яс ним : s=(2s1+(n-1)d)n<100, s1=2, d=2 ( т . к . k:=k+2). Чтобы решить это неравенство, нам необходимо решить квадратное уравнение: n^2-n-50=0 . Среди его корней нас интересуют только положительные, следовательно n =6,5
Воспользовавшись методом интервалов, находим, что первое натуральное n, при котором нарушается условие, есть n =7.
Так как операция k:=k+2; идет после s:=s+k; то цикл выполнится еще раз, следовательно, n =8.
Kn=k1+(n-1)d Подставив известные параметры, получаем, что k 8=16
№9. Определите, что будет напечатано в результате работы следующего фрагмента программы:
var k, s: integer;
while k < 25 do begin
Цикл while выполняется до тех пор, пока истинно условие k < 25, т.к. по усл. while k < 25 do begin и k:=k+2. То есть цикл будет выполнен 13 раз.
Аккуратно выпишем все s и k:
s 3 4 7 12 19 28 39 52 67 84 103 124 147
k 1 3 5 7 9 11 13 15 17 19 21 23 25
№10. Определите, что будет напечатано в результате выполнения программы (записанной ниже на разных языках программирования):
Читайте также: