Проект Методика изучения обработки одномерных массивов с использованием инновационных образовательных комплексов в условиях реализации ФГОС


Евграфова Ольга Владимировна, учитель информатики МБОУ гимназии №8 г. Коломна Московской области
Методика изучения обработки одномерных массивов с использованием инновационных образовательных комплексов в условиях реализации ФГОС
Оглавление
Введение……………………………………………………………. 3
Роль и место изучения темы «Обработка одномерных массивов» в курсе информатики. 5
Обработка одномерных массивов с использованием образовательного комплекса «1С:Школа. Информатика, 10 кл.» 6
Методические рекомендации по изучению темы и формированию умений и навыков по обработке большого массива однотипных данных…………………………………….... 9
Практические задания для первичного осмысления изученного материала……………………………………………………………. 17
Практические задания для отработки навыков использования массивов…………………………………………………………….. 19
Практические задания для подготовки к ЕГЭ…………………... 20
Заключение…………………………………………………………. 22
Список литературы………………………………………………… 23
Приложения…………………………………………………………. 24

Введение
Для преподавания курса информатики в условиях внедрения ФГОС уже не достаточно коллекции презентаций и тестов, требуется комплексное оснащение курса электронным учебником, справочником, системой практических и тестовых заданий, дидактическими материалами для самостоятельной работы и проектной деятельности учащихся. Решением проблемы может стать образовательный комплекс «1С:Школа. Информатика, 10 кл.». Программный продукт разработан в поддержку информатики и соответствует УМК под редакцией Н.Д.Угриновича.
Особого внимания в образовательном комплексе заслуживает глава 4 «Основы алгоритмизации. Технологии программирования». Материал изложен на двух уровнях: традиционное изучение алгоритмов и программирования (Паскаль, Бейсик, Си) и обучение школьников программированию на основе платформы«1С: Предприятие 8.2».
Умение школьников формально исполнять алгоритмы, отслеживать результаты выполнения программы, решать практические задачи с использованием массивов однотипных данных проверяется на ЕГЭ по информатике.
В настоящее время все большее распространение во всех отраслях экономики и народного хозяйства приобретают решения на платформе «1С:Предприятие». Старшим школьникам, с целью способствования их профессиональному выбору, было бы полезно познакомиться с языком программирования «1С:Предприятие» и приобрести навыки решения задач практического характера.
Все выше сказанное определяет актуальность темы проекта «Методика изучения обработки одномерных массивов с использованием инновационных образовательных комплексов в условиях реализации ФГОС».
Целью проекта является совершенствование методики обучения школьников и осмысление системы задач по обработке массивов данных в языках программирования с учетом профессиональной ориентации на промышленный язык программировании 1С:Предприятие.
Задачи проекта:
рассмотреть роль и место изучения темы «Обработка одномерных массивов» в разделе «Алгоритмизация и программирование» школьного курса информатики.
обобщить и систематизировать теоретическую информацию по обработке одномерных массивов в системе «1С:Предприятие для школьников»;
предложить методические рекомендации по изучению структурированного типа «массивы» в старшей школе с использованием ОК «1С:Школа. Информатика 10 кл»;
разработать подборку задач для изучения темы «Обработка одномерных массивов».
Новизна исследования заключается в применении в образовательном процессе инновационного образовательного комплекса «1С:Школа. Информатика 10 кл.» и разработке методики обучения старших школьников приемам решения практических задач с использованием одномерных массивов на языке программирования Pascal и «1С:Предприятие».
Практическая значимость проекта заключается в возможности использовать систему задач для формирования представлений старших школьников по обработке больших массивов однотипных данных с использованием языка программирования «1С:Предприятие».

Роль и место изучения темы «Обработка одномерных массивов» в курсе информатики.
Одной из задач информатики является нахождение форм представления информации, удобных для компьютерной обработки. Информатика как точная наука работает с формальными (описанными математически строго) структурами данных. К наиболее распространенным структурам данных относятся: целые и вещественные числа, последовательности символов/чисел, строк, таблица (массив), текст, динамические структуры. Структуры данных отражают, в первую очередь, свойства реальных объектов. Используя похожесть структур входных данных и объектов, можно находить эффективные решения задач.
В работе рассматривается одна из сложных структур данных - массив. Необходимость в массивах возникает всякий раз, когда при решении задачи приходится иметь дело с большим, но конечным количеством однотипных упорядоченных данных.
В разделе базового курса «Введение в программирование» структурированные величины, к которым относятся массивы, рассматриваются в ознакомительном порядке. Это обедняет содержание обучения, не дает возможность сформировать целостное представление о понятиях «информация», «данные», «обработка информации и данных». Кроме того, устойчивые знания и умения составлять программы для задач практического характера необходимы на экзаменах по информатике.
Следовательно, без понимания информационной сущности таблиц и основных алгоритмов их обработки невозможно формирование полноценных представлений о возможностях ЭВМ и принципах их работы. Для построения сколь-нибудь сложных и содержательных программ необходимо уверенное владение общими принципами применения таблиц и базовыми приемами их обработки. В данной работе будет рассмотрен ряд простых алгоритмов, которые могут быть использованы при построении более сложных с использованием языка программирования Pascal и «1:С Предприятие».
Обработка одномерных массивов с использованием образовательного комплекса «1С:Школа. Информатика, 10 кл.»
В школьном курсе информатики рассматривают сложные типы данных, такие как массив. Материалы комплекса позволяют изучать тему, используя язык программирования Pascal или «1:С Предприятие».
Определение. Массив – это пронумерованный (проиндексированный) набор однотипных данных, которые располагаются в памяти непосредственно друг за другом, доступ к элементу массива осуществляется по индексу.
Определение. Индексом массива является целое число или значение какого-либо перечислимого типа данных, в котором однозначно можно определять предыдущий и последующий элементы типа.
Описание массива в языке Pascal возможно следующими способами:
1 способ - в разделе переменных:
Var A: array [1..n] of integer; линейный массив из n элементов целого типа
Var A: array [1..3,1..4] of integer; двумерный массив 3х4 целого типа
2 способ – через описание типов:
Const n=15;
Type Myarray= array [1..n] of integer;
Var A: Myarray;
тип - линейный массив из n элементов целого типа
переменная А типа Myarray
Образовательный комплекс «1С:Школа. Информатика, 10 кл.»
Понятие массива вводится в §4.10 и далее изучается в §4.12–4.13. Действия над элементами массива определяются типом этих элементов. В «1С:Предприятие 8.2» массив является объектом универсальной коллекции значений и служит для обработки и хранения временных данных в течение сеанса работы пользователя.
Основное отличие массивов от других структур – это возможность быстрого доступа к произвольному элементу, с использованием его индекса. Для того чтобы обратиться к определенному элементу массива, необходимо указать имя массива и индекс элемента в квадратных скобках.

