вентилятор
Хорошего настроения!

ЕГЭ по информатике - Задание 19 (Массивы)



Новое 19 задание 2023-ого года можете посмотреть в этой статье.


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


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


Но зачем вообще нужны массивы в программировании ? Давайте об этом немного поговорим!





Зачем нужны массивы ?


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


Пусть у нас есть пять переменных, и их первоначальные значения нужно увеличить в два раза. Тогда без массива код будет выглядеть следующим образом:


var x, y, z, m, n: integer;
begin

// Первоначальные значения
x := 2;
y := 3;
z := 1;
m := 6;
n := 8;

//Удваиваем значения
x := 2 * x;
y := 2 * y;
z := 2 * z;
m := 2 * m;
n := 2 * n;




Видим, что приходится каждую переменную умножать отдельно.


Теперь тоже самое сделаем с помощью массива.


const n = 5; {Заводим константу, это будет длина массива}
var i :integer; {Заводим переменную для ЦИКЛА}
A:array[1..n] of integer; {Заводим массив}
begin

// Первоначальные значения
A[1] := 2;
A[2] := 3;
A[3] := 1;
A[4] := 6;
A[5] := 8;

//Удваиваем значения
for i:=1 to n do
  A[i] := 2 * A[i];

Обратите внимание, что удвоение во втором случае идёт с помощью двух строчек, когда в первом случае, удвоение получается с помощью пяти строчек. Если бы переменных было 1000, то выигрыш в объёме кода, был бы ещё большим.





Схематично наш массив можно представить так:


ЕГЭ по информатике - задание 19 (Массив)

Это те же 5 переменных, но они объединены общем именем A. К каждому элементу массива можно обратится по индексу A[1], A[2] и т.д.


Здесь мы задали нумерацию элементов массива от 1 до 5. В паскале можно задать нумерацию элементов массива и от нуля. Например A:array[0..24] of integer;


Удобство использования массива заключается в том, что его элементы можно перебирать и обрабатывать с помощью ЦИКЛОВ! Значит, обычно массив и цикл работают в связке.


Не терпится уже разобрать первый пример из предположительных задач ЕГЭ по информатике.





Примеры решения задач 19 задания из ЕГЭ по информатике



Задача (стандартная)

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

Определите значение переменной k после выполнения следующего фрагмента программы, записанной ниже на разных языках программирования.



БейсикPython
k=0
FOR i=0 TO 8
    IF A(i) > A(i+1) THEN
        k = k + 1
        t = A(i)
        A(i) = A(i+1)
        A(i+1) = t
    END IF
NEXT i
k = 0
for i in range(9):
    if A[i] > A[i+1]:
        k = k + 1
        t = A[i]
        A[i] = A[i+1]
        A[i+1] = t
ПаскальАлгоритмический язык
k := 0;
for i := 0 to 8 do
    if A[i] > A[i+1] then
    begin
      k := k + 1;
      t := A[i];
      A[i] := A[i + 1];
      A[i + 1] := t
    end;
k := 0
нц для i от 0 до 8
    если A[i] > A[i + 1] то
        k := k + 1
        t := A[i]
        A[i] := A[i + 1]
        A[i+1] := t
     все
кц
Си++
k = 0;
for (i = 0; i <= 8; i++)
    if (A[i] > A[i + 1]) {
        k = k + 1
        t = A[i];
        A[i] = A[i + 1];
        A[i + 1] = t;    
    }




Решение:

Рассмотрим программу на языке Паскаль.


В начале переменная k = 0.


Затем начинается ЦИКЛ. Цикл будет выполнятся, пока переменная i "бежит" от 0 до 8.


При первом проходе ЦИКЛА i = 0, при втором i = 1 и т.д.


Внутри цикла проверяется условие (A[i] > A[i+1]). Если условие ВЕРНО, то программа прибавляет к переменной k единицу, и плюс, меняет значения ячеек массива A[i] и A[i+1] с помощью дополнительной переменной t.


ЕГЭ по информатике - задание 19 (Массивы, разбор программы)

Про замену значений двух переменных у меня на сайте написана целая статья!


Чтобы понять, чему равна переменная k после окончания программы, нужно понять, сколько раз будет верно условие внутри цикла.





Сам массив нам дан! (4; 5; 4; 7; 6; 3; 9; 11; 7; 8).


ЕГЭ по информатике - задание 19 (Массивы, решение задачи)

На рисунке показана каждая итерация ЦИКЛА при всех значениях переменной i. Зелёной галочкой отмечены те итерации, где сработает условие, и, значит, переменная k будет увеличена на 1.


Важно: После первого срабатывания условия, программа меняет значения элементов A[1] и A[2]. И наш массив принимает следующий вид: 4; 4; 5; 7; 6; 3; 9; 11; 7; 8. И при следующем проходе A[2] снова принимает значение "5", а не "4"! И так во всех случаях, когда условие срабатывает!


Таким образом, значение k после выполнения программы равна 5.


Ответ: 5



Продолжаем подготовку к 19 заданию из ЕГЭ по информатике.


Задача (ЕГЭ по информатике, 2019, Москва)

Представленный ниже фрагмент программы обрабатывает элементы одномерного массива A с индексами от 0 до 9. Перед началом выполнения данного фрагмента эти элементы массива имели значения 2, 3, 5, 6, 10, 4, 8, 6, 12, 9 (т.е. A[0] = 2, A[1] = 3, ... , A[9] = 9).


Определите значение переменной s после выполнения фрагмента этой программы (записанной ниже на разных языках программирования)


БейсикPython
n = 6
s = 0
FOR i = 0 TO 9
    IF A(i) > A(n) THEN
        s = s + (A(i) MOD A(n))
        t = A(i)
        A(i) = A(n)
        A(n) = t
    END IF
