НЕКОММЕРЧЕСКАЯ КОРПОРАТИВНАЯ ОРГАНИЗАЦИЯ
АССОЦИАЦИЯ ПЕДАГОГИЧЕСКИХ РАБОТНИКОВ МОСКОВСКОЙ ОБЛАСТИ

«ПРЕПОДАВАТЕЛИ ИНФОРМАТИКИ ПОДМОСКОВЬЯ»

Ул. Гагарина, д.42, г.Королев, М.О., 141070

ИНН/КПП 5018179774/501801001, ОГРН 1155000002750

Тел./факс 8-495-516-99-29

e-mail: api_korolev@ut-mo.ru

Павловская Яна Игоревна

Разработка развивающего квест-урока по решению задач

 на одномерные массивы в рамках новой дидактики

 

Тема:«Одномерные массивы»

Класс:10

Количество часов:136

В соответствии с каким УМК по информатике был разработан урок:

Угринович Н. Д. Информатика и ИКТ. Профильный уровень: учебник для 10 класса / Н. Д. Угринович. — 3-е изд., испр. — М. : БИНОМ. Лаборатория знаний, 2008. — 387 с. : ил.

Методический подходк решению задач на одномерные массивы: от простого к сложному.

Литература:

Методическое пособие по программированию на языке Pascal ABC”, Ерѐмин О.Ф. (дополненное и переработанное), 2015г.;

Turbo Pascal решение сложных задач Автор: В. В. Потопахин. Изд. БХВ-Петербург 2006г.;

Златопольский Д. М. Сборник задач по программированию. — 3-е изд., перераб. И доп. — СПб. : БХВ-Петербург, 2011. — 304с.: ил. — (ИиИКТ);

Окулов С. М. Основы программирования / С. М. Окулов. — 3-е изд. — М. : Бином. Лаборатория знаний, 2006. — 440 с.

 

Конспект урока

Этап урока

Содержание урока

1

Актуализация знаний и деление на группы

Урок-квест «Pascal» - это игра-путешествие по трем станциям, на которых каждой из команд предстоит актуализировать знания, изучить новую теорию и применить ее на практике. Сначала каждая из команд получает опросник и письменно отвечает на вопросы. После того, как первый этап будет пройден, командам будут предоставлены свитки с теорией и разбором задачи, которую им будет необходимо воспроизвести. На третьем этапе капитаны команд разыгрывают фанты с финальным заданием: решение задач на Pascalс использованием одномерных массивов.

 

Каждая из команд получает следующий Маршрутный лист:

Название команды: _____________ Капитан команды: _______________

 

Название станции

Баллы

Примечание

Подпись

1.

Пройди опрос

 

 

 

2.

Одномерные массивы и числа Фиббоначи

 

 

 

3.

Pascalstation

 

 

 

 

Станция «Пройди опрос»

Вопрос

Ответ

Что такое массив?

Массивом называется упорядоченная последовательность величин одного типа, обозначаемая одним именем

Что такое размерность массива?

Количество элементов в массиве называется его размерностью.

Какими величинами характеризуется каждый элемент массива?

Каждый элемент массива имеет: имя, индекс, значение.

Например, массив А состоит из 9 элементов (т.е. размерность массива равна 9):

  A[1]   A[2]   A[3]   A[4]   A[5]   A[6]   A[7]   A[8]   А[9]

5

2

9

5

7

8

2

14

6

 

Рассмотрите 1-ый элемент массива и дайте ему характеристику:

  • имя             А
  • индекс      1
  • значение    5

 

Где нужно разместить описание массива в программе?

Описание массива в Паскале задается в разделе переменных var и включает в себя:

        1. Имя   массива.

        2. Ключевое слово   A R R A Y (т.е. массив).

        3. Диапазон  изменения индексов, определяемый граничной парой:

              1..40    1..N    5..20      

              где 1, 1 и 5    - наименьшее возможное значение индекса

               40, N и 20 - наибольшее возможное значение индекса

         4. Тип элементов массива.

           var  имя1, имя2: array [граничная пара] of тип элементов;

         

 

Как происходит обращение к элементам массива?

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

 

Как напечатать элементы массива "в столбик"? "В строчку"?