Навыки использования массивов закрепляются с помощью решения типовых задач.
В практической части рассматриваются задачи на создание и вывод массива, на обработку элементов массива. В практикуме представлены листинги программ и даны краткие комментарии к задачам:
сумма (произведение) элементов массива;
нахождение суммы элементов массива с заданными свойствами;
нахождение количества элементов массива с заданными свойствами;
нахождение среднего арифметического элементов массива с заданными свойствами;
изменение элементов массива с заданными свойствами:
поиск максимального и минимального элементов неупорядоченного массива.
Количество задач избыточное. Поэтому использовать их на уроке можно по усмотрению учителя.

Формы уроков по этой теме могут быть разнообразными: урок-лекция, урок-практикум. Наиболее предпочтительна самостоятельная работа учащихся с ОК под контролем учителя. При организации самостоятельной работы следует четко поставить цели, определить этапы выполнения (в том числе и временные), для более прочного усвоения материала следует предложить учащимся самостоятельно разработать блок-схемы алгоритмов. Чтобы предупредить массовые ошибки при выполнении заданий, необходимо прокомментировать наиболее сложные места.
В профильном курсе информатики при подведении итогов надо уделить внимание анализу вычислительной сложности рассмотренных алгоритмов.
В ОК не рассматриваются алгоритмы обработки двумерных массивов (таблиц). Алгоритмы будут аналогичными, учащимся лишь требуется показать процедуру просмотра всех элементов таблицы с помощью вложенных циклов.

Методические рекомендации по изучению темы и формированию умений и навыков по обработке большого массива однотипных данных.
3.1.После знакомства с определением массива необходимо научиться заполнять массив и выводить его элементы на экран дисплея. Поэтому вместе с учащимися необходимо обсудить алгоритмы и написать программы заполнения массива различными способами, используя операторы цикла для обработки каждого элемента массива.
Задание_1. Заполнить массив А размером 10 с помощью оператора ввода данных с клавиатуры
Program p1; Заголовок программы.
VAR A: array [1..10] OF INTEGER; Описание массива целых чисел.
I: INTEGER; Описание счетчика цикла.
BEGIN Начало блока операторов.
FOR I:=1 TO 10 DO begin Организация цикла.
write (‘Введите’, I , ‘-й элемент’); Сообщение на экране дисплея.
readln (A[I]); Оператор ввода элемента массива.
end; Конец цикла.
Readln; Задержка изображения на экране.
END. Конец программы.
Задание_2. Заполнить массив с помощью датчика случайных чисел и вывести элементов в строку.
Program p2;
VAR A: array [1..10] OF INTEGER;
I: INTEGER;
BEGIN
RANDOMIZE;
FOR I:=1 TO 10 DO begin
A[I]:= RANDOM(90)+10;
WRITE (A[I], ‘ ‘);
end;
Writeln; {перевод курсора}
Readln;
END. Заголовок программы.
Описание массива целых чисел.
Описание счетчика цикла.
Начало блока операторов.
Инициализация генератора случайных чисел.
Организация цикла.
Присвоение элементу массива случ.числа.
Вывод эл. массива (курсор остается в строке)
Конец цикла
Перевод курсора на новую строку
Задержка изображения на экране.
Конец программы.
Задание_3. Познакомиться со способами заполнения массива в ОК: практический материал к §4.10, задания 1,2,3.
3.2. На следующем этапе учащиеся разбирают готовые программы и отвечают на поставленный в задании вопрос. Несколько заданий учитель разбирает вместе с учащимися.
Задание_4. Сколько элементов массива B будут иметь положительные значения?
for n:=1 to 100 do A[n]:=n-10;for n:=1 to 100 do B[n]:=A[n]*n;
10 2) 50 3) 90 4) 100 Алгоритм решения (устно):
Составим частичную трассировочную таблицу для первого цикла:
А={-9, -8, …-1, 0, 1, 2, ….90}- массив содержит 90 положительных чисел.
При выполнении второго цикла количество положительных чисел не изменится, т.к. элементы массива умножаются на их порядковый номер.
Ответ = 3
Задание_5. Чему будут равны элементы этого массива после выполнения фрагмента
программы?
for i:=0 to 9 do A[i]:=9-i;
for i:=0 to 4 do begin
k:=A[i];
A[i]:=A[9-i];
A[9-i]:=k; end;
Ответ: 0 1 2 3 4 5 6 7 8 9 Алгоритм решения:
Составим трассировочную таблицу. Во второй строке таблицы запишем исходное состояние массива. В третьей строке – новое значение массива после выполнение второго цикла. Вспомогательная переменная k используется для хранения текущего элемента массива во время обмена значениями двух переменных.
I=0 1 2 3 4 5 6 7 8 9
A[i]=9 8 7 6 5 4 3 2 1 0
A[i]=0 1 2 3 4 5 6 7 8 9

