РАЗРАБОТКИ

Другие модули


Методика изложения темы "Массивы"

Методика изложения темы "Массивы"
«Методика изложения темы курса Информатики – одномерные массивы» 

«Методика преподавания углубленного курса алгоритмики и программирования с учетом требований новых образовательных стандартов и внешней оценки качества подготовки выпускников по информатике (ЕГЭ)»

Королева Марина Михайловна,
учитель информатики и ИКТ
МОУ гимназия г.Фрязино
Московской области


Введение 

Тема работы: методические и практические рекомендации в изучении массивов в старшей школе.
Данная тема вызывает сложности в изучении у старшеклассников. Моя методика изложения материала основана на сравнительном анализе, тех объектов, с которыми учащиеся встречаются в быту, в жизни. Это способствует более быстрому усвоению довольно сложной темы в курсе программирования. Такая работа позволяет научить учащихся преобразовывать информацию из образного мышления на язык программирования и более легко подходить к экзамену по информатике и ИКТ.


Основная часть 

Изучением массивов необходимо начать с философской беседы на тему : «таблицы во круг нас»

Вы мне скажите: «Да мы не знаем, что такое массив».
Да знаете Вы все. Это честно говоря, на нашем простом языке – есть не что иное как таблица, которую вы используете в математике, физике…Да практически на каждом предмете в школе, а в жизни? Да и в жизни: это информация вокруг нас. Ваш дневник- таблица. Школьный журнал – таблица. Расписание поездов, самолетов – таблица.
А теперь давайте разбираться
Вспомним, ребята 1 класс, вы сидите на уроке и вам Мария Ивановна задала домашнее задание измерить температуру каждого дня и занести в табличку.
И вот что вышло у Никиты.

понедельник вторник среда четверг пятница суббота воскресен
-12 -5 -5 0 +4 -10 -5

Или можно сделать и так, если договориться, что пусть 1 – это будет понедельник,2-вторник и т.д.
1 2 3 4 5 6 7
-12 -5 -5 0 +4 -10 -5

Что же мы можем узнать из этой таблички?
Говорят учащиеся: 1. В какой день недели был самым холодным?
2.Какая самая низкая температура недели?
2.А какой день был самым теплым?
4. А какая температура при этом была?
3. Какая была средняя температура недели?
И т.д.
Это табличка, в которой содержимое ячейки имеет свой номер. Как почтовый ящик ( у него есть номер и есть содержимое, которое мы не видим)
И номер у ячейки только один – поэтому он называется «одномерный» массив.

Удобно по табличке находить информацию?

Или шахматная доска. Как вы записываете ходы? Например: Пешка Е2. Что это означает? (Дети должны ответить) А игра «Морской бой»
Правильно. У шахматной доски есть строки и ряды. Каждая клетка имеет 2 номера – один по строке, другой по столбцу. 2 меры – двумерный массив.

А многомерные? Взлет самолета. Он имеет три координаты: x, y, z.
А кристаллическая решетка поваренной соли или кристаллическая решетка льда, в которых молекулы находятся в пространстве и имеют также 3 координаты. Современное программное обеспечение учитывает многомерность при создании 3D картинок.
А как заставить машину искать нужную информацию?
Оказывается машина хотя и «слепая»,но умеет запоминать ,хранить любого рода информацию.
Для этого необходимо PASCAL сказать, что она будет работать с таблицей.
Массив относится к такой категории типов данных - структурированным типам, когда имени переменной соответствуют несколько значений. Например водном подъезде каждый почтовый ящик имеет свой номер и почтальон кладет газету, используя номер, т.е. адрес.
1 минус любого массива в том, что в каждом массиве могут лежать данные только одного типа и машине надо сказать какого.
2 минус что массив занимает место в памяти машины, что не приветствуется в ЕГЭ.
Необходимо учесть , что существует ограничения оперативной памяти на все переменные - 64 килобайта.
Совокупность ячеек обозначается групповым именем, а доступ к конкретному элементу(ячейке) осуществляется путем указания группового имени и порядкового номера (индекса) необходимого элемента, т. е. необходимо указать адрес ячейки. Вычисление адреса элемента выполняется в два этапа:

