Заметили ошибку ?
Выделите это место и нажмите Ctrl + Q

ЕГЭ по информатике - Задание 8 (Циклы)


Добрый день! В этой статье рассмотрим 8 (восьмое) задание из Единого Государственного Экзамена (ЕГЭ) по информатике.


В этом задании из ЕГЭ по информатике обычно даётся задача на понимание цикла в программировании.


Перейдём к примерам!


Задача (Классика, степенная зависимость)

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



БейсикPython
DIM N, S AS INTEGER
N = 1
S = 0
WHILE N <= 100
S = S + 30
N = N * 3
WEND
PRINT S
n = 1
s = 0
while n <= 100:
    s = s + 30
    n = n * 3
print(s)
ПаскальАлгоритмический язык
var n, s: integer;
begin
    n := 1;
    s := 0;
    while n <= 100 do
    begin
        s := s + 30;
        n := n * 3
    end;
    write(s)
end.
алг
нач
цел n, s
n := 1
s := 0
нц пока n <= 100
    s := s + 30
    n := n * 3
кц
вывод s
кон
Си++
#include
using namespace std;
int main()
{
    int n, s;
    n = 1;
    s = 0;
    while (n <= 100)
    {
        s = s + 30;
        n = n * 3;
    }
    cout « s « endl;
}

Решение:

Программа написана на 5 языках программирования, но мы будем работать с языком "паскаль".


Рассмотрим "анатомию" нашей программы.



ЕГЭ по информатике - задание 8 (анатомия программы с циклом)

В первой строчке объявляются переменные n и s целого типа данных. В восьмом задании из ЕГЭ по информатике преимущественно даются именно целые числа.


Ключевой слово вegin - обозначает начало программы. В следующих двух строчках переменным присваиваются начальные значения (происходит инициализация переменных).


Ключевое слово while - задаёт условие цикла. Пока условие верно (истино), выполняется тело цикла! Внутри тела цикла значение переменных изменяются, в результате чего, через некоторое количество повторений уже не будет выполняться условие n <= 100. Значение переменной n будет больше 100. И цикл закончится.


После окончание цикла выполнится последняя команда данной программы write(s). Она выведет на экран значение переменной s.


Программа полностью завершается на команде end..


Ключевые слова begin и end в паскале - показывают границу чего-либо. Например, у нас есть пара команд begin и end, которая показывает область нашей программы. Есть пара begin и end, которая показывает границу тела цикла while. В некоторых других языках подобную функциональность выполняют фигурные скобки.


Приступим непосредственно к решению!


Принимаем во внимание, что в начале переменная n=1, переменная s=0.


Далее, нам нужно оценить: сколько раз повторится цикл ?


1.После 1-ого повторения циклаn := n * 3 = 1 * 3 = 3
2.После 2-ого повторения циклаn := n * 3 = 3 * 3 = 9
3.После 3-его повторения циклаn := n * 3 = 9 * 3 = 27
4.После 4-ого повторения циклаn := n * 3 = 27 * 3 = 81
5.После 5-ого повторения циклаn := n * 3 = 81 * 3 = 243

После пяти повторений n станет больше 100, значит, цикл прекратится!


Нам нужно узнать, что будет в переменной s после окончания цикла. Цикл повторился 5 раз. Следовательно, мы должны прибавить к первоначальному значению s (нулю) 30 пять раз!


s = 0 + 30 * 5 = 150

Это значение и распечатается после исполнения программы.


Ответ: 150.

Ещё одна классическая задача из тренировочных вариантов ЕГЭ по информатике.


Задача (Классика, лёгкая, линейная зависимость)

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


БейсикPython
DIM K, S AS INTEGER
S = 230
K = 0
WHILE S > 0
    S = S – 15
    K = K + 2
WEND
PRINT K
s = 230
k = 0
while s > 0:
    s = s − 15
    k = k + 2
print(k)
ПаскальАлгоритмический язык
var k, s: integer;
begin
    s:=230;
    k:=0;
    while s > 0 do begin
        s := s – 15;
        k := k + 2;
    end;
    write(k);
end.
алг
нач
    цел s, k
    s := 230
    k := 0
    нц пока s > 0
        s := s − 15
        k := k + 2
    кц
    вывод k
кон
Си++
#include
using namespace std;
 
int main() {
    int s , k;
    s = 230;
    k = 0;
    while(s > 0){
        s = s − 15;
        k = k + 2;
    }
    cout << k << endl;
}


Решение:

В начале переменные s=230, k=0. Цикл выполняется пока s > 0. В теле цикла с каждым проходом от переменной s отнимается 15. Нужно оценить: сколько раз выполнится цикл.