Задание_6. Значения элементов массива A[1..15] задаются с помощью следующего фрагмента программы. Какие значения будут присвоены элементам A[5], A[8]?
for n:=1 to 15 do A[n]:=sqr(n); for n:=1 to 15 do begin
if n mod 2<>0
then А[n] := sqrt(A[n])
else A[n] := A[1];
end;
Алгоритм решения:
Составим частичную трассировочную таблицу.
N=1 2 3 4 5 6 7 8
A[n]=1 4 9 16 25 36 49 64
A[n]=1 5 1
Если индекс элемента является нечетным числом, то новое значение элемента – квадратный корень из исходного элемента массива, в противном случае – становится равным первому элементу(1).
Ответ A[5]=5, A[8]=1
3.3. Следующий этап – знакомство с типовыми алгоритмами обработки массивов и формированием умений использовать эти алгоритмы при решении практических задач. Представленные задачи учитель разбирает вместе с учащимися. Алгоритм решения обсуждается устно, затем оформляется программа.
Задание_7. Найти среднее значение элементов массива.
Алгоритм:
Введем переменную Sum, которая будет хранить сумму элементов массива. До выполнения цикла эта переменная должна быть равна 0.
Затем в цикле просуммируем элементы массива.
И когда цикл отработает, разделим полученное значение суммы на количество элементов массива. Полученное значение присвоим переменной Sred. Program pr_7;
VAR A:array [1..10] OF REAL;
I: INTEGER;
sum, sred : real;
BEGIN
for i:=1 to 10 do read(A[i]);
Sum:=0;
for i:=1 TO 10 DO
sum:=sum+A[i];
Sred:=sum/10;
Writeln(“Среднее арифм.=”,sred:8:2);
END.
Задание_8. Подсчитать количество отрицательных элементов массива.
Алгоритм:
Введем переменную kol, которую будем использовать для подсчета количества отрицательных элементов массива. До выполнения цикла эта переменная должна быть равна 0.
Затем в цикле проверяем элементы массива, и если очередной элемент отрицательный, то переменную kol увеличиваем на 1.
Когда цикл завершит свою работу, выведем значение переменной kol на экран дисплея. Program pr_8;
VAR A:array [1..10] OF REAL;
Kol, I: INTEGER;
BEGIN
for i:=1 to 10 do read(A[i]);
kol:=0;
FOR I:=1 TO 10 DO
If A[i]<0 then kol:=kol+1;
Writeln(“Кол. отриц=”, kol);
END.
Задание_9. Найти максимальный элемент массива и его порядковый номер.
Program pr_9;
const N=10;
var A:array[1..N] of integer;
i, max:integer;
begin
writeln(“Введите элементы:”);
for i:=1 to N do read(A[i]);
max:=a[1];
while (i<N) do begin
i:= i + 1;
if max < a[i] then max:=a[i];
end;
writeln(“max=”,maх);
end. Алгоритм поиска максимального элемента в неупорядоченном массиве:
Установить счетчик равным 1 (i = 1).
Положим значение текущего максимума равным первому исследуемому элементу (max = a1).
Если исследованы еще не все элементы (i < n), то перейти к шагу 4, иначе перейти к шагу 7 .
Перейти к следующему элементу (увеличить i на единицу).
Если рассматриваемый элемент больше, чем текущий максимум (ai > max), то значение ai присвоить max.
Перейти к шагу 3.
Вывести max.
Задание_10. Найти в массиве элемент, равный числу К, которое вводится с клавиатуры. Вывести номер элемента или сообщение, что такого числа нет в массиве.
Алгоритм:
Введем переменную nom, в которой запомним номер элемента, равный K.
Затем в цикле будем проверять каждый элемент, и если он равен K, то сохраним его индекс в переменной nom.
После завершения работы цикла необходимо проверить значение в переменной nom. Если оно осталось равным 0, то такого числа мы не встретили, иначе переменная хранит номер элемента массива. Выведем соответствующее сообщение. Program pr_10;
var A:array[1..10] of integer;
i, k, nom: integer;
begin
writeln(“Введите элементы:”);
for i:=1 to 10 do read(A[i]);
writeln(“Введите К “); readln(k);
nom:=0;
for i:=1 to N do
if a[i]=k then nom:=I;
if nom=0 then
writeln(“Нет элемента”)
else
writeln(«Номер=», nom);
end.
Задание_11. Найти минимальный четный элемент в целочисленном массиве размера 15.
Program pr_11;
var A:array[1..15] of integer;
i, flag, min: integer;
begin
writeln(“Введите элементы:”);
for i:=1 to 15 do read(A[i]);
flag:=0;
for i:=1 to 15 do
if A[i] mod 2=0 then
if flag=0 then begin
min:=A[i];
flag:=1;
end
else
if A[i] < min then min:=A[i];
if flag=0 then
writeln(“Нет четных”)
else writeln(min);
end. Обычно для инициализации переменных минимума/ максимума выбирают первый элемент массива, но в предложенной задаче это правило не работает. Поэтому будем использовать переменную flag, которая позволит отследить ситуацию «встретилось четное число или нет».
Алгоритм:
Присвоим переменной flag значение 0.
В цикле будем осуществлять поиск четных элементов. Если такой элемент встретился, то проверим состояние переменной flag.
Если flag=0, то мы встретили первое четное число, которое надо запомнить в переменной min и переменной flag присвоить значение 1(в переменной min уже есть значение для сравнения).
Если flag=1, то сравниваем элемент массива с переменной min и, если элемент меньше, чем значение min, запоминаем его в переменной min.
После завершения цикла проверяем переменную flag и, в зависимости от ее значения, выводим минимум или сообщение, что четных чисел в массиве нет.
Задание_12. Осуществить циклический сдвиг элементов массива вправо на k элементов. K – вводится с клавиатуры.
Пример:
Исходные данные: А={2_13_5_ 67_ 4_ 9_ 23}, k=2
Результат: А={9_ 23_ 2_ 13_ 5_ 67_ 4 }
Алгоритм:
Необходимо К раз выполнить следующие действия:
Запомнить в переменной rab последний элемент массива.
Сдвинуть все элементы вправо на одну позицию, для этого организуем цикл с 15 до 2, и присваиваем очередному элементу значение предыдущего.
По завершению цикла необходимо первому элементу присвоить значение переменной rab.
Program pr_12;
var A:array[1..15] of integer;
i, k, t, rab: integer;
begin
writeln(“Введите элементы:”);
for i:=1 to 15 do readln(A[i]);
writeln(“Введите K:”); readln(k);
for i:=1 to k do begin
rab:= A[15];
for t:=15 downto 2 do
A[t]:=A[t-1];
A[1]:=rab;
end;
for i:=1 to 15 do write(A[i],”_”);
End.
Задание_13. Познакомиться со способами поиска элементов в массиве в ОК: практический материал к §4.12