Операции с массивами:
  • операция присваивания идентичных массивов; 
  • операция сравнения идентичных массивов на неравенство; 
Примеры описания массивов: 

Type
M1=Array[1..10] of real;
M2=Array[Char] of Boolean;
Matrix=Array[1..10] of Array[1..20] of Integer;
Или Matrix=Array[1..10,1..20] of Integer;
Var
Vector:M1;
Sym_Table:M2;
Arr1,Arr2:Matrix;
S:Arrray[(Red,Yellow,Green)] of Boolean;

Наиболее типичные ошибки при работе с массивами

1. Выход индекса за установленные пределы. 

Пример: 

Var Vector:Array[0..10] of Real
Обращение Vector[11]:=0.5 вызовет ошибку трансляции, т.к. машина в памяти зарезервировала 11 элементов, а мы хотим 12-ый, а такого нет. 

Если в процессе выполнения программы значение выйдет за пределы 0..10 - может возникнуть ошибка времени исполнения ( а может и нет). При трансляции подобных операторов транслятор вставляет в объектный код программы динамические проверки индексов, если была установлена директива{$R+} (если было {$R-} - проверки нет). Это увеличивает размер кода и снижает скорость работы программы, но повышает надежность программы. 

Обычно при тестировании устанавливается {$R+}, а после отладки -{$R-}. Можно, однако, сохранить {$R+} на ”опасных” участках. 

2. Попытка использования имени массивов процедурах ввода/вывода как целого, а не как элемента - переменной с индексами (кроме одномерных символьных массивов). 

3. Присваивание не идентичных массивов. 

Пример: 

Правильно 

Var
A:Array[1..15] of Real;
B:Array[1..15] of Real;
Begin
A:=B; 

Не правильно
 
Var
A:Array[1..15] of Real;
B:Array[1..15] of integer;
Begin
A:=B;

Алгоритм решения задач с массивами
  1. Формирование массива 
  2. Работа с массивом 
  3. Вывод итогового массива для проверки. 

1 2 3 4 5
34
-2 -40 5 123

Формирование массива (заполнение ячеек содержимым) происходят по следующим правилам:

А) заполняем сами (ввод с клавиатуры) 

Выглядит следующим образом: в 1-ую положили, во 2-ую положили, в 3-ю положили и так до ? Да N ячейки. Следовательно ячеек N.

Const n=9;
Var mas:array[1..N] of integer; { машина в памяти последовательно резервирует
9 ячеек, с которыми и будет работать}
I:integer;
Begin
Repet
Writeln(‘ сколько ячеек в массиве?’);
Readln(n);
Until n<=9;
For i:=1 to n do
Begin
Writeln(‘ введи ’,I,’элемент массива’); {ввод массива через enter}
Readln(mas[i]);
End;
Readln; …………………. 

2 вариант тоже ввод с клавиатуры, но выглядит более качественно 

Const n=9;
Var mas:array[1..N] of integer;
I:integer;
Begin
Repet
Writeln(‘ сколько ячеек в массиве?’);
Readln(n);
Until n<=9;
For i:=1 to n do
Begin
Read(mas[i]); {ввод с клавиатуры, но через пробел. Массив перед вами}
End;
Readln;………

Б) Ввод для лентяев, при помощи датчика случайного числа. 

У данного способа есть один существенный недостаток – он не позволяет проверить работоспособность программы в различных ситуациях.

Const n=9;
Var mas:array[1..N] of integer;
I:integer;
Begin
Randomize;
Repet
Writeln(‘ сколько ячеек в массиве?’);
Readln(n);
Until n<=9;
For i:=1 to n do
Begin
A[i]:=(10*random(21)); {заполнение ячеек числами от -10 до 10)}
Write(a[i],’ ‘); {вывод содержимого каждой ячейки на экран}
End; Readln;… 

В) Заполнение массива по закономерности. 

Например -
необходимо создать массив следующего вида:
1 2 3 4 5 6
1 0 1 0 1 0

