1..N

advertisement
Стандартные алгоритмы обработки массивов
в заданиях ОГЭ и ЕГЭ по информатике
(на примере заданий №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. Значения элементов постоянные
величины
2. С клавиатуры.
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.
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. С использованием датчика случайных
чисел.
4.С помощью расчета по формулам.
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.
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;
…
6. Подсчет количества
положительных элементов
…
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;
…
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);
…
Стандартные алгоритмы обработки массивов:
11. Нахождение наименьшего
значения
…
min:=a[1];
For i:=2 to n do
if a[i]< min then min:=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;
…
13.
Нахождение
наибольшего значения
…
max:=a[1];
For i:=2 to n do
if a[i]> max then max:=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
1
2
3
4
5
6
7
Pos
[k]
17
19
20
18
16
20
16
3. Обработка массива
производится в
соответствии с
алгоритмом
4. В конце
осуществляется вывод
результата
5. Нужно определить
значение величины
day
Способ 1
Пошаговое
выполнение
алгоритма
K
1
2
3
4
5
6
7
Pos[k]
17
19
20
18
16
20
16
Выполним алгоритм вручную.
Day m
1
5
k
Проверка
условия
Pos[k]<m
17
Выполняем цикл
2
19<17
3
20<17
4
18<17
5
16<17
нет
нет
нет
да
6
7
нет
нет
16
5
Ответ ______________
20<16
16<16
Способ 2
Продолжим анализ
Выделенные элементы
показывают, что при
разнице в обозначении
имен переменных
программа использует
стандартный алгоритм
поиска номера
наименьшего элемента
массива
Для массива задачи
K
1
2
3
4
5
6
7
Pos[k]
17
19
20
18
16
20
16
ответ
5
Демоверсия 2016
Анализ задачи:
1.
В задаче используется массив
2. Значения массива задаются с помощью
оператора присваивания (постоянные
величины)
K
1
2
3
4
5
6
7
8
9
10
Dat[k]
16
20
20
41
14
21
28
12
15
35
3. Обработка массива производится в
соответствии с алгоритмом
4. В конце осуществляется вывод результата
5. Нужно определить значение величины m
Продолжим анализ
K
1
2
3
4
5
6
7
8
9
10
Dat[k]
16
20
20
41
14
21
28
12
15
35
Все элементы массива – положительные числа.
Следовательно, алгоритм ищет наибольшее значение среди
элементов массива.
ответ
41
Демоверсия 2016
Задание 25 (ЕГЭ)
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.
Дан целочисленный массив из 20
элементов. Элементы массива могут
принимать целые значения от –10 000
до 10 000 включительно. Опишите
на естественном языке или на одном
из языков программирования
алгоритм, позволяющий найти и
вывести количество пар элементов
массива, в которых хотя бы одно число
делится на 3. В данной задаче под
парой подразумевается два подряд
идущих элемента массива.
Например, для массива из пяти
элементов: 6; 2; 9; –3; 6 – ответ: 4.
Исходные данные объявлены так, как
показано ниже на примерах для
некоторых языков программирования
и естественного языка. Запрещается
использовать переменные, не
описанные ниже, но разрешается
не использовать некоторые из
описанных переменных.
В самом начале необходимо сделать
акцент на том, что можно использовать
только объявленные переменные.
Переходим непосредственно к
заданию.
В задании нужно перебрать все
пары соседних элементов, начиная
от пары
(a[1], a[2]) до пары (a[N-1],a[N]) и
подсчитать, сколько среди них пар,
в которых хотя бы одно число
делится на 3.
Как перебрать все пары?
Пусть переменная i будет хранить
номер первого элемента в паре, то есть,
будем рассматривать пары a[i] и a[i+1].
Важно обратить внимание на то, что
просматривая пары элементов массива
нужно не выйти за его границы
(последняя пара a[n-1] и a[n]).
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.
Организуем цикл, который будет перебирать все
значения первой пары,
(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;
k:=k+1;
Вспоминаем, что для проверки кратности
целого числа у числу х используется остаток
от операции целочисленного деления:
в Паскале это условие выглядит следующим
образом:
if y mod x = 0
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);
Демоверсия 2016
Задание 19 (ЕГЭ)
Повышенный уровень, время - 5 минут
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;
еnd.
В программе используется
одномерный целочисленный массив A
с индексами от 0 до 9. Значения
элементов равны
4, 7, 3, 8, 5, 0, 1, 2, 9, 6
соответственно, т.е. A[0] = 4, A[1] = 7 и
т.д.
Определите значение переменной c
после выполнения следующего
фрагмента этой программы.
Решение:
1. Массив будет выглядеть следующим образом:
i
A[i]
0
1
2
3
4
5
6
7
8
9
4 7 3 8 5 0 1 2 9 6
2. Если текущий проверяемый
элемент меньше чем нулевой
элемент А[i]<A[0], то
выполняется алгоритм:
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;
еnd.
Пошаговое выполнение алгоритма
4 7 3 8 5 0 1 2 9 6
1. A[1]<A[0], условие не выполняется.
2. A[2]<A[0], условие выполняется:
c:=1;
t:=3;
A[2]:=4;
A[0]:=3;
3 7 4 8 5 0 1 2 9 6
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;
0 7 4 8 5 3 1 2 9 6
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.
Ответ: c=2
Полезные ресурсы
• Ресурс: Понятие таблицы и массива (N
126150)
• Вид ЦОР: Презентация
• Поставщик ЦОР: ООО "БИНОМ.
Лаборатория знаний"
• Аннотация: Демонстрация к лекции на
тему: таблицы и массивы, линейные
таблицы и одномерные массивы
• Демонстрация
• Ресурс: Описание и ввод значений в
массив в программе на Паскале (N 126153)
• Вид ЦОР: Презентация
• Поставщик ЦОР: ООО "БИНОМ.
Лаборатория знаний"
• Аннотация: Демонстрация к лекции на
тему: описание массива и ввод массива на
языке Паскаль
• Демонстрация
• Ресурс: Цикл с параметром в алгоритме
обработки массива (N 126791)
• Вид ЦОР: Презентация
• Поставщик ЦОР: ООО "БИНОМ.
Лаборатория знаний"
• Аннотация: Демонстрация к лекции на
тему: использование цикла с параметром
для обработки массива
• Демонстрация
• Ресурс: Демонстрация алгоритма с
одномерным массивом "Средняя температура"
в среде "Конструктор алгоритмов" (N 126781)
• Вид ЦОР: Презентация
• Поставщик ЦОР: ООО "БИНОМ. Лаборатория
знаний"
• Аннотация: Демонстрация к лекции на тему
"Алгоритмы обработки массивов. Конструктор
алгоритмов". Вычисление среднего значения.
• Демонстрация
Программа - тренажер для
развития алгоритмического
мышления и формирования
умений составления
управляющих алгоритмов
• Руководство по использованию
• Конструктор алгоритмов
• Задания
Саратов. 2016 г.
Download