а) в столбик -                                 б) в строчку -

For I:=1 to 5 do                                         For I:=1 to 5 do

Writeln ('B[', I, ']=', B[I]);                         Write (B[I]:6);

 

2

Изучение нового материала

«Станция одномерные массивы и числа Фиббоначи»

Команда получает свертки с материалом по одномерным массивам и числам Фиббоначи (см. Приложение1). Изучает теорию и разбирает следующую задачу:

3

Закрепление изученного материала

Задача: Человек посадил пару кроликов в загон, окруженный со всех сторон стеной. Сколько пар кроликов за год может произвести на свет эта пара, если известно, что каждый месяц, начиная со второго, каждая пара кроликов производит на свет одну пару?

Программа:

Program Fib;

Uses crt;

const n=12;

var А: array [1..n] of integer;

i: integer;

begin

clrscr;

А[1]:=1; А[2]:= 1;

for i:= 3 to n do

А[i]:= А[i-1] + А[i-2];

For i:= 1 to n do

write (A[i]:5);

readln;

end.

 

 

Вывод:

1                     январь

1                     февраль

2                     март

3                     апрель

5                     май

8                     июнь

13                   июль

21                   август

34                   сентябрь

55                   октябрь

89                   ноябрь

144                 декабрь

 

Ответ: 144 кролика.

 

 

 

 

 

 

 

 

 

PascalStation

При делении на 4 группы:

1 группа: Заполнить одномерный массив A(N) элементами последовательности Фибоначчи. Найти сумму первых K элементов.

2 группа: Дана последовательность Фибоначчи A(N). Что больше: сумма четных или произведение нечетных элементов и насколько.

3 группа: Напечатать те элементы массива A(N), индексы которых являются четными числами последовательности Фибоначчи.

4 группа: Заполнить массив A(N) так: первые K элементов заполнить элементами последовательности Фибоначчи, остальным - присвоить число m.

 

Решение задач + дополнительные задачи см.Приложение 2

4

Домашнее задание

1. Заполнить массив A элементами последовательности Фибоначчи до тех пор, пока элемент массива A не станет больше числа M. Вывести получившийся массив.

2. Заполнить массив A(N) элементами последовательности Фибоначчи. Найти сумму и произведение последних K элементов.

 

 

 

 

 

 

Приложение 1

 

Теоретическая часть. Изучение нового материала.Одномерные массивы:

Массив называется одномерным (линейным), если у каждого из его элементов имеется только один индекс.

К примеру, если мы будем в течение месяца ежедневно записывать среднесуточную температуру, и заносить эти данные в таблицу,

 

t[1]

t[2]

t[3]

t[…]

t[30]

Моздок

15

17

14

21

 

 

то у нас получится одномерный массив, в котором будет храниться переменная t[j], с одним индексом (номером столбца).

t[1], t[2], t[3], … , t[n].

Пример описания одномерного массива:

Var A: array [1 … 15] of real;

Для указания количества элементов массива можно применять константы:

Const a=10;

Var A: array [1 … a] of integer;

Леонардо из Пизы, известный как Фибоначчи, был первым из великих математиков Европы позднего Средневековья. Будучи рожденным в Пизе в богатой купеческой семье, он пришел в математику благодаря сугубо практической потребности установить деловые контакты. В молодости Леонардо много путешествовал, сопровождая отца в деловых поездках. Например, мы знаем о его длительном пребывании в Византии и на Сицилии. Во время таких поездок он много общался с местными учеными.

Числовой ряд, носящий сегодня его имя, вырос из проблемы с кроликами, которую Фибоначчи изложил в своей книге «Liber abacci», написанной в 1202 году:

Человек посадил пару кроликов в загон, окруженный со всех сторон стеной. Сколько пар кроликов за год может произвести на свет эта пара, если известно, что каждый месяц, начиная со второго, каждая пара кроликов производит на свет одну пару?

В средневековой загадке с кроликами, которую загадал Фибоначчи, кроется мистическая последовательность чисел.

Решение этой задачи сводится к бесконечной последовательности чисел:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 …

Последовательность чисел, первые два числа которой равны 1, а каждый последующий член (начиная с третьего) равен сумме двух предыдущих, называют последовательностью Фибоначчи, а сами числа числами Фибоначчи.