3.4. Следующий этап – решение практических задач, требующих умений применять при разработке программы различные типовые алгоритмы. Такие задачи встречаются и в экзаменационных материалах. Алгоритмы решения обсуждаем устно.
Задание_14. Дан целочисленный массив из 65 элементов, которые могут принимать значения от -3000 до 3000.
Допишите фрагмент программы вместо многоточия, который позволит найти и вывести максимальное значение среди элементов массива, которые делятся на 3 или 7. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого кратно 3 или 7. Запрещается использовать переменные, не объявленные в программе, но разрешается не использовать часть из них.
Const N=65;
Var a: array[1..N] of integer;
i, j, max: integer;
Begin
For i:=1 to N do readln(a[i]);
………….
End. Алгоритм:
При решении задачи можно воспользуемся типовым алгоритмом обработки массива: поиск максимального элемента. Однако необходимо правильно инициализировать начальное значение максимума: это число должно делиться на 3 или 7.
Так как нам известны границы значений элементов и гарантируется, что хотя бы один такой элемент есть в массиве, то за начальное значение можно взять нижнюю границу(-3000).
В цикле будем каждое число проверять на соответствие условию, и если оно делится на 3 или 7, буде сравнивать его с ячейкой, где хранится максимальный элемент на данный момент.
Решение:
Max:= - 3000;
For i := 1 to N do
If ((a[i] mod 3=0) or (a[i] mod 7=0))
and (max<a[i])
then max:=a[i];
Writeln(max);
Задание_15. Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов.
Алгоритм решения задачи:
Введем числовые переменные Max и Trio, в которые занесем сумму первых трех элементов массива.
Затем в цикле, начиная с 4-го элемента, до конца массива выполняем следующие действия:
прибавляем к переменной Trio очередной элемент массива,
вычитаем из нее первый элемент четверки, сумму которой она содержит,
сравниваем результат со значением переменной Max; если он больше, то заносим его в переменную Max.
По окончании работы алгоритма выводим переменную Max. Решение:
Program z15;
const N=30;
var a: array[1..N] of integer;
Max, Trio, I : integer;
begin
Trio:=a[1]+a[2]+a[3]; Max:=Trio;
for i := 4 to N do begin
Trio:=Trio+a[i]-a[i-3];
if Trio>Max then
Max:=Trio; end;
writeln(Max); end.
Задание_16. Дан массив, содержащий 2014 неотрицательных целых чисел, не превышающих 10 000. Допишите фрагмент программы вместо многоточия, который позволит найти и вывести сумму всех содержащихся в массиве трёхзначных чисел, десятичная запись которых оканчивается на 9, но не на 99. Если таких чисел в массиве нет, программа должна вывести число –1. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
const N=2014;
var a: array [1..N] of integer;
i, j, s: integer;
begin
for i:=1 to N do readln(a[i]);

end. Алгоритм решения задачи:
Введем числовую переменную S, в которой будем накапливать сумму подходящих под условие элементов массива. Начальное значение суммы=0.
Далее в цикле необходимо проверить, является ли число трехзначным и , если «да», то проверить следующие условия; оканчивается на 9, но не на 99. Для осуществления проверок необходимо использовать операцию нахождения остатка от деления.
После завершения работы цикла следует посмотреть на значение суммы. Если оно равно 0, то таких чисел не встретилось, а следовательно Sприсваиваем значение -1. Выводим ответ.
Решение:
s:=0;
for i:=1 to N do begin
if (100<=a[i]) and (a[i]<=999)
and (a[i] mod 10 = 9)
and (a[i] mod 100 <> 99)
then s := s + a[i]; end;
if s=0 then s:=-1; writeln(s);
Задание_17. Опишите на русском языке или на одном из языков программирования алгоритм поиска второго по величине (т.е. следующего по величине за максимальным) элемента в числовом массиве из 30 различных элементов.
Алгоритм решения задачи:
Введем числовые переменные Max1 и Max2, в которых будем хранить соответственно максимальный и следующий за максимальным элемент в уже просмотренной части массива.
Присвоим переменной Max1 большее из двух первых элементов массива, а Max2 – меньшее.
Затем в цикле, начиная с третьего элемента, до конца массива сравниваем очередной элемент массива с двумя максимальными, и если он больше одного из них или обоих, то меняем два отобранных элемента.
По окончании цикла переменная Max2 содержит второй по величине элемент массива. Решение:
const N=30;
var a : array[1..N] of real;
Max1, Max2, i : real;
begin
Max1:=a[1]; Max2:=a[1];
if a[2]>Max1 then Max1:=a[2]
else Max2:=a[2];
for i:=3 to N do begin
if a[i] >Max1 then
begin
Max2:=Max1; Max1:=a[i];
end
else
if a[i]>Max2 then Max2:=a[i];
end;
writeln(Max2); end.
Задание_18. Опишите на русском языке или одном из языков программирования алгоритм подсчета максимального количества подряд идущих совпадающих элементов в целочисленном массиве длины 30. Program z18;
var a: array[1..30] of integer;
i, k, kMax: integer;
begin
for i:=1 to 30 do readln(A[i]);
k := 1; {число элементов в цепочке}
kMax := 1; {макс. кол-во в цепочке}
for i:=2 to 30 do begin
if A[i] = A[i-1] then k := k + 1
else {цепочка закончилась }
begin if k > kMax
then kMax := k;
k := 1;
end; end;
if k > kMax then
kMax := k; { если цепочка стоит в конце}
writeln(kMax);
end.