Для этого используем закономерность: в ячейку, стоящую под четным номером заполним 0, а под нечетным 1.
Не только заполним, но и сразу напечатаем. 

For i:=1 to 6 do
begin
If i mod 2=0 then a[i]:=0 else a[i]:=1;
Write(a[i],’ ‘);
End; 

Работа с массивом заключается в исследовании содержимого ячейки, возможно номера. Все зависит от выполняемой задачи.
Вывод результата и массива на экран. Этап обязательный, т.к. по результату можно судить о правильности написания программы.
Алгоритм работы дан. А теперь за задачи!

1. Решение задач на поиск элемента, обладающих необходимым условием

Задача №1 

Постройте алгоритм(анализ, блок-схема, программа) решения задачи.
В одномерном целочисленном массиве размерностью N. Определить каких чисел больше- положительных или отрицательных?

Program zad1;
Uses crt;
Const n=20;
Var A:array[1..N] of integer;
I, ko,kp:integer;
Begin
Clrscr; ko:=0; kp:=0;
Repet
Writeln(‘ сколько ячеек в массиве?’);
Readln(n);
Until n<=20;
For i:=1 to n do
Begin
Read(A[i]);
If A[i]>0 then kp:=kp+1
Else
If A[i] <0 then ko:=ko+1;
End;
Readln;………
If kp=ko then writeln(‘их равное кол-во’) else if kp>ko then writeln(‘больше положительных’) else writeln (‘больше отрицательных’);
Readln;
End.

После разбора данной задачи необходимо еще раз обратить внимание на такое понятие как «содержимое ячейки» - обращение к ячейке по адресу-А[i]) и порядковый номер i.

Далее решаем задачи следующего содержания:
  1. Дан одномерный массив размером N. Определить среднее арифметическое только чисел, имеющих в конце цифру 3. 
  2. Дан одномерный массив размером N. Определить под каким номером стоит первое встретившееся положительное число. 
  3. Дан одномерный массив размером N. Были ли в этом массиве 0? 
  4. Дан одномерный массив размером N. Поменять местами последний встретившийся нулевой элемент с первым отрицательным. 
  5. Дан одномерный массив размером N. Определить среднее арифметическое элементов, идущих после нулевого элемента. Перед нулевым элементом. И т.д. 
Обязательно задать творческую работу, т.е. придумать задачу самому ученику. Сделать и протестировать на компьютере.
Дать самостоятельную работу. Удостовериться, что тема понята.

2. Следующая тема: «Поиск максимального и минимального элементов в массиве» 

Теория.
К данному моментуобучающиеся к этому времени уже знают алгоритм нахождения минимального и максимального, но повторить необходимо.
Обратить внимание что за начальное значение максимального и минимального необходимо брать значение, вытекающее из условия задачи.
Итак, объяснение происходит через решение и анализ нескольких задач, которые необходимо решить совместно с учениками.

Задача 1.
 
В одномерном целочисленном массиве размерностью N определить максимальный элемент и его порядковый номер.
Начинаем с анализа. Что на входе и что на выходе?

Program zad1;
Uses crt;
Const n=20;
Var A:array[1..N] of integer;
i, max, bmax :integer;
Begin
Clrscr; Repet
Writeln(‘ сколько ячеек в массиве?’);
Readln(n);
Until n<=20;
For i:=1 to n do
Read(A[i]);
{ Что же взять за начальный max? Здесь необходимо рассмотреть все случаи, в которых исследуется местонахождение максимального элемента и обратить внимание на порядковый номер)
Max:=a[1]; bmax:=1;
For i:=1 to n do
If A[i]>max then begin
Max:=a[i]);
Bmax:=I;
End;
Writeln(‘max=’,max);
Writeln(‘егономер’,bmax);
Readln;………
Readln;
End.

Вторая задача. Найти максимальное число из отрицательных элементов.