Всего в 230 "влезает" по 15 - пятнадцать раз ( 230 / 15 = 15 целых раз). Т.е. если цикл выполнится 15 раз, то будет переменная s := 230 - 15 * 15 = 5. Это ещё больше 0(нуля) ! Значит, цикл выполнится ещё один раз. После этого значение переменной станет s = 5 - 15 = - 10. Это уже меньше нуля. Следовательно цикл завершится, а количество повторений в общей сложности составит 16 (15 + 1) раз.


Теперь легко вычислить, чему равна переменная k после выполнения всех повторений цикла. Вначале k=0. Мы должны к первоначальному значению прибавить 2 шестнадцать раз.


k = 0 + 2 * 16 = 32

Ответ: 32.

Ещё один частый гость в примерных вариантах ЕГЭ по информатике.


Задача (условие цикла зависит от двух переменных)

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


БейсикPython
DIM S, N AS INTEGER
S = 100
N = 300
WHILE S + N <= 500
S = S + 30
N = N − 20
WEND
PRINT S
s = 100
n = 300
while s + n <= 500:
    s = s + 30
    n = n − 20
print(s)
ПаскальАлгоритмический язык
var s, n: integer;
begin
    s := 100;
    n := 300;
    while s + n <= 500 do
    begin
        s := s + 30;
        n := n − 20;
    end;
    writeln(s)
end.
алг
нач
    цел s, n
    s := 100
    n := 300
    нц пока s + n <= 500
        s := s + 30
        n := n − 20
    кц
    вывод s
кон
Си++
#include
using namespace std;
int main()
{
    int s = 100, n = 300;
    while (s + n <= 500) {
        s = s + 30;
        n = n − 20;
    }
    cout << s;
    return 0;
}


Решение:

Здесь интересно условие цикла s + n <= 500. Оно зависит сразу от двух переменных. До начала цикла сумма этих двух переменных равна s + n = 100 + 300 = 400.


После каждого прохождения цикла сумма переменных увеличивается на 10, потому что одна переменная увеличивается на 30, а другая уменьшается на 20.


Значит, через 10 повторений сумма s + n = 400 + 10 * 10 = 500. Но в условии цикла стоит знак меньше равно (<=). Следовательно, цикл выполнит ещё одно повторение. Всего будет сделано в цикле 11 (10 + 1) повторений.


Теперь определим чему будет равна переменная s после выполнения цикла, ведь именно её программа печатает в команде writeln(s). В начале переменная s была равна 100. В процессе работы цикла к ней прибавилось 30 одиннадцать (11) раз.


s = 100 + 30 * 11 = 430

Ответ: 430.

Важный пример восьмого задания из ЕГЭ по информатике.


Задача (Нелинейная зависимость)

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


БейсикPython
DIM N, S AS INTEGER
N = 3
S = 0
WHILE N <= 7
    S = S + N
    N = N + 1
WEND
PRINT S
n = 3
s = 0
while n <= 7:
    s += n
    n += 1
print(s)
ПаскальАлгоритмический язык
var n, s: integer;
begin
    n := 3;
    s := 0;
    while n <= 7 do
    begin
        s := s + n;
        n := n + 1;
    end;
    writeln(s);
end.
алг
нач
    цел n, s
    n := 3
    s := 0
    нц пока n <= 7
        s := s + n
        n := n + 1
    кц
    вывод s
кон
Си++
#include
using namespace std;
int main() {
    int n, s;
    n = 3, s = 0;
    while (n <= 7) {
        s = s + n;
        n = n + 1;
    }
    cout << s << endl;
    return 0;
}


Решение:

В этой задаче важным моментом является то, что переменная s := s + n не линейно возрастает, поэтому лучше всего просто составить таблицу для каждого прохода цикла.


1.После 1-ого повторения цикла s := 0 + 3 = 3;
n := 3 + 1 = 4;
2.После 2-ого повторения цикла s := 3 + 4 = 7;
n := 4 + 1 = 5;
3.После 3-его повторения цикла s := 7 + 5 = 12;
n := 5 + 1 = 6;
4.После 4-ого повторения цикла s := 12 + 6 = 18;
n := 6 + 1 = 7;
5.После 5-ого повторения цикла s := 18 + 7 = 25;
n := 7 + 1 = 8;

Переменная n стала после 5 повторений равна 8. Это больше 7. Значит, цикл прекращает работу. Команда writeln(s) печатает переменную s. Следовательно, в ответе напишем 25.


Ответ: 25.

Ещё один тип задачек, которые часто встречаются в книжках по подготовке к ЕГЭ по информатике.


Задача (Использование DIV)

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


БейсикPython
DIM k, s AS INTEGER
k = 50
s = 1024
WHILE s > 0
    s = s \ 2
    k = k - 3
WEND
PRINT k
k = 50
s = 1024
while s > 0:
    s = s // 2
    k = k - 3
print(k)
ПаскальАлгоритмический язык
var k, s : integer;
begin
    k := 50;
    s := 1024;
    while s > 0 do
    begin
      s := s div 2;
      k := k - 3
    end;
    write(k)