4. Практические задания для первичного осмысления изученного материала.
(Решения представлены в Приложении_1)
К пунктам 3.1, 3.2.
Задание_1. Как изменяются элементы этого массива?
for i:=0 to 10 do
A[i]:= i + 1;
for i:=1 to 10 do
A[i]:= A[i-1]; 1) все элементы, кроме последнего, сдвигаются на 1 элемент вправо
2) все элементы, кроме первого, сдвигаются на 1 элемент влево
3) все элементы окажутся равны 1
4) все элементы окажутся равны своим индексам.
Задание_2. Чему будет равно значение переменной j после выполнения этого алгоритма?
n := 10;
for i:=1 tо n do A[i] := i;
j := 1;
for i:=1 tо n-1 do
if A[i] < A[i+1] then j := j + 1;
end.
Задание_3. В программе описан одномерный целочисленный массив с индексами от 0 до 10. В приведенном фрагменте программы массив сначала заполняется, а потом изменяется. Чему будут равны элементы этого массива?
for i:=0 to 10 do
A[i]:= i + 1;
for i:=0 to 10 do
A[i]:= A[10-i];
1) 10 9 8 7 6 5 4 3 2 1 0
2) 11 10 9 8 7 6 5 4 3 2 1
3) 11 10 9 8 7 6 7 8 9 10 11
4) 10 9 8 7 6 5 6 7 8 9 10
Задание_4. Значения элементов массива A[1..15] задаются с помощью следующего фрагмента программы. Какие значения будут присвоены элементам A[4], A[9]?
T:=100;
for n:=1 to 15 do
A[n]:= T - sqr(n); for n:=1 to 15 do begin
if А[n] mod 2<>0
then А[n] := A[n]-10
Else A[n] := A[11] + А[n];
end;
Задание_5. Дан одномерный целочисленный массив с индексами от 0 до 10 и целочисленные переменные k, i. В приведенном фрагменте программы массив сначала заполняется, а потом изменяется. Чему будут равны элементы этого массива? for i:=0 to 10 do A[i]:=i;
for i:=0 to 4 do begin
k:=A[2*i]; A[2*i]:=A[2*i+1];
A[2*i+1]:=k; end;
1) 5 6 7 8 9 0 1 2 3 4 10
2) 10 9 8 7 6 5 4 3 2 1 0
3) 0 1 2 3 4 5 4 3 2 1 0
4) 1 0 3 2 5 4 7 6 9 8 10
К пункту 3.3.
Задание_1. В массиве из случайных чисел размера N подсчитать число элементов, величина которых больше 7.
Задание_2. Найти сумму элементов массива, значения которых принадлежат промежутку [А,В].
Задание_3. В целочисленном массиве случайных чисел размера N подсчитать число элементов, кратных 3.
Задание_4. Найти количество положительных элементов массива и произведение отрицательных элементов.
Задание_5. Найти среднее значение элементов массива, которые являются двузначными числами.
Задание_6. Найти минимальный элемент в массиве случайных чисел. Элементы массива могут принимать значения от -5 до 37.