Третья задача из ЕГЭ. Дан целочисленный массив из 30 элементов, все элементы которого – неотрицательные числа, не превосходящие 10000. Опишите алгоритм, который позволяет определить и вывести на экран наибольшее число, десятичная запись которого заканчивается цифрой 3, записанное в этом массиве. Если в массиве нет таких чисел, программа должна вывести сообщение «Таких чисел нет». 

Далее идет индивидуально-практическая работа по усвоению этой темы, для этого предлагаются следующие задачи:
  1. В одномерном целочисленном массиве размерностью N определить среднее арифметическое максимального и минимального элементов(макс и мин только один). 
  2. Дан одномерный целочисленный массив размерностью N. Правда ли, что минимальный элемент стоит на нечетном месте.? 
  3. Дан одномерный целочисленный массив размерностью N. Поменять местами минимальный элемент с максимальным. 
  4. Дан одномерный целочисленный массив размерностью N. Сколько в массиве максимальных элементов? 
  5. Дан одномерный целочисленный массив размерностью N. Найти 2 самых больших числа. 
  6. Дан одномерный целочисленный массив размерностью N. Найти 3 самых больших числа. 
И т.д.

Тема 3. Создание нового массива из существующего.

Объяснение начинаем с задачи: 

Дан одномерный массив А, состоящий из целых чисел. Сформировать массив В, в который должны входить положительные элементы массива А.
Делаем анализ, рисуя на доске массив А с элементами. 

Задаем вопросы:
  1. Как вы думаете – Сколько элементов может быть в массиве В? Дети, конечно, отвечают. 
  2. Какое самое малое количество? Почему? 
  3. Какое самое большое? Почему? 
После этого начинаем рисовать массив В, анализируя каждый элемент массива А.Следует обратить внимание, что порядковый номер элементов массива А не совпадает с порядковыми номерами второго массива. И после детального просмотра создаем программу.

Program zad1;
Uses crt;
Const n=20;
Var A,B:array[1..n] of integer;
i, k :integer;
Begin
Clrscr;
Repet
Writeln(‘ сколько ячеек в массивe A? ’);
Readln(n);
Until n<=20;
K:=0;
For i:=1 to n do
Read(A[i]);
Readln;
For i:=1 to n do
If A[i]>0 then begin
k:=k+1;
B[k]:=A[i];
End;
For i:=1 to k do
Write(B[i],’ ‘);
Readln;
End. 

Далее практическая работа. Решение задачи типа:
  1. Дан массив А. Сформировать массив В, состоящий из ненулевых элементов массива А. 
  2. Дан массив А. Сформировать массив В, состоящий только из простых элементов массива А. 
  3. Дан массив А. Сформировать массив В, состоящий из не максимальных элементов массива А. 
И т.д.

Тема 4. Работа с несколькими массивами одновременно.

Опять объяснение начинаем с задачи. Известны названия каждого продукта и его цена. Какой продукт самый дорогой?
На доске рисуем два массива: один с названием продукта, другой под тем же номером с его ценой.
1 2 3 4 5 6
молоко сахар батон чипсы сок шоколад

1 2 3 4 5 6
30,7 28,3 21,4 78 54 44,9 

Какой продукт самый дорогой? Как определили? 

А теперь напишем программу: 

Program zad1;
Uses crt;
Const n=20;
Var pr:array[1..n] of string;
Сn:array[1..n] of real;
i, k,xx:integer; max:real;{либо xx:string}
Begin
Clrscr;
Repet
Writeln(‘ сколько продуктов ? ’);
Readln(n);
Until n<=20;
K:=0;
Writeln(‘введи наименование продукта и его цену’);
For i:=1 to n do
Readln(pr[i],сn[i]);
Max:=0;
For i:=1 to n do
If cn[i]>max then begin
Max:=cn[i];
xx:=i;
End;
Write(‘самый дорогой –‘, pr[xx]);
Readln;
End.

Второй способ выделенной части: 

Max:=0;
For i:=1 to n do
If cn[i]>max then begin
Max:=cn[i];
xx:=pr[i];
End;
Write(‘самый дорогой –‘, xx);