Последовательность Фибоначчи - это не просто игра с числами, а самое важное математическое выражение природных явлений из всех когда-либо открытых.

Эти числа возникают в самых разных математических ситуациях - комбинаторных, числовых, геометрических. Если вы любите отыскивать числовые закономерности в живой природе, то заметите, что числа Фибоначчи встречаются и там. Чешуйки на еловой шишке, ячейки на ананас и семена подсолнечника расположены спиралями, причем количество спиралей каждого направления так же, как правило, числа Фибоначчи.

Еще числа Фибоначчи обладают следующими свойствами:

 

 

 

 

 

 

Приложение 2

 

Решение:

1 группа:Заполнить одномерный массив A(N) элементами последовательности Фибоначчи. НайтисуммупервыхK элементов.

ProgramFib;

Uses crt;

var a: array [1..100] of integer;

i,k,s: integer;

begin

clrscr;

Writeln ('Введите размерность массива ');

Read (n);

WriteLn ('Последовательность чисел Фибоначчи:');

a[1]:=1; a[2]:= 1;

for i:= 3 to n do begin

a[i]:= a[i-1] + a[i-2];

end;

writeLn;

for i:=1 to n do

write (a[i]:5);

WriteLn ('ВведитеК: ');

readLn (k);

s:= 0;

for i:= 1 to k do

s:= s + a[i];

WriteLn('Суммапервых ', k, 'элементов = ', s);

readln;

end.

 

2 группа:Дана последовательность Фибоначчи A(N). Что больше: сумма четных или произведение нечетных элементов и насколько.

Program Fib;

Uses crt;

var a: array [1..100] of integer;

i, n, p,s: integer;

begin

clrscr;

Writeln ('Введите размерность массива ');

Read (n);

a[1]:=1; a[2]:= 1;

for i:= 3 to n do begin

a[i]:= a[i-1] + a[i-2];

end;

WriteLn ('ПоследовательностьчиселФибоначчи:');

for i:=1 to n do

write (a[i]:5);

writeln;

s:= 0; p:=1;

for i:= 1 to n do begin

if a[i] mod 2 = 0 then s:= s + a[i]

else p:= p*a[i];

end;

if s>p then WriteLn ('Сумма четных чисел Фибоначчи больше произведения нечетных на ', s-p)

else

WriteLn ('Произведение нечетных чисел Фибоначчи больше суммы четных на ', p-s);

readln;

end.

 

3 группа:Напечатать те элементы массива A(N), индексы которых являются четными числами последовательности Фибоначчи.

Program Fib;

Uses crt;

var a: array [1..100] of integer;

I, n, k, s: integer;

begin

clrscr;

Writeln ('Введите размерность массива ');

Read (n);

a[1]:=1; a[2]:= 1;

for i:= 3 to n do begin

a[i]:= a[i-1] + a[i-2];

end;

WriteLn ('ПоследовательностьчиселФибоначчи:');

for i:=1 to n do

write (a[i]:5);

writeln;

WriteLn ('элементы массива, индексы которых являются четными числами последовательности Фибоначчи: ');

For i:= 1 to n do

if i mod 2 = 0 then

Write (a[i], '-');

Readln;

End.

 

4 группа:Заполнить массив A(N) так: первые K элементов заполнить элементами последовательности Фибоначчи, остальным - присвоить число m.

Program Fib;

Uses crt;

var a: array [1..100] of integer;

I, n, k, m: integer;

begin

clrscr;

Writeln ('Введите размерность массива ');

Read (n);

Writeln ('ВведитеК');

Readln (k);

Writeln ('Введитеm ');

Readln (m);

a[1]:=1; a[2]:= 1;

for i:= 3 to n do begin

a[i]:= a[i-1] + a[i-2];

end;

WriteLn ('ПоследовательностьчиселФибоначчи:');

for i:=1 to n do

write (a[i]:5);

writeln;

for i:= k+1 to n do

a[i]:= m;

for i:= 1 to n do

writeLn (a[i], '-');

readLn;

end.

 


Сверимся с ответами при фиксированных переменных величинах:

1 группа при n = 10, k = 5

2 группа при n = 10

3 группа при n = 10