Практические задания для отработки навыков использования массивов.
(Решения представлены в Приложении_2)
К пункту 3.3.
Задание_1. Дан целочисленный массив из 30 элементов. Массив заполняется случайным образом и его элементы могут принимать значения от 10 до 1000. Вывести на экран исходный массив. Подсчитать и вывести среднее арифметическое элементов массива, имеющих четные значения. Гарантируется, что в исходном массиве хотя бы один элемент имеет четное значение. Задание_2. Задан массив вещественных чисел размера 17. Все элементы задаются вводом с клавиатуры. Увеличить на 10 те элементы массива, которые стоят до первого отрицательного элемента. Распечатать исходный и преобразованный массивы двумя строками.
Задание_3. Даны два целочисленных массива, состоящие из одинакового числа элементов. Получить третий массив той же размерности, каждый элемент которого равен большему из соответствующих элементов данного массива.
Задание_4. Создать одномерный массив, состоящий из положительных и отрицательных целых чисел, размера N. Подсчитать произведение положительных элементов массива, стоящих на нечетных местах (номера элементов являются нечетными числами).
Задание_5. Найти произведение элементов с k1-го по k2-ой, где k1 и k2 вводятся с клавиатуры. Сделать проверку корректности их ввода. Задание_6. Получить первые n чисел Фибоначчи, — первые два числа равны 1, а каждое следующее равно сумме двух предыдущих.
Задание_7. Дан целочисленный массив из 30 элементов. Массив заполняется случайным образом и его элементы могут принимать значения от 2 до 5 – годовые оценки по информатике учащихся выпускного класса. Вывести на экран исходный массив. Необходимо подсчитать и вывести средний балл среди аттестованных учащихся (тех, кто получил итоговую оценку 3, 4 или 5). Задание_8. Дан целочисленный массив из 30 элементов. Массив заполняется случайным образом и его элементы могут принимать значения от 150 до 200 – рост учащихся выпускного класса. Вывести на экран исходный массив. Подсчитать и вывести количество учащихся класса, входящих в школьную баскетбольную команду (в команду входят все учащиеся, чей рост больше 180 сантиметров).
-108585-195580Практические задания для подготовки к ЕГЭ.
(Решения представлены в Приложении_3)
Задания к пункту 3.4.
Задание_1. Дан целочисленный массив из 20 элементов, все элементы которого – целые числа в интервале от -1000 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который находит минимальное значение из всех нечетных элементов массива, которые делятся на 5. Гарантируется, что хотя бы один такой элемент существует. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них
const N=20;
var a: array [l..N] of integer;
i,j,min: integer;
begin
for i:=l to N do readln(a[i]);
...
end.
Задание_2. Дан целочисленный массив из 30 элементов, все элементы которого – положительные числа, не превосходящие 100. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер элемента, имеющего максимальное количество целочисленных делителей (если таких элементов несколько, то номер любого из них). Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [l..N] of integer;
i,j,k,imax,kmax: integer;
begin
for i:=l to N do readln(a[i]);
...
end.
Задание_3. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номера двух элементов массива, сумма которых минимальна. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [1..N] of integer;
i, j, min, min2, s: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.
Задание_4. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать любые целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер элемента массива, наименее отличающегося от среднего арифметического всех его элементов. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [1..N] of integer;
i, k: integer;
s, min: real;
begin
for i:=1 to N do readln(a[i]);
...
end.
Задание_5. Дан целочисленный массив из 30 элементов. Элементы массива могут принимать произвольные целые значения. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит номер третьего положительного элемента массива (если из массива вычеркнуть все неположительные элементы, этот элемент стоял бы в получившемся массиве на третьем месте). Если в массиве меньше, чем три положительных элемента, вывести сообщение об этом. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
const N=30;
var a: array [1..N] of integer;
i, j, k: integer;
begin
for i:=1 to N do readln(a[i]);
...
end.

7. Заключение
Цели проекта «Методика изучения обработки одномерных массивов с использованием инновационных образовательных комплексов в условиях реализации ФГОС» полностью достигнуты.
Мы рассмотрели роль и место изучения темы «Обработка одномерных массивов» в разделе «Алгоритмизация и программирование» школьного курса информатики.
Президентская инициатива предполагает широкое внедрение в учебный процесс электронных учебников, электронных образовательных комплексов. В условиях реализации ФГОС наметилась тенденция к тому, что необходимым, общепринятым средством обучения становятся электронные образовательные комплексы, в рамках которых реализуются образовательные программы с новым содержанием, более привлекательные для учеников, их родителей и общества. ОК можно использовать на всех этапах урока информатики и для организации самостоятельной работы учащихся.
Теоретическая информация по обработке массивов в 1С:Предприятие для школьников представлена в обобщенном и систематизированном виде в п. 2 проекта.
В работе даны методические рекомендации по изучению темы и формированию умений и навыков по обработке большого массива однотипных данных с использованием ОК «1С:Школа. Информатика 10 кл». Для изучении материала могут быть использованы п.4.10, 4.12, 4.13. ОК.
В проекте предложена оригинальная подборка задач, которые можно использовать для изучения алгоритмов обработки массива и подготовки школьников к ЕГЭ. Задачи можно решать с использованием разных систем программирования: Pascal и «1С:Предприятие».
Литература
1С:Школа. Информатика, 10 класс [Электронный ресурс] / 1С. – М.: 1С-Паблишинг, 2009. – 1 электрон. опт. диск (CD-ROM).
Пантелеймонова А.В., Белова М.А., Бычкова Д.Д., Подготовка учителя информатики с использованием образовательного комплекса "1С:Школа. Информатика, 10 кл., М.: ООО "1С-Паблишинг", 2012 - 284 с.: ил.
ФЕДЕРАЛЬНЫЙ ГОСУДАРСТВЕННЫЙ ОБРАЗОВАТЕЛЬНЫЙ СТАНДАРТ среднего (полного) общего образования [Электронный ресурс]// Режим доступа http://standart.edu.ru/catalog.aspx?CatalogId=6408Лапчик М.П. и др. Методика преподавания информатики: Учеб. пособие для студ. пед. вузов [Текст]/ М.П.Лапчик, И.Г.Семакин, Е.К.Хеннер; Под общей ред. М. П. Лапчика. — М.: Издательский центр «Академия», 2012. Режим доступа http://businessfor.ru/m/frtyh/metodika_prepodavanija_informatiki_-_lapchik.htmlАндреева Е. В., Босова Л. Л., Фалина И. Н Математические основы информатики. Элективный курс: Учебное пособие – М.: БИНОМ. Лаборатория знаний, 2005. – 328 с.
Бешенков С.А. Информатика. Систематический курс: учебник для 10 класса / С.А. Бешенков, Е.А. Ракитина. – М.: БИНОМ. Лаборатория знаний, 2006. – 432 с.
Угринович Н.Д. Информатика и ИКТ. Базовый уровень: учебник для 10 класса / Н.Д. Угринович. – М.: БИНОМ. Лаборатория знаний, 2008. – 212 с.
Угринович Н.Д. Информатика и ИКТ. Базовый уровень: учебник для 11 класса / Н.Д. Угринович. – М.: БИНОМ. Лаборатория знаний, 2009. – 187 с.
Угринович Н.Д. Информатика и ИКТ. Профильный уровень: учебник для 10 класса / Н.Д. Угринович. – М.: БИНОМ. Лаборатория знаний, 2008. – 387 с.
Угринович Н.Д. Информатика и ИКТ. Профильный уровень: учебник для 11 класса / Н.Д. Угринович. – М.: БИНОМ. Лаборатория знаний, 2008. – 387 с.