Далее практическая работа Решение задач типа:
  1. Известны цена и название товара. Какой самый дорогой товар может купить покупатель на свои М рублей. 
  2. На соревнованиях выступают N пар фигуристов. Вводятся фамилии пары и набранные баллы. Напечатать фамилии тех пар, которые имеют самые большие баллы. 
  3. Известны фамилии, марка автомобиля и год выпуска автомобиля. 
Определите все фамилии и марку автомобиля владельца по введенному году выпуска автомобиля.
И т.д. 

Творческая работа по теме в обязательном порядке.

Тема 5. Сортировка массива. 

Одна из самых трудных тем. Но если все проанализировать, то вполне решаема.
Как вы понимаете фразу «числа расположены по возрастанию»?
А как «видит» машина, если у нее «глазиков» нет. Дети говорят- это и есть отправная точка для решщениязадачи.

Итак. Дан массив А. Придумайте способы сортировки по возрастанию. 

Что могут придумать учащиеся:

1 способ. В массиве ищем минимальный и меняем в массиве с 1 элементом. Затем, начиная со второго номера опять ищем минимальный и меняем со вторым. И так далее. Хорошо. Пишем программу на доске.

2 Способ. То же самое но с максимальным, который идет в конец.

3 способ. Берем 1эл. И сравниваем его со вторым, и если он оказался больше второго, то их меняем местами. Затем 1 с 3-им. И т.д.

Таким образом, обратите внимание, что на первом месте оказался самое маленькое число. Все это демонстрируем на доске.
Отсортировали? Нет. А что потом. 

Правильно, берем 2-ой сравниваем с 3 и т.д., если необходимо меняем местами. 

Пишем программу. 

………
For i:=1 to n-1 do
For j:=i+1 to n do
If a[i]>a[j] then begin
c:=a[i];
a[i]:=a[j];
a[j]:=c;
end;
for i:=1 to n do
write(a[i],’ ‘);

4 способ 

Сравниваем 1 с 2, 2 с 3, 3 с 4 и т.д. при этом меняем их местами, если предыдущий больше текущего. За один проход отсортируем? Нет. А сколько проходов необходимо сделать. Дети говорят. После этого пишем программу.

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

Далее решаем задачи на упорядочение типа.
  1. Дан одномерный массив. Упорядочить этот массив по убыванию, начиная с первого элемента, если максимальный элемент четный. 
  2. Дан одномерный массив. Упорядочить этот массив по возрастанию, начиная с первого положительного элемента. При этом положительный элемент оставить на своем месте. 
  3. Дан одномерный массив. Упорядочить по убыванию только положительные элементы массива 
И т.д. 

Творческая работа в обязательном порядке.

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


Заключение.

При таком расположении материала вырабатывается представление у детей о том, что с массивами легко и просто работать. Что они необходимы в жизни. Что компьютер работает с любой информацией. Самое главное, чтобы перевести эту информацию на язык понятный машине, т.е. на язык программирования.
При практической работе каждому из учащихся подбираются задачи по уровню, тем самым с каждым разом усложняя мыслительный процесс. И если что-то не получается, не надо подсказывать, а необходимо смоделировать задачу, похожую в жизни. И тогда все легко удается сделать!
Практика и опыт изложения данного материала, показали, что учащиеся, решая многообразные задачи, в конце темы начинают понимать, что любую жизненную задачу можно смоделировать на компьютере, а это важно в век информатизации.

Литература
1. Лекции доцента, канд. п.н. Кащея В.В.
2. В.Н. Пильщиков Сборник упражнений по языку Паскаль. М.:Наука,1989г
3. Статград. 2012г. Материалы экзаменационной работы по информатике
4.В.Б. Попов TURBO PASCAL для школьников, Москва, «Финансы и статистика» 2006г.
5.Информатика: пособие для подготовки к ЕГЭ ( под редакцией Е.Т.Вовк)
Кудиц ПРЕСС 2009
6.Д.М. Златопольский Я иду на урок информатики
Москва, «Первое сентября» 2001г.
Королева Марина Михайловна13.02.2014 15520 Из опыта работы
Всего комментариев: 0
avatar