4 группа при n = 10, k = 5, m = 22

 

Дополнительные задачи:

1. Программа вычисляющая среднее арифметическое массива:

 

Program SRedMass;

const N=10;

var SR,S:real;

I,Kol:integer;

A:array[1..N] of real;

begin S:=0; Kol:=0;

for I:=1 to N do

begin

read(A[I]);

if A[I]>0 then

S:=S+A[I]; Kol:=Kol+1;

SR:=S/Kol;

end;

Write('ср.арифм.= ',SR);

end.

 

2. Программа сортировки элементов массива пузырьковым методом:

Program SortPuzyrok;

const n=20;

var a : array [1..n] of integer;

i,j,k,prom : integer;

begin

for i:=1 to n do

begin

a[i]:=random(101);

write(a[i],' ');

end;

writeln;

for i:=2 to n do

for j:=1 to n do

if a[i]<a[j] then

begin

prom:=a[j];

a[j]:=a[i];

a[i]:=prom;

end;

for i:=1 to n do

begin

write(a[i],' ');

end;

end.

 

Добавление элемента в массив:

1) Задать случайным образом N элементов числового массива – числа от 0 до 20. Вставить в него число «-20» перед к-ым элементом.

Чтобы вставить в массив новый элемент на место К, нужно прежде всего предусмотреть для него место в массиве. Поэтому объявление массива будет выглядеть так: <имя>: array [1..n+1] of <тип>;

Обязательно ввести к – ый порядковый номер. В теле программы все элементы, начиная с к-ого и до N, следует передвинуть на 1 место к концу массива. После этого можно на к-ое место поставить значение, заданное по условию задачи:

For i := n downto кdo

a[i+1] := a[i];

a[i] := <новоезначение>;

 

Решение:

Program zad1;

Uses crt;

Var  I,N,K:byte; A:array[1..100] of integer;

Begin clrscr;

Writeln(‘Введи размерность массива’);

Readln (N);

Writeln(‘исходный массив’);

Randomize;

For i:=1 to N do begin

A[i]:=random(20)+1;

Write(A[i]:3);

End;

Writeln;

Writeln(‘Введи номер к-го элемента’);

Readln (K);

For i:=N downto K do

A[i+1]:=A[i];

A[i]:=-20;

Writeln(‘измененныймассив’);

For i:=1 to N+1 do begin

Write(A[i]:3);

Readln;

End.

 

 

 

 

 

 

 

Удаление элементов из массива.

5) Задать случайным образом N элементов числового массива – числа 0 до 10. Удалить из него10-ый элемент.

Чтобы удалить из массива элемент № 10, нужно все элементы, начиная с (10+1)-ого, передвинуть на 1 место к началу массива. Тогда алгоритм удаления элемента запишется так:

For i := 10 to n-1 do

a[i] := a[i+1];

 

Решение:

Program zad2;

Uses crt;

Var  I,N:byte; A:array[1..100] of integer;

Begin clrscr;

Writeln(‘Введи размерность массива’);

Readln (N);

Writeln(‘исходный массив’);

Randomize;

For i:=1 to N do begin

A[i]:=random(10)+1;

Write(A[i]:3);

End;

Writeln;

For i:=10 to N-1 do

A[i]:=A[i+1];

Writeln(‘измененныймассив’);

For i:=1 to N-1 do begin

Write(A[i]:3);

Readln;

End.

 

Задать случайным образом N элементов числового массива

2) вставить «10» перед первым положительным элементом;

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

Решение:

Program zad3;

Uses crt;

Var  I,N,x:byte; A:array[1..100] of integer;

Begin clrscr;

Writeln(‘Введи размерность массива’);

Readln (N);

Writeln(‘исходныймассив’);

Randomize;

For i:=1 to N do begin

A[i]:=random(20)-10;

Write(A[i]:3);

End;

Writeln;

For i:=N downto 1 do begin

If A[i]>0 then x:=I;

End;

Writeln(‘порядковый номер первого положительного элемента =’,x);

For i:=N downto x do

A[i+1]:=A[i];

A[i]:=10;

Writeln(‘измененныймассив’);

For i:=1 to N+1 do begin

Write(A[i]:3);

Readln;

End.