В 25 задании нужно написать фрагмент программы, содержащей массив. За это задание можно получить 2 балла. На решение дается около 30 минут. Уровень сложности: высокий. В среднем это задание выполняют правильно 40% учащихся.
В 25 задаче встречаются основные алгоритмические блоки следующих видов:
1. Перебор элементов массива, при чем:
Для одномерного массива запускается цикл по всем его элементам.
Для двумерного массива – цикл в цикле по строкам и столбцам.
Для n-мерного массива – n вложенных циклов.
2. Вычисление среднего значения
Выполняется вычисление суммы, затем сумма делится на количество элементов массива.
3. Вычисление суммы элементов массива
Сначала переменной, выделенной под хранение суммы, присваивается значение 0. Затем, происходит перебор элементов массива и значение суммы складывается со значением текущего элемента массива и становится новым значением суммы.
4. Перебор элементов массива, удовлетворяющих условию
Для перебора элементов массива, удовлетворяющих условию, в начале цикла устанавливается условие. Если это условие не выполняется, цикл переходит к следующему элементу массива.
5. Вычисление произведения элементов массива
Сначала переменной, выделенной под хранение произведения, присваивается значение 1. Затем, элементы массива перебираются и значение произведения умножается на значение текущего элемента массива и становится новым значением произведения.
6. Обмен местами элементов массива
Если нужно поменять местами i-й и j-й элементы массива, то i-й элемент сохраняется в буферную переменную, затем значение j-го элемента копируется в i-й, а значение буферной переменной копируется в j-й элемент.
7. Поиск максимального (минимального) элемента массива
При поиске максимального элемента массива за предполагаемый максимум берется первый элемент массива или число, заведомо меньшее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым максимумом, и если значение этого элемента больше, то оно становится новым предполагаемым максимумом.
Аналогично, при поиске минимального элемента массива за предполагаемый минимум берется первый элемент массива или число, заведомо большее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым минимумом, и если значение этого элемента меньше, то оно становится новым предполагаемым минимумом.
Рассмотрим пример (на Паскаль):
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество элементов массива, значение которых двузначно и заканчивается на 3.
Например, для массива из пяти элементов: 5 67 23 48 13 — ответ: 2.
Исходные данные объявлены так, как показано ниже на примере для языка Pascal. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
const
n=30;
var
a: array[1..n] of integer;
i, j, t: integer;
begin
for i:=1 to n do
readln(a[i]);
...
end.
Решение.
Для определения количества нужных нам элементов проверим каждый элемент массива с помощью цикла for.
По заданию даны три переменные — i, j, t. Переменную i используем как счетчик цикла, переменную t — для подсчета количества элементов. Переменная j лишняя, её использовать не будем (это разрешено по условию).
Переменную t перед проверкой массива нужно обнулить.
Каждый повтор цикла будет проверятся, соответствует ли элемент массива с индексом i условию, если соответствует, то переменная t будет увеличиваться на 1 (нам надо узнать количество).
Составим условие. По сути нам надо проверять два условия: является ли элемент двузначным числом и заканчивается ли это число на 3.
1. Для проверки двузначности условие будет выглядеть как
(a[i]>=10) and (a[i]<=99).
2. Если число заканчивается на 3, значит остаток от деления на 10 этого числа равен трем. То есть условие будет таким:
(a[i] mod 10 = 3).
Составим программу:
t := 0; {обнулим переменную t}
for i:=1 to n do {проверим каждый элемент массива}
if (a[i] >= 10) and (a[i] <= 99) and (a[i] mod 10 = 3) then {проверяем условия}
t := t+1; {подсчитываем количество элементов}
writeln(t); {выведем результат на экран}
Как вы уже поняли, это и есть ответ.
Рассмотрим указания к оцениванию:
Общие указания.
1. В алгоритме, записанном на языке программирования, допускается наличие отдельных синтаксических ошибок, не искажающих замысла автора программы.
2. Эффективность алгоритма не имеет значения и не оценивается.
3. Допускается запись алгоритма на языке программирования, отличном от языков, приведённых в условии. В этом случае должны использоваться переменные, аналогичные описанным в условии.
4. Допускается формат вывода массива, отличный от указанного (например, в строчку).
Если предложен правильный алгоритм, который изменяет исходный массив и выводит в качестве результата изменённый массив, получаете 2 балла.
Если не выполнены условия, позволяющие поставить 2 балла. При этом предложено в целом верное решение, содержащее не более одной ошибки из числа следующих:
1) в цикле происходит выход за границу массива;
2) неверно составлено логическое условие (например, используется or вместо and);
3) исходный массив не изменяется;
4) изменяются не все требуемые элементы (например, только первый или последний из них);
5) отсутствует вывод ответа, или ответ выводится не полностью (например, только один элемент массива ввиду пропущенного цикла вывода элементов или операторных скобок);
6) используется переменная, не объявленная в разделе описания переменных;
7) не указано или неверно указано условие завершения цикла;
8) индексная переменная в цикле не меняется или меняется неверно
Вообще список допустимых ошибок в единичном количестве расширяется в зависимости от содержания задачи.
Так вот, если допустили одну из выше перечисленных ошибок, то получаете 1 балл.
Ошибок, перечисленных выше, две или больше, или алгоритм сформулирован неверно - получаете 0 баллов.
Если остались вопросы, пишите в комментариях. Обязательно отвечу. Если нужно разобрать конкретный пример, также - в комментарии.
Читайте также: Задание 1, Задание 2, Задание 3, Задание 4, Задание 5, Задание 6, Задание 7, Задание 8, Задание 9, Задание 10, Задание 11, Задание 12, Задание 13, Задание 14, Задание 15, Задание 22, Задание 16, Задание 17, Задание 18, Задание 19, Задание 20, Задание 21, Задание 23, Задание 24, Задание 26, Задание 27.
Еще больше интересного материала в группе в ВК и на сайте. Кроме этого, можете воспользоваться услугами репетитора.