Демовариант ЕГЭ по информатике 2020 года, задание 25

Демовариант ЕГЭ по информатике 2020 года, задание 25

Задача 25

Дан целочисленный массив из 30 элементов. Элементы массива могут принимать натуральные значения от 1 до 10 000 включительно. Опишите на одном из языков программирования алгоритм, который находит минимум среди элементов массива, не делящихся нацело на 6, а заменяет каждый элемент, не делящийся нацело на 6, на число, равное найденному минимуму. Гарантируется, что хотя бы один такой элемент в массиве есть. В качестве результата необходимо вывести изменённый массив, каждый элемент выводится с новой строчки.

Например, для исходного массива из шести элементов:

14
6
11
18
9
24

программа должна вывести следующий массив:

9
6
9
18
9
24

ege 2020 22 1

ege 2020 22 2

Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6). В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на Алгоритмическом языке).

Начнем с того, что в условии задачи уже указана часть программного кода: объявление переменных и заполнение заданными элементами массива.

const
    N = 30;
var
    a: array [1..N] of longint;
    i, j, k: longint;
begin
    for i := 1 to N do
    readln(a[i]);
...
end.

Наша задача заключается в обработке имеющегося массива согласно определенныым условиям.

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

Итак: 

1. найдем минимальный элемент массива, который удовлетворяет условию: элемент не делится нацело на 6;
2. все элементы массива, не делящиеся нацело на 6, заменить на число, равное найденному минимуму;
3. вывести измененный массив (каждый элемент с новой строчки).

Честь 1. Для поиска минимального элемента массива удовлетворяющего некоторому условию необходима дополнительная переменная, в которой будет храниться его значение. Начальное значение минимума полагается равным некоторому достаточно большому числу (в нашем случае это 10000).

Элементы массива анализируются подряд - организуют цикл, в котором анализируют все элементы массива, начиная с первого, на предмет соответствия условию: элемент не делится нацело на 6. Если значение такого (удовлетворяющего условию) элемента массива окажется меньше ранее найденного минимума, то значение минимума необходимо обновить, сделав равным этому элементу.

ege 2020 23 1 1 1

Часть 2. Минимальное значение элемента массива мы уже определили и оно хранится в отледьной переменной. Теперь необходимо заменить на него все элементы массива, удовлетворяющие поставленному условию: элемент не делится нацело на 6. Замена происходит в цикле, так как в массиве может быть несколько элементов, подлежащих замене. При этом на каждом шаге анализируется очередной элемент массива. Если он удовлетворяет заданному условию, то происходит его замена.

ege 2020 23 2

Часть 3. Вывод массива – одна из основных операций, без которой не обходится ни одна программа обработки массивов. Вывод массива организуется также при помощи цикла: на каждом шаге цикла выводится элемент массива.

ege 2020 23 4

Стоит обратить внимание на то, что части 2 и 3 можно объединить в один цикл.

ege 2020 23 3

Таким образом рещение задачи может быть реализовано через три или два цикла. Оба решения являются верными.

Среди объявленных переменнх (i, j, k): i - параментр цикла, переменную k мы будем использовать для хранения минимального значения элемента массива. Переменную j в своей программе мы использовать не будем (это не запрещено условием).

Основываясь на наши рассуждения, составим часть алгоритма для решения поставленной задачи:

С тремя циклами С двумя циклами
ege 2020 23 5 ege 2020 23 6 

 На основании разработанных алгоритмов, составим программный код:

k := 10001;
for i := 1 to N do
    if (a[i] mod 6 <> 0) 
        and (a[i] < k) then
            k:=a[i];
for i := 1 to N do 
    if (a[i] mod 6 <> 0) then
        a[i] := k;
for i := 1 to N do
    writeln(a[i]);
k := 10001;
for i := 1 to N do
    if (a[i] mod 6 <> 0) 
      and (a[i] < k) then
        k:=a[i];
for i := 1 to N do
    begin
      if (a[i] mod 6 <> 0) then
          a[i] := k;
      writeln(a[i])
    end

Ответ на это задание должен быть записан следующим образом:

k := 10001;
for i := 1 to N do
    if (a[i] mod 6 <> 0) 
      and (a[i] < k) then
        k:=a[i];
for i := 1 to N do
    begin
      if (a[i] mod 6 <> 0) then
          a[i] := k;
      writeln(a[i])
    end

Другой вариант ответа (с тремя циклами):

k := 10001;
for i := 1 to N do
    if (a[i] mod 6 <> 0) 
        and (a[i] < k) then
            k:=a[i];
for i := 1 to N do 
    if (a[i] mod 6 <> 0) then
        a[i] := k;
for i := 1 to N do
    writeln(a[i]);

Стоит еще раз обратить внимание на то, что оба варианта программы являются верными.

Демонстрационный вариант 2020 года

Выберите соответствующий номер задания в демонстрационном варианте ЕГЭ 2020 года

Информация

Все изображения, размещенные на сайте, изготовлены автором самостоятельно, а также взяты в сети Интернет из тех изображений, которые находятся в свободном доступе. Поиск изображений осуществлялся посредством "Яндекс. Картинки".

Индекс цитирования

Проект при поддержке компании RU-CENTER Рейтинг@Mail.ru

Версия сайта для слабовидящих