Информатика ЕГЭ 6 задание разбор
6-е задание: «Программирование: основные конструкции» Уровень сложности — базовый, Требуется использование специализированного программного обеспечения — нет, Максимальный балл — 1, Примерное время выполнения — 4 минуты.
Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
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 )
Ответ: 14 Видеорешение подобного 6 задания на Python: 📹 Видео
-
✎ Способ 1 (программный): Pascalabc.net:
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.
s1 = 1 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 1 while s <= 45: s = s + 4 n = n * 2 # --- конец кода из условия задания --- if n == 256: print(s1) break s1 += 1
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 )
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.
s1 = 50 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 3 while s <= 51: s = s + 7 n = n * 2 # --- конец кода из условия задания --- if n == 96: print(s1) break s1 -= 1
Сколько существует различных значений 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
-
✎ Способ 1 (программный):Pascalabc.net:
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.
counter = 0 d1 = 1 while True: s = 15 n = 10 d = d1 # --- код из условия задания --- while s <= 2400: s = s + d n = n + 5 if d%10==8 and n==50: counter+=1 d1=d1+1 if d1 == 2400: break print (counter)
Определите наименьшее и наибольшее введённое значение переменной 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
-
✎ Способ 1 (программный):
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.
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 программа выведет трёхзначное число.
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.
s = int(input()) n = 200 while s // n >= 2: s = s + 5 n = n + 5 print(s)
Ответ: 699
-
✎ Способ 1 (программный):
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.
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]?
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.
x = int(input()) s = 6 * (x // 15) n = 1 while s < 300: s = s + 18 n = n * 2 print(n)
Ответ: 360
-
✎ Способ 1 (программный):
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.
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)
Решения подобных заданий прошлых лет
Определить, какое число пропущенои программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
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.
Простые задания с двумя линейными непересекающимися функциямиОпределите, что будет напечатано в результате работы следующего фрагмента программы:
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
- В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла k выводится на экран, т.е. это и есть результат работы программы.
- В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на s (2048 - 512 = 1536):
- Цикл будет выполняться пока s , а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:
- Соответственно, k = 24 .
Определите, что будет напечатано в результате выполнения программы:
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)
#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):
- Для того чтобы посчитать, сколько раз выполнится цикл, необходимо 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)
#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
-
Рассмотрим алгоритм:
Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
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
Определите значение переменной 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
Определите, что будет напечатано в результате работы следующего фрагмента программы.
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 .
Запишите число, которое будет напечатано в результате выполнения следующей программы:
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
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла: № шагаусловие циклаsn1522-400=122122 > 0522-20=502400-15=3852502-385=117117 > 0502-20=482385-15=3703482-370=112112 > 0..
- Видим, что в условии разница между значениями составляет 5:
- Таким образом, чтобы определить количество итераций (шагов) цикла, необходимо значение условия цикла, полученное в первой итерации, разделить на 5:
Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:
Запишите число, которое будет выведено в результате работы программы:
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)
#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
- Для условия цикла - перенесем влево:
- Согласно начальным значениям, имеем:
- Запишем, как будет изменяться условие цикла в каждой итерации (в каждом шаге):
- Т.е. условие цикла будет истинным пока возможно вычитать 2. Сколько раз можно вычесть два из 45?
- Соответственно, получили 23 итерации цикла.
- Изначально n = 55. С каждой итерацией выполнялось n-1. Посчитаем n:
При каком наименьшем целом введенном числе 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, то:
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
Запишите через запятую наименьшее и наибольшее значение числа 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
Запишите число, которое будет напечатано в результате выполнения следующей программы:
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 возвращало бы вычисляемый корень числа:
Арифметическая и геометрическая прогрессияОпределите, что будет напечатано в результате работы следующего фрагмента программы:
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)
#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 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
(т.к. 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)
#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; >