Приложнение_1
Практические задания для первичного осмысления изученного материала.
Решение заданий к пунктам 3.1, 3.2.
Задание_1. Составим трассировочную таблицу.
После выполнения первого цикла: А={1_2_3_4_5_6_7_8_9_10_11}
После выполнения второго цикла: А={1_1_1_1_1_1_1_1_1_1_1}
Ответ: 3) все элементы окажутся равны 1.
Задание_2. Составим трассировочную таблицу.
После выполнения первого цикла: А={1_2_3_4_5_6_7_8_9_10}
Во втором цикле сравниваются два соседних элемента, и, если предыдущий элемент меньше следующего, то переменная j увеличивается на 1. Таких пар чисел оказалось 9. Так как переменная j имела начальное значение =1, то
Ответ: 10
Задание_3. Составим трассировочную таблицу.
После выполнения первого цикла: А={1_2_3_4_5_6_7_8_9_10_11}
После выполнения второго цикла: А={11_10_9_8_7_6_7_8_9_10_11}
Ответ: 3)
Задание_4. Составим частичную трассировочную таблицу.
N= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
А[n]= 99 84 19 -21 А[n]= 89 63 9 -31 Ответ: A[4]=63, A[9]=9
Задание_5. Составим трассировочную таблицу.
N= 0 1 2 3 4 5 6 7 8 9 10
А[n]= 0 1 2 3 4 5 6 7 8 9 10
А[n]= 1 0 3 2 5 4 7 6 9 8 10
Ответ: 4)
Практические задания для первичного осмысления изученного материала.
Решение заданий к пункту 3.3.
Паскаль 1С:Предприятие
Задание_1.
Program pr_1;
Const n=10
VAR A:array [1..n] OF REAL;
Kol, I: INTEGER;
BEGIN
Randomize;
for i:=1 to 10 do
A[i]:=random(50)-10;
kol:=0;
FOR I:=1 TO n DO
If A[i]>7 then kol:=kol+1;
Writeln(“Кол. чисел=”, kol);
Readln;
END.


Задание_2.
Program pr_2;
Const n=10
VAR C:array [1..n] OF REAL;
A, B, S: real;
I: INTEGER;
BEGIN
for i:=1 to 10 do readln(C[i]);
S:=0;
Readln(A, B);
FOR I:=1 TO n DO
If (C[i]>A) and ( C[i]<B)
then s:=s+C[i];
Writeln(“Сумма=”, s);
Readln;
End.




Задание_3.
Program pr_3;
Const n=10;
VAR A:array [1..n] OF INTEGER;
Kol, I: INTEGER;
BEGIN
Randomize;
for i:=1 to n do
A[i]:=random(50)+10;
kol:=0;
FOR I:=1 TO n DO
If A[i] mod 3=0 then kol:=kol+1;
Writeln(“Кол. чисел=”, kol);
Readln;
END.

Для того, чтобы вывести элементы массива в одну строку, в программе была использована тестовая переменная «ТексСообщение». На каждом шаге цикла к переменной пристыковывается новый элемент массива. После завершения цикла эта переменная выводится на экран.
Задание_4.
Program pr_4;
Const n=10
VAR C:array [1..n] OF REAL;
p: real;
Kol, I: INTEGER;
BEGIN
for i:=1 to 10 do readln(C[i]);
kol:=0; p:=1;
FOR I:=1 TO n DO begin
If (C[i]>0) then kol:=kol+1;
If C[i]<0 then p:=p*C[i];
End;
Writeln(“Количество полож.=”, kol);
Writeln(“Произвед.отриц.=”, P:8:2);
Readln;
End.

Замечание: при обращении к функции формирования случайного числа следует помнить, что задаваемые параметры не могут быть отрицательными числами. Для получения отрицательных чисел нужно составить формулу.
Задание_5.
Program pr_5;
Const n=10;
VAR A:array [1..n] OF INTEGER;
S, Kol, I: INTEGER;
Sr: real;
BEGIN
for i:=1 to n do readln(A[i]);
kol:=0; s:=0;
FOR I:=1 TO n DO
If (A[i] >90) and (A[i] <100)
then begin
kol:=kol+1; s:=s+ A[i];
end;
Writeln(“Среднее=”, (s/kol):8:2);
Readln;
END.
Замечание: прежде, чем вычислять среднее значение, необходимо проверить, есть ли в массиве двузначные числа. Иначе будет осуществлена попытка «деления на ноль»!
Задание_6.
Program pr_6;
const N=10;
var A:array[1..N] of integer;
i, min:integer;
begin
randomize;
for i:=1 to N do
A[i]:=random(42)-5;
min:=a[1];
while (i<N) do
begin
i:= i + 1
if min >a[i] then min:=a[i];
end;
writeln(“min=”,min)
readln;
end.
Замечание: так как в тексте задачи уже заранее известны границы значений элементов массива, то за начальное значение минимального элемента можно взять любое число, большее правой границы (>37).


