Стандартные алгоритмы обработки массивов в заданиях ОГЭ и ЕГЭ по информатике (на примере заданий 10 КИМ ОГЭ, 25,19 КИМ ЕГЭ) Учитель информатики МАОУ «Лицей 3 им. А.С. Пушкина» Скундина Наталья Михайловна
Задание 10 Тема: Обработка массива
Что нужно знать: Массив – это набор однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Объявление массива Var A: array[1..5] of integer; по традиции нумерация элементов массива в Паскале обычно начинается с единицы, далее N обозначает размер массива (количество элементов). Общий вид Var Имя : array[1..N] of тип элементов; Для обращения к элементу массива используют квадратные скобки, запись A[i] обозначает элемент массива A с номером (индексом) i Для обработки всех элементов массива используется цикл вида for i:=1 to N do begin { что-то делаем с элементом A[i] } end; переменная i обозначает номер текущего элемента массива, она меняется от 1 до N с шагом 1, то есть мы проходим последовательно все элементы
Приемы заполнения массивов. 1. Значения элементов постоянные величины Const b: array[1..10] of integer = (2, 4, 6, 8, 10, 12,14, 16, 18, 20); g: array[1..5] of char = ('a', 'b', 'c', 'd', 'e'); Var a: array[1..5] of integer; Begin a[1]:=6; a[2]:=23; a[3]:=14; a[4]:=56; a[5]:=34; ……………………….. ………………………. End. 2. С клавиатуры. Var Mas: array[1..100] of integer; i : integer; Begin Writeln('введите размер массива'); Readln(n); {Количество элементов массива} For i:=1 to n do begin writeln('введите ',i, ' -й элемент массива'); readln(n); end; end.
3. С использованием датчика случайных чисел. Var Mas: array[1..10] of integer; i,n : integer; begin randomize; {инициализация встроенного генератора случайных чисел} Writeln('введите размер массива'); Readln(n); For i:=1 to n do begin {элементы массива заполняются значениями из диапазона от -5 до 5} mas[i]:=-5+random(11); {вывод элементов массива} write(mas[i], ' '); end; end. 4. С помощью расчета по формулам. Var y: array[1..10] of real; i, n: integer; begin Writeln('введите размерность массива'); Readln(n); For i:=1 to n do begin y[i]:=(i*i-3)/(i+2);{формула} writeln(i,' ',y[i]) ; end; end.
Стандартные алгоритмы обработки массивов: 1. Вычисление суммы … s:=0; For i:=1 to n do s:=s+a[i]; … 2. Вычисление среднего значения … s:=0; For i:=1 to n do s:=s+a[i]; s:=s/n; … 3. Подсчет количества элементов равных заданному числу x … readln(x); k:=0; For i:=1 to n do if a[i]=x then k:=k+1 ; … 4. Подсчет количества элементов больших заданного числа x … readln(x); k:=0; For i:=1 to n do if a[i]>x then k:=k+1 ; … При этом понимать, что для подсчета меньших числа х достаточно поменять знак в условии c > на <
Стандартные алгоритмы обработки массивов: 5. Подсчет количества отрицательных элементов … k:=0; For i:=1 to n do If a[i]<0 then k:=k+1; … 7. Подсчет количества неотрицательных элементов … k:=0; For i:=1 to n do If a[i]>=0 then k:=k+1; … 6. Подсчет количества положительных элементов … k:=0; For i:=1 to n do If a[i]>0 then k:=k+1; … 8. Подсчет количества не превосходящих нуля элементов … k:=0; For i:=1 to n do If a[i]<=0 then k:=k+1; …
Стандартные алгоритмы обработки массивов: 9. Нахождение элемента равного заданному числу … write(введите число ); readln(x); For i:=1 to n do If a[i]=x then k:=i; writeln (Элемент с номером,k, равен, x); … 10. Нахождение элементов массива равных заданному числу … write(введите число ); readln(x); write(Элементы с номерами ); For i:=1 to n do If a[i]=x then writeln (i, ); writeln ( равны, x); …
Стандартные алгоритмы обработки массивов: 13. Нахождение наибольшего значения … max:=a[1]; For i:=2 to n do if a[i]> max then max:=a[i] ; … 12. Нахождение номера элемента, имеющего наименьшее значение … min:=a[1]; k:=1; For i:=2 to n do if a[i]<= min then begin min:=a[i] ; k:=i; end; … 11. Нахождение наименьшего значения … min:=a[1]; For i:=2 to n do if a[i]< min then min:=a[i] ; … 14. Нахождение номера последнего наибольшего (наименьшего) по значению элемента … max:=a[1]; k:=1; For i:=2 to n do if a[i]>= max then begin max:=a[i] ; k:=i; end; … (Замена >= на <= ) При этом понимать, что имена у переменных могут быть иными
Задание 10 Решение
Анализ задачи: 1. В задаче используется массив 2. Значения массива задаются с помощью оператора присваивания (постоянные величины) K Pos [k] Обработка массива производится в соответствии с алгоритмом 4. В конце осуществляется вывод результата 5. Нужно определить значение величины day
K Pos[k] Выполним алгоритм вручную. Daymk Проверка условия Pos[k]<m 117 Выполняем цикл 219<17 нет 320<17 нет 418<17 нет 516<17 да <16 нет 716<16 нет Ответ ______________ 5 Способ 1 Пошаговое выполнение алгоритма
Продолжим анализ Выделенные элементы показывают, что при разнице в обозначении имен переменных программа использует стандартный алгоритм поиска номера наименьшего элемента массива K Pos[k] Для массива задачи ответ 5 Способ 2
Демоверсия 2016
Анализ задачи: 1. В задаче используется массив 2. Значения массива задаются с помощью оператора присваивания (постоянные величины) 3. Обработка массива производится в соответствии с алгоритмом 4. В конце осуществляется вывод результата 5. Нужно определить значение величины m K Dat[k]
Продолжим анализ K Dat[k] Все элементы массива – положительные числа. Следовательно, алгоритм ищет наибольшее значение среди элементов массива. ответ 41
Задание 25 (ЕГЭ) Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от – до включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4. Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных. const N = 20; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]);... end. Демоверсия 2016
В самом начале необходимо сделать акцент на том, что можно использовать только объявленные переменные. Переходим непосредственно к заданию. В задании нужно перебрать все пары соседних элементов, начиная от пары (a[1], a[2]) до пары (a[N-1],a[N]) и подсчитать, сколько среди них пар, в которых хотя бы одно число делится на 3. const N = 20; var a: array [1..N] of integer; i, j, k: integer; begin for i := 1 to N do readln(a[i]);... end. Как перебрать все пары? Пусть переменная i будет хранить номер первого элемента в паре, то есть, будем рассматривать пары a[i] и a[i+1]. Важно обратить внимание на то, что просматривая пары элементов массива нужно не выйти за его границы (последняя пара a[n-1] и a[n]).
Организуем цикл, который будет перебирать все значения первой пары, (a[1], a[2] до последней пары a[N-1],a[N], т.е., его параметр i изменяется от 1 до N-1 for i:=1 to N-1 do... Введем переменную-счетчик пар, в которых хотя бы одно число делится на 3. Сначала его значение равно 0, затем, при каждой найденной подходящей паре, значение счётчика увеличивается на 1. k:=0; Вспоминаем, что для проверки кратности целого числа у числу х используется остаток от операции целочисленного деления: в Паскале это условие выглядит следующим образом: if y mod x = 0 k:=k+1;
k:=0; For i:=1 to (N-1) do If ((a[i] mod 3 =0) or (a[i+1] mod 3 =0)) then k:=k+1; writeln(k);
Задание 19 (ЕГЭ) Повышенный уровень, время - 5 минут Демоверсия 2016 В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 4, 7, 3, 8, 5, 0, 1, 2, 9, 6 соответственно, т.е. A[0] = 4, A[1] = 7 и т.д. Определите значение переменной c после выполнения следующего фрагмента этой программы. c := 0; for i := 1 to 9 do if A[i] < A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := t; end.
Решение: 1. Массив будет выглядеть следующим образом: i A[i] Если текущий проверяемый элемент меньше чем нулевой элемент А[i]<A[0], то выполняется алгоритм: c := 0; for i := 1 to 9 do if A[i] < A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := t; end. 3. Начальное значение переменной c=0, при каждой перестановке оно увеличивается на 1, т.е. это счетчик перестановок.
Пошаговое выполнение алгоритма c := 0; for i := 1 to 9 do if A[i] < A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := t; end. 1. A[1]<A[0], условие не выполняется. 2. A[2]<A[0], условие выполняется: c:=1; t:=3; A[2]:=4; A[0]:=3; A[3]<A[0], условие не выполняется. 4. A[4]<A[0], условие не выполняется. 5. A[5]<A[0], условие выполняется c:=2; t:=0; A[5]:=3; A[0]:=0; Ответ: c=2
Полезные ресурсы Ресурс: Понятие таблицы и массива (N ) Вид ЦОР: Презентация Поставщик ЦОР: ООО "БИНОМ. Лаборатория знаний" Аннотация: Демонстрация к лекции на тему: таблицы и массивы, линейные таблицы и одномерные массивы Демонстрация
Ресурс: Описание и ввод значений в массив в программе на Паскале (N ) Вид ЦОР: Презентация Поставщик ЦОР: ООО "БИНОМ. Лаборатория знаний" Аннотация: Демонстрация к лекции на тему: описание массива и ввод массива на языке Паскаль Демонстрация
Ресурс: Цикл с параметром в алгоритме обработки массива (N ) Вид ЦОР: Презентация Поставщик ЦОР: ООО "БИНОМ. Лаборатория знаний" Аннотация: Демонстрация к лекции на тему: использование цикла с параметром для обработки массива Демонстрация
Ресурс: Демонстрация алгоритма с одномерным массивом "Средняя температура" в среде "Конструктор алгоритмов" (N ) Вид ЦОР: Презентация Поставщик ЦОР: ООО "БИНОМ. Лаборатория знаний" Аннотация: Демонстрация к лекции на тему "Алгоритмы обработки массивов. Конструктор алгоритмов". Вычисление среднего значения. Демонстрация
Программа - тренажер для развития алгоритмического мышления и формирования умений составления управляющих алгоритмов Руководство по использованию Конструктор алгоритмов Задания
Саратов г.