NEXT i
n = 6
s = 0
for i in range(0, 10):
    if A[i] > A[n]:
        s += A[i] % A[n]
        t = A[i]
        A[i] = A[n]
        A[n] = t
ПаскальC++
n := 6
s := 0
for i:=0 to 9 do begin
    if A[i] > A[n] then
    begin
        s := s + (A[i] mod A[n]);
        t := A[i];
        A[i] := A[n];
        A[n] := t;
    end
end;    
n = 6;
s = 0;
for(i = 1; i <= 9; ++i) {
    if (A[i] > A[n]) {
        s += A[i] % A[n];
        t = A[i];
        A[i] = A[n];       
        A[n] = t;
    }
}




Решение:

В начале задаются начальные значения для переменных s и n. Если посмотреть дальше глазами, то видим, что переменная n участвует для указания индекса элемента массива, переменная s - это результат суммы некоторых вычислений.


В ЦИКЛЕ i проходит каждое значение от 0 до 9. В теле Цикла только условие! А в условии проверяется: будет ли элемент массива A с индексом i больше, чем A[n].


В первый раз n=6 (A[6] = 8). Напоминаю, что в этой задаче номера индексов массива начинаются с нуля! Но если условие "сработает", то A[n] поменяется.


Если условие выполнится, то значение A[n] станет равно A[i]. Опять присутствует блок, где элементы массива A[n] и A[i] меняются значениями (Найдите этот кусок кода сами!). И, соответственно, сравнивать в условии будем тоже с новым значением.


Так же, если условие выполнится, то мы к тому, что было к переменной s прибавим значение A[i] mod A[n] (mod - это операция, которая показывает остаток от деления).





Причем, сначала происходит суммирование для переменной s, а потом уже замена значения для A[n].


i A[i] A[n] A[i] > A[n] A[i] mod A[n] s
0 2 8 2 > 8 - 0
1 3 8 3 > 8 - 0
2 5 8 5 > 8 - 0
3 6 8 6 > 8 - 0
4 10 8 10 > 8 2 2
5 4 10 4 > 10 - 2
6 10 10 10 > 10 - 2
7 6 10 6 > 10 - 2
8 12 10 12 > 10 2 4
9 9 12 9 > 12 - 4

Таким образом, по окончании данного фрагмента программы, получится в переменной s значение 4.


Ответ: 4



Ещё один пример 19 задания из реального экзамена, который был в 2020 году в Москве!


Задача (ЕГЭ по информатике, 2020, Москва)

Представленный ниже фрагмент программы обрабатывает элементы одномерного целочисленного массива A c индексами от 0 до 11. Перед началом выполнения данного фрагмента эти элементы массива имели значения согласно таблице:


0 1 2 3 4 5 6 7 8 9 10 11
5 43 20 7 13 7 20 13 2 33 15 5

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


БейсикPython
s = 0
FOR i = 1 TO 11
    IF A(i-1) DIV A(i) < 2 THEN
        s = s + A(i)
    ELSE
        A(i) = A(i) * i
    END IF
NEXT i
s = 0
for i in range(1, 12):
    if A[i-1] // A[i] < 2:
        s += A[i]
    else:
        a[i] = a[i] * i
ПаскальC++
s := 0;
for i:=1 to 11 do begin
    if A[i-1] div A[i] < 2 then
    begin
        s := s + A[i]
    else
        A[i] := A[i] * i;
    end
end;    
s = 0;
for (i = 1; i < 12; ++i ) {
    if (A[i-1] // A[i] < 2) {
        s += A[i]
    }
    else {
        A[i] = A[i] * i
    }
}




Решение:

Цикл "пробегает" весь массив. Здесь переменная i начинает идти с 1, потому что мы внутри тела цикла обращаемся к элементу с индексом i-1. Если бы i пошла с нуля, то получилось бы, что программа обратилась к элементу с индексом -1, и была бы ошибка.


Внутри ЦИКЛА находится одно условие. В условии сразу проверяется меньше ли двух результат от целочисленного деления A[i-1] на A[i] (div - это целочисленное деление, т.е. обычное деление, но дробная часть отбрасывается). Если условие выполнится, то программа к переменной s прибавит элемент A[i]. Если условие не будет выполнено, то элемент A[i] будет умножен на i, и это повлияет на следующую итерацию, ведь массив то изменится.



i A[i-1] A[i] A[i-1] div A[i] < 2 s A[i] (в конце итерации)
1 5 43 0 < 2 43 43 (в конце итерации)
2 43 20 2 < 2 43 40 (в конце итерации)
3 40 7 5 < 2 43 21 (в конце итерации)
4 21 13 1 < 2 56 13 (в конце итерации)
5 13 7 1 < 2 63 7 (в конце итерации)
6 7 29 0 < 2 92 29 (в конце итерации)
7 29 13 2 < 2 92 91 (в конце итерации)
8 91 2 45 < 2 92 16 (в конце итерации)
9 16 33 0 < 2 125 33 (в конце итерации)
10 33 15 2 < 2 125 150 (в конце итерации)
11 150 5 30 < 2 125 55 (в конце итерации)

Ответ: 125

На этом всё! Счастливого ЕГЭ по информатике!








07-08-2020 в 17:15:09





Поддержать сайт:


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

ОГЭ по информатике - Задание 15 (Задачи на Паскале | последовательность оканчивается нулём)

Сегодня разберём нестандартные задачи из задания 15 (вторая часть) ОГЭ...

Категория: Информатика  Подкатегория: ОГЭ
Дата: 05-10-2018 в 15:45:46 0



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



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


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




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.