end.
алг
нач
    цел k, s
    k := 50
    s := 1024
    нц пока s > 0
      s := div(s,2)
      k := k - 3
    кц
    вывод k
кон
Си++
#include 
using namespace std;
int main() {
    int k, s;
    k = 50;
    s = 1024;
    while (s > 0) {
      s = s / 2;
      k = k - 3;
    }
    count << k << endl;
    return 0;
}


Решение:

В этой задаче используется операция div (Целочисленное деление). Эту операцию воспринимаем, как обычное деление, только в ответе дробную часть, если она есть, нужно отбросить. Не округлить, а отбросить!


Примечание: mod - операция, которая определят остаток от деления. Пример x:= 5 mod 2. В переменной x будет значение 1.


Нужно оценить: сколько раз повторится цикл. Условие цикла зависит от переменной s. Пока s>0, цикл будет выполнятся. В начале переменная s=1024. Внутри тела цикла переменная s целочисленным образом делится на 2. В некотором смысле нам повезло, что число 1024 = 210. Т.е., если 1 (20) умножить на 2 десять раз, то получаем 1024. Отсюда верно и обратное, если 1024 поделить на 2 десять раз, то получится 1. Значит, после 10 проходов цикла в переменной s будет 1. Но это больше 0. Следовательно, цикл выполнится ещё один раз. Тогда в последнем проходе цикла s = 1 div 2 = 0, т.к. дробная часть отбрасывается.


Таким образом, цикл выполнится 11 раз. Печатает программа переменную k.

k = 50 - 3 * 11 = 17

Ответ: 17.

Задача (Цикл For)

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


БейсикPython
DIM k, s AS INTEGER
s = 0
FOR k = 3 TO 8
    s = s + k
NEXT k
PRINT s
s = 0
for k in range(3, 9):
    s = s + k
print(s)
ПаскальАлгоритмический язык
var k, s : integer;
begin
    s := 0;
    for k := 3 to 8 do
      s := s + k;
    write(s)
end.
алг
нач
    цел k, s
    s := 0
    нц для k от 3 до 8
      s := s + k
    кц
    вывод s
кон
Си++
#include 
using namespace std;
int main() {
    int k, s;
    s = 0;
    for(k=3 ; k <= 8; k++)
      s = s + k;
    count << s << endl;
    return 0;
}

Решение:

Здесь используется цикл for. У этого цикла нет условия. Цикл повториться столько раз, сколько переменная k идёт от 3 до 8. При первом проходе k = 3, при втором проходе k = 4, и т.д. При последнем проходе k = 8.


Тело цикла в этой программе тоже явно не указано словами begin и end. Значит, телом циклом является следующая команда после слова for. В нашем случае это команда s := s + k;


Восьмую задачу из ЕГЭ по информатике на цикл for удобнее решать, расписав каждый проход цикла.


1.После 1-ого повторения цикла k = 3 s = 0 + 3 = 3
2.После 2-ого повторения цикла k = 4 s = 3 + 4 = 7
3.После 3-его повторения цикла k = 5 s = 7 + 5 = 12
4.После 4-ого повторения цикла k = 6 s = 12 + 6 = 18
5.После 5-ого повторения цикла k = 7 s = 18 + 7 = 25
6.После 6-ого повторения цикла k = 8 s = 25 + 8 = 33


Ответ: 33.

Задача (Блок-схема)

Запишите значение переменной а после выполнения фрагмента алгоритма:


ЕГЭ по информатике - задание 8 (задача с блок-схемой)


Решение:

Это такая же задача, как мы рассматривали, только программа представлена в виде визуальной блок-схемы.


ЕГЭ по информатике - задание 8 (анатомия блок-схемы)

Цикл выполняется пока a < b. С каждым проходом цикла переменная a увеличивается в два раза. По сути это степенная функция! С первым проходом в переменной a будет 2 (21), во втором проходе 4 (22), и т.д.


Переменная b не меняется и равна 101. В какой степени 2 будет больше 101 ? 27 = 128! Значит, в переменной a после окончание цикла будет значение 128. Нас и спрашивают, что будет в переменной a. Последняя команда в программе b:=a дана просто так, она никак на ответ не повлияет.


Ответ: 128

На этом всё! Успехов на экзамене по информатике.






30-05-2020 в 09:55:30





Похожая статья:

ЕГЭ по информатике - Задание 5 (Условие Фано)

Привет! Сегодня узнаем, как решать пятое задание из ЕГЭ по информатике...

Категория: ЕГЭ  Подкатегория: -
Дата: 15-01-2018 в 16:47:34 0



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:


Последние
видео:



ЕГЭ по информатике - Задание 14
ЕГЭ по информатике - Задание 13





Давайте
дружить!


Группа Вконтакте Code-Enjoy

Твиттер Александра Калужского

YouTube канал Code-Enjoy