Приложнение_2
Практические задания для отработки навыков использования массивов.
Решение заданий к пункту 3.3.
Задание_1.
Program pr_1;
var A:array[1..30] of integer;
i, s, k :integer;
begin
randomize;
s:=0; k:=0;
Writeln(“Элементы массива”);
for i:=1 to 30 do begin
A[i]:=random(901)+10;
Write(A[i], “_”);
If A[i] mod 2=0 then begin
S:=s+ A[i];
k:=k+1;
end;
End;
Writeln;
Writeln(“Среднее значение четных элементов=”,s/k:8:2);
End.
Задание_2.
Program pr_2;
var A:array[1..17] of integer;
i, flag :integer;
begin
flag:=0;
for i:=1 to 17 do readln(A[i]);
Writeln(“Исходный массив”);
for i:=1 to 17 do write(A[i],’ ‘);
writeln;
Writeln(“Преобразованный массив”);
for i:=1 to 17 do begin
if A[i] <0 then flag:=1;
If flag=0 then
A[i]:= A[i] +10;
End;
for i:=1 to 17 do write(A[i],’ ‘);
End.


Приложнение_3
Практические задания для подготовки к ЕГЭ.
Решение заданий к пункту 3.4. (Pascal)
Задание_1. Алгоритм решения (устно):
Записываем в переменную min начальное значение 9999(это может быть любое число>=1000), которого по условию не может быть в исходном массиве.
В цикле перебираем значения переменной i от 1 до N. Если очередной элемент массива a[i] нечетный (остаток от его деления на 2 не равен нулю) и при делении на 5 дает в остатке 0, то сравниваем его со значением переменной min.
Если этот элемент меньше, чем min, записываем в переменную min значение a[i].
После окончания цикла выводим значение min. const N=20;
var a: array[1..N] of integer;
i, j, min: integer;
begin
for i:=1 to N do readln(a[i]);
min:= 9999;
for i:=1 to N do begin
if (a[i] mod 2 <> 0) and
(a[i] mod 5 = 0) then
if a[i] < min then min:=a[i];
end;
writeln(min);
end.
Задание_2. Алгоритм решения:
В цикле перебираем значения переменной i от 1 до N. Считаем количество делителей очередного элемента массива A[i] следующим образом:
записываем в переменную k значение 0;
в цикле изменяем переменную j от 1 до A[i]; если остаток от деления A[i] на j равен 0, то увеличиваем значение k на 1.
Если значение переменной i равно 1 или полученное число делителей больше kmax, записываем значение i в imax и значение k в kmax.
Выводим значение A[imax]. const N=30;
var a: array[1..N] of integer;
i, j, k, imax, kmax: integer;
begin
for i:=1 to N do readln(a[i]);
for i:=1 to N do begin
k:=0; {количество делителей текущего элемента}
for j:=1 to a[i] do
if a[i] mod j = 0 then k:= k + 1;
if (i = 1) or (k > kmax) then begin
imax := i; kmax := k; end;
end; writeln(a[imax]); end.
Задание_3. Алгоритм решения:
Очевидно, что нужно вывести номера минимального элемента массива и «второго» минимума.
Нам нужны две переменные, min (минимльный элемент) и min 2 (второй минимум). Сначала выбираем минимальный из первых двух элементов и записываем его номер в min, а номер второго по величине записываем в min 2.
Затем в цикле перебираем все элементы, начиная с 3-го (первые два уже «задействованы»!) до последнего, 30-ого.
Если очередной элемент a[i] меньше, чем min, то записываем значение min в min 2 (предыдущий минимум становится вторым), а значение a[i] – в min.
Иначе, если a[i] меньше, чем min 2, записываем значение a[i] в min 2.
После завершения цикла выводим значения переменной min и min 2. const N=30;
var a: array [1..N] of integer;
i, k, min, min2: integer;
begin
for i:=1 to N do readln(a[i]);
if a[1] < a[2] then begin
min := 1; min2:= 2;
end
else begin
min:= 2; min2:= 1;
end;
for i:=3 to N do
if a[i] < a[min] then begin
min2 := min;
min := i;
end
else if a[i] < a[min2] then min2 := i;
writeln(min, ' ', min2);
end.
Задание_4. Алгоритм решения:
Записываем в переменную s (сумма элементов массива) начальное значение 0.
В цикле для всех элементов с 1-го до 30-го добавляем значение текущего элемента к переменной s.
После окончания цикла делим значение переменной s на N, таким образом, получаем в переменной s среднее арифметическое всех элементов массива.
Записываем в переменную k начальное значение 1.
В цикле рассматриваем все элементы со 2-ого до 30-ого
Если модуль разности текущего элемента и переменной s меньше, чем модуль аналогичной разности для k-ого элемента, записываем в переменную k номер текущего элемента.
После окончания цикла выводим значение переменной k. const N=30;
var a: array [1..N] of integer;
i, k: integer;
s, min: real;
begin
for i:=1 to N do
readln(a[i]);
s:=0;
for i:=1 to N do s := s + a[i];
s:=s/N;
k:=1;
for i:=2 to N do
if abs(a[i]-s) < abs(a[k]-s) then
k:=i;
writeln(k);
end.
Задание_5. Алгоритм решения:
Записываем в переменную k начальное значение 0(количество положительных элементов).
Затем в цикле перебираем все элементы массива с 1-ого по 30-ый.
Если очередной элемент больше нуля, увеличиваем счетчик k на единицу.
Если k=3, записываем номер текущего элемента в переменную j.
Если после окончания цикла k<3, выводим сообщение, что в массиве меньше трех положительных элементов, иначе выводим значение переменной j. const N=30;
var a: array [1..N] of integer;
i, j, k: integer;
begin
for i:=1 to N do readln(a[i]);
k:=0;
for i:=1 to N do
if a[i] > 0 then begin
k:=k+1;
if k = 3 then j := i;
end;
if k < 3 then
writeln('Меньше трех положительных элементов')
else
writeln(j);
end.