СВЕТ: СПАСИБО
01-12-2023
Читать статью
Калужский Александр: Задача про Цаплю: https://www.youtube.co..
24-11-2023
Сергей: спасибо большое
Новое 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, то выигрыш в объёме кода, был бы ещё большим.
Схематично наш массив можно представить так:
Это те же 5 переменных, но они объединены общем именем A. К каждому элементу массива можно обратится по индексу A[1], A[2] и т.д.
Здесь мы задали нумерацию элементов массива от 1 до 5. В паскале можно задать нумерацию элементов массива и от нуля. Например A:array[0..24] of integer;
Удобство использования массива заключается в том, что его элементы можно перебирать и обрабатывать с помощью ЦИКЛОВ! Значит, обычно массив и цикл работают в связке.
Не терпится уже разобрать первый пример из предположительных задач ЕГЭ по информатике.
В программе используются целочисленный массив A с индексами от 0 до 9. Значения элементов массива равны 4; 5; 4; 7; 6; 3; 9; 11; 7; 8 соответственно, т.е. A[0] = 4; A[1] = 5 и т.д.
Определите значение переменной k после выполнения следующего фрагмента программы, записанной ниже на разных языках программирования.
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.
Про замену значений двух переменных у меня на сайте написана целая статья!
Чтобы понять, чему равна переменная k после окончания программы, нужно понять, сколько раз будет верно условие внутри цикла.
Сам массив нам дан! (4; 5; 4; 7; 6; 3; 9; 11; 7; 8).
На рисунке показана каждая итерация ЦИКЛА при всех значениях переменной i. Зелёной галочкой отмечены те итерации, где сработает условие, и, значит, переменная k будет увеличена на 1.
Важно: После первого срабатывания условия, программа меняет значения элементов A[1] и A[2]. И наш массив принимает следующий вид: 4; 4; 5; 7; 6; 3; 9; 11; 7; 8. И при следующем проходе A[2] снова принимает значение "5", а не "4"! И так во всех случаях, когда условие срабатывает!
Таким образом, значение k после выполнения программы равна 5.
Продолжаем подготовку к 19 заданию из ЕГЭ по информатике.
Представленный ниже фрагмент программы обрабатывает элементы одномерного массива A с индексами от 0 до 9. Перед началом выполнения данного фрагмента эти элементы массива имели значения 2, 3, 5, 6, 10, 4, 8, 6, 12, 9 (т.е. A[0] = 2, A[1] = 3, ... , A[9] = 9).
Определите значение переменной s после выполнения фрагмента этой программы (записанной ниже на разных языках программирования)
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
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].
Таким образом, по окончании данного фрагмента программы, получится в переменной s значение 4.
Ещё один пример 19 задания из реального экзамена, который был в 2020 году в Москве!
Представленный ниже фрагмент программы обрабатывает элементы одномерного целочисленного массива A c индексами от 0 до 11. Перед началом выполнения данного фрагмента эти элементы массива имели значения согласно таблице:
Определите значение переменной s после выполнения фрагмента этой программы (записанного ниже на разных языках программирования).
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
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, и это повлияет на следующую итерацию, ведь массив то изменится.
На этом всё! Счастливого ЕГЭ по информатике!