Главная

Норм.документы

Учителю

Ученику

Мастер-класс

Наши работы

Литература


Обязательный минимум

Средняя школа №2 г. Междуреченска

Учитель информатики Старцева Е.М.

 

Планы уроков по теме «Массивы»

Занятие 1 (2 урока)

 

Тема: Понятие массива. Размерность массива. Одномерный  массив.

 

Цель урока: Учащиеся должны усвоить понятие массива и научиться формировать одномерный  массив   тремя способами.

 

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

 

Массив – это упорядоченный набор величин, обозначаемых одним именем, доступ к элементам массива осуществляется по их номерам (индексам). Элементами массива могут быть данные любого типа, включая структурированные, но в одном массиве могут храниться данные только одного типа (real, integer, string, char и пр.). Число элементов массива и их тип фиксируется  при описании массива и в процессе выполнения программы не меняется.

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

Массив может быть одномерный (один индекс), еще его называют линейным;   

трехмерным (три индекса) и т.д. Размерность массива  ограничена только объемом памяти конкретного компьютера.

Необходимо четко разделить два понятия: индекс элемента и значение элемента.

 

2.Массивы описываются в разделе описания переменных, при этом описание массива включает описание типа элементов массива, его размер и тип индексов. Формат записи:

type

 <имя типа> = array[тип индекса] of <тип компонента>;

var

  <идентификатор, ...>: <имя типа>;

Массив может быть описан и без представления типа в разделе описания типов данных:

var

 <идентификатор, ...> : array [тип индекса] of <тип компонента>;

 

 

 Примеры:

var

  A : array [1..7] of real;  {одномерный массив из 7элементов}

  B : array [1..3,1..7] of real;  {двухмерный массив из 3 строк и 7 столбцов}

  Massiv : array [1..100,1..70] of integer;  {двухмерный массив в 100 строк,70столбцов}

  Spisok : array [1..200] of string; {линейный массив из 200 элементов}

 

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

const

   n=1000; k=60;

var

   massiv : array [1..n,1..k] of real;

 

3.Операции по вводу, выводу и обработке массива требуют перебор всех или некоторых элементов. Это удобно делать через оператор цикла, где в цикле задаются индексы элементов.

Для примера возьмем одномерный массив Mas[1..50], тип элементов real.

 

program p1;

const  maxN=50;

 

{описание переменных}

var

   mas : array [1..maxN] of real;

   i : integer;  {счётчик}

begin

 

{ввод значений всех элементов массива с клавиатуры}

 for i:=1 to maxN do

   begin

          write(‘введите значение mas[’,i,’]=’);

          read(mas[i]);

      end;

 

{заполнение массива случайными числами}

 for i:=1 to maxN do

    mas[i]:=random(100); {значение интервала определяется  

                                            постановкой задачи}

 

{если в массив вводятся не все элементы, то целесообразнее задать какой-либо ограничитель ввода, например, окончание ввода элементов при mas[i]=0, а затем вводить значения и одновременно подсчитывать количество введенных элементов}

i:= 0;                                                                       

while mas[i]<>0 do                                                            

     begin                                                                      

          i:=i+1;                                                                  

          write('введите элемент массива Маs[',i,']');                                

          read(mas[i]); 

      end;

  writeln(‘всего введено ’,i,’ значений’)

 

{вывод массива на экран в столбик }

  for i:=1 to maxN do

      writeln(mas[i]:4:2);

{вывод массива на экран с строчку в заданном формате}

  for i:=1 to maxN do

     write(mas[i]:10:2);

 

 

Практическая работа:   сформировать массив с помощью арифметической прогрессии, где А[i]=A[i-1]+A[i-2], значения А[1] = 0,  A[2] = 2 и вывести его на экран в строчку и в столбик.

 

Задание на дом: 1.составить программу формирования массива из 50 элементов, в которой используется признак Р, в зависимости от значения которого реализовывался бы один из способов задания массива: при Р= -1  с помощью генератора случайных чисел, при  Р=0  с помощью формулы  А[i] = i +101, при  Р=1 с клавиатуры. Сделать вывод сформированного массива на экран.

2*.(дополнительно) Напечатать таблицу Пифагора.

 

 

Занятие 2 (2 урока)

 

Тема: Обработка элементов одномерного массива

 

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

 

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

 

2.                        На основе уже сформированного массива (из домашней работы) рассмотрим способы обработки  всех элементов массива. Рассмотрим следующие примеры организации работы с массивами:

1)                                        Подсчитать сумму всех элементов и вычислить среднее арифметическое значение элементов массива.

2)                                        Подсчитать количество элементов массива, значения которых больше (меньше) заданного числа К.

3)                                        Заменить все положительные элементы массива на 0, а остальные вывести на экран.

4)                                        Найти максимальный (минимальный) элемент массива и его индекс. Вывести на экран массив с выделенными другим цветом максимумом и минимумом.

 

{описание переменных и ввод массива см домашнюю задачу, но необходимо описание еще переменных}

program p2;

uses crt;

const  maxN=50;

var

   mas : array [1..maxN] of real;

   i , S, n, n1: integer;

   SrAr, k, max, min: real;

begin

  for i:=1 to maxN do

   mas[i]:=random(100);

 

{1.нахождение суммы S всех элементов массива и ср. арифм }

S:=0;

for i:=1 to maxN do

   S:=S+mas[i;];

SrAr:=S/i;

Writeln(‘среднее арифметическое значение элементов массива ’,SrAr:4:1);

 

{2.подсчет количества элементов, больших К}

write(‘введите значение К ’);

read(k);

n:=0;

for i:=1 to maxN do

   if mas[i]>k then n:=n+1;

Writeln(‘В данном массиве ’ ,n, ‘ элементов, больших ‘, k:4:1 );

 

{3. Замена положительных элементов на 0, а остальные выводятся на  

экран}

for i:=1 to maxN do

    if mas[i]>0 then mas[i]:=0 else write(‘mas[‘,i,’]=’,mas[i]:10:2);

 

{4. Поиск максимального и минимального значения  элемента массива и

его индекса}

max:=mas[1]; { переменной max присваиваем любое значение, приналдежащее массиву}

min:=mas[1]; { переменной min присваиваем любое значение, приналдежащее массиву}

n:=1; {переменной n присваиваем индекс элемента массива, значение которого присвоили переменной max}

n1:=1; { переменной n присваиваем индекс элемента массива, значение которого присвоили переменной min}

for i:=1 to maxN do

  begin

    if  mas[i]>max then

      begin

          n:=i;

          max:=mas[i];

      end;

    if mas[i]<min then

      begin

          n1:=i;

          min:=mas[i];

      end;

    end;

    writeln(‘максимальный элемент массива mas[’,n,’]=’,max);

    writeln(‘минимальный элемент массива mas[’,n1,’]=’,min);

 

{вывод массива, в котором выделены другим цветом максимальные и

минимальные элементы}

for i:=1 to maxN do

 begin

textcolor(5);

 if mas[i]=max then textcolor(10);

      if mas[i]=min then textcolor(11);

      write(mas[i]:8:2);

   end;

 

Практическая работа:

1)                           Вывести на экран номера элементов массива, значения которых равны заданному числу М, а сами значения из массива удалить.

2)                           В массиве все элементы, значения которых равны 0, заменить на их индекс; все отрицательные элементы заменить на модуль этих чисел; значения положительных элементов увеличить в 5 раз. Все действия сделать в одном цикле. Новый массив вывести на экран, выделив эти 3 группы элементов разным цветом.

3)                           Из одного массива сделайте два массива, в один из которых попадут элементы с нечетными индексами, а в другой – с четными.

Задание на дом:  Вывести на экран массив, выделив разными цветами следующие участки: до первого минимального элемента, от первого минимального элемента до последнего максимального элемента, от максимального элемента до конца массива.

Занятие 3(2 урока)

 

Тема: Сортировка элементов одномерного  массива 

 

Цель урока: Учащиеся должны приобрести навыки по составлению программ для сортировки одномерных массивов.

 

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

 

2.На основе уже сформированного массива (из домашней работы) рассмотрим одну из основных операций по обработке массива – его сортировку.

 

Сортировка – один из наиболее распространенных процессов современной обработки данных. Сортировкой называется распределение элементов множества по группам в соответствии с определенными правилами.

Рассмотрим два метода сортировки одного и того же массива. Для сравнения эффективности разных методов введем целую переменную А, значения которой будет равно числу итераций (повторов просмотра массива).

 

3.Линейная сортировка(сортировка отбором).

Идея линейной сортировки заключается в том, чтобы , последовательно просматривая весь массив, отыскать наибольшее число и поместить его на первую позицию, обменяв его с элементом, который ранее занимал первую позицию. Затем просматриваются все остальные элементы массива и выполняется аналогичная операция по отбору из рассматриваемой части  массива максимального элемента и обмену местами этого элемента и первого в рассматриваемой части и т.д.

 

program Sort_Lin;                                                                   

uses crt;                                                                    

const maxN=50;                                                               

var                                                                           

  mas : array [1..maxN] of real;                                           

  i,j,a:integer;                                                          

  n: real;                                                                 

begin                                                                         

clrscr; 

{ввод числовых значений и вывод на экран исходного массива}                                                                    

  for i:=1 to 50 do                                                           

     begin                                                                    

       mas[i]:=random(100);                                                     

       write(mas[i]:10:2);                                                     

    end;                                                                     

    writeln;writeln;                                                         

    a:=0;                                                                   

   {сортировка отбором}                                                      

   for i:=1 to maxN-1 do  {изменять размер неотсортированной части массива}                                                    

     for j:=i+1 to maxN do   {сравниваем поочередно i-й элемент неотсортированной части

                                            массива со всеми от i+1-го до конца }                                                 

       begin                                                                  

         a:=a+1;                                                                ­

          if mas[i]<mas[j] then  {если в неотсортированной части массива нашли элемент, больший, чем  i-ый, то обменять их местами}                                               

                                            begin                                                               

                                                    {обмен элементов местами}                                         

                                                 n:=mas[i];                                                        

                                                 mas[i]:=mas[j];                                                   

                                                 mas[j]:=n;                                                        

                                              end;      

      end;              

   {контрольный вывод на экран}                                              

   for i:=1 to maxN do      

     write(mas[i]:8:2);                

     writeln('a=',a);    {число иттераций}   

     readln;                 

end.   

 

4.Сортировка методом пузырька.

Этот метод основан на том, что в процессе исполнения алгоритма более «легкие» элементы массива постепенно «всплывают». Особенностью данного метода является сравнение не каждого элемента со всеми, а сравнение в парах соседних элементов. Если соседние элементы таковы, что элемент справа больше, чем элемент слева, то выполняется обмен значениями этих элементов. Рассматриваем на примере уже введенного массива (см выше), поэтому ввод массива и описание переменных не делаем.

 

{сортировка пузырьком} 

a:=0;                                                                      

  for i:=1 to maxN do                                                       

  begin                                                                   

       for j:=maxN  downto i do  

          begin                                                              

       a:=a+1;                                                          

              if mas[j-1]<mas[j] then begin                                                              

                                                         n:=mas[j-1];                                                   

                                                         mas[j-1]:=mas[j];                                              

                                                    mas[j]:=n;            

         end;         

         end;                                                               

  end;                                                                  

    for i:=1 to maxN do                  

  write(mas[i]:8:2);               

  writeln('a=',a);              

  end.  

{еще один способ сортировки методом пузырька}

    begin 

{ввод массива и вывод его  на экран зеленым цветом}                                                                  

      for i:=1 to n do

         begin                                       

            textcolor(10);                                               

   a[i]:=random(100);                                    

     write(a[i]:10:1);                                         

          end;                                                             

         writeln;                                                      

      lb: a1:=0;   {устанавливаем переменную а1, которая фиксирует была ли хотя бы одна

                               перестановка}           

      for i:=1 to n-1 do                                            

       if a[i]>a[i+1] then

                                begin

                                    k:= a[i];                                  

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

                                    a[i+1]:=k;                                  

                                    a1:=1;                                      

                                 end;                                              

          if a1<>0 then goto lb;                                  

         writeln;writeln;                                             

         textcolor(3);                                                 

    for i:=1 to n do                                                

     write(a[i]:10:1);                                                     

    end.   ­

 

Практическое задание: Набрать и отладить программу для сортировки массива двумя способами. (Массив на 50 элементов  сформировать из случайных чисел). Проверить по числу итераций, какой способ более эффективен.

 

Задание на дом: составить алгоритм и программу для сортировки массива по следующему принципу следования элементов: максимальный, минимальный, второй по величине, предпоследний и т.д.

 

­ Занятие 4 (2 урока)

 

Тема: Практическая работа по теме «Сортировка элементов одномерного  массива» 

 

Цель урока: Учащиеся должны приобрести навыки по составлению программ для сортировки одномерных массивов по различным признакам.

 

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

 

2.Для практической работы предлагаются следующие задачи:

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

2)                  Справочник содержит упорядоченный список из 100 номеров телефонов. Телефонная станция выделила еще один телефонный номер. Требуется внести этот номер в справочник так, чтобы список остался упорядоченным. (Замечание: Новый список можно рассматривать как таблицу из 101 элемента, первые 100 элементов которой – номера исходного списка).

 

Домашнее задание: Предложите еще какой-нибудь свой способ сортировки массива.

 

 

Занятие 5 (2 урока)

 

Тема: Понятие двухмерного массива.  Формирование двухмерного массива.

 

Цель урока: Учащиеся должны получить общее представление о двухмерном массиве и способах его формирования.

 

1.              Понятие двухмерного массива.

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

Например: А[4,5] – элемент массива А, который находится в 4 строке и в 5 столбце.

 

Описание двухмерных массивов осуществляется так же, как и одномерных, в разделе описания типов данных:

           var

      B : array [1..3,1..7] of real;  {двухмерный массив из 3 строк и 7 столбцов}

      Massiv : array [1..100,1..70] of integer;  {двухмерный массив 100х70}

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

Для примера возьмем двухмерный массив M[1..50,1..70], тип элементов real.

 

program p1;

const  maxN=50;

          maxS=70;

{описание переменных}

var

   m : array [1..maxN,1..maxS] of real;

   i,j : integer;  {счётчики}

begin

 

{ввод значений всех элементов массива с клавиатуры}

 for i:=1 to maxN do

   for j:=1 to maxS do  

     begin

          write(‘введите значение mas[’,i,j,’]=’);

          read(mas[i,j]);

      end;

 

{заполнение массива случайными числами}

 for i:=1 to maxN do

   for j:=1 to maxS do

      mas[i,j]:=random(100); {значение интервала определяется  

                                            постановкой задачи}

3.Выво массива на экран производится аналогично вводу

{вывод массива на экран в виде таблицы в заданном формате }

  for i:=1 to maxN do

     begin

         for j:=1 to maxS do

            write(mas[i,j]:8:2);

          writeln; {это оператор для перехода на другую строку}

      end;

 

Практические задания:

1.        Сформировать двухмерный массив D[1..30,1..20] случайными значениями.

2.        Вывести массив на экран в виде таблицы.

3.        Вывести массив на экран так, чтобы четные(2,4,6 ...) колонки и нечетные (1,3,5...) колонки были разного цвета.

 

Задание на дом: Написать программу для вывода на экран из всего массива только заданного столбца (вывод в столбик) или заданной строки (вывод в строчку).

 

 

 ­ Занятие 6 (2 урока)

 

Тема: Обработка элементов двухмерного  массива 

 

Цель урока: Учащиеся должны приобрести навыки по составлению программ для обработки двухмерных массивов.

 

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

 

2.Практическое задание:Для рассмотрения данной темы предлагаются следующие задачи (на основе уже сформированной матрицы M[1..50,1..50]):

1)              Умножить матрицу на число А.

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

3)              Сборник упражнений В.Н. Пильщикова, № 9.10 - 9.12

 

3.Домашнее задание: 1.Сборник упражнений В.Н. Пильщикова, № 9.31

  

 

­ Занятие 7 (2 урока)

 

Тема: Обработка элементов двухмерного   массива  (продолжение) 

 

Цель урока: Учащиеся должны приобрести навыки по составлению программ для обработки двухмерных массивов.

 

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

 

2.Практическое задание:Для рассмотрения данной темы предлагаются следующие задачи (на основе уже сформированной матрицы M[1..50,1..50]):

1)  Вывести матрицу в строку по спирали.

2)  Определить, лежит ли заданный элемент К на главной диагонали, на побочной диагонали.

 

3.Домашнее задание: 1. Из двухмерного массива сформировать два одномерных массива, причем в один записываются элементы матрицы, расположенные на главной диагонали и выше, в другой – лежащие ниже главной диагонали.

                                      

­ Занятие 8 (2 урока)

 

Тема: Обработка элементов двухмерного  массива  (продолжение) 

 

Цель урока: Учащиеся должны приобрести навыки по составлению программ для обработки двухмерных массивов.

 

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

 

2.Практическое задание:Для рассмотрения данной темы предлагаются следующие задачи (на основе уже сформированной матрицы M[1..50,1..50]):

1)              Вычислить сумму элементов массива, индексы которых составляют в сумме заданное число К.

2)              Попов, TP, стр.217, №32(а-к)

 

3.Домашнее задание: 1. Доделать оставшиеся задания из задачи №32.

 

­ Занятие 9 (2 урока)

 

Тема: Контрольная работа по теме «Массивы»

 

Вариант I

1.       Сформировать одномерный массив А[1..40], элементами массива являются значения функции   y = cos(2x+5)/(x+2.3), значения аргумента х задать случайными числами в диапазоне [-1..20].

2.       Дополнить программу строками, с помощью которых осуществляется поиск максимального значения среди элементов с А[5] по А[15].

3.       Сформируйте из значений функции двухмерный массив B[1..2,1..40], элементы  B[1,k] представляют собой  значения функции y, а элементы B[2,k] – значения х.

4.       Упорядочить линейный массив по возрастанию. Вывести на экран массивы А и В.

 

Вариант II

1.       Сформируйте двухмерный массив А[1..25,1..25] случайными значениями в диапазоне [0..100] и одномерный массив B[1..25], значения элементов которого вычисляются как суммы столбцов двухмерного массива.

2.       Определите, есть ли в массиве B элементы с одинаковыми значениями.

3.       Найдите сумму минимальных элементов главной и побочной диагоналей.

4.       Выведите двухмерный массив на экран, выделив разными цветами главную и побочную диагонали, и минимальные элементы на них.

 

Вариант III

1.       Сформируйте двухмерный массив А[1..50,1..50] случайными значениями в диапазоне [0..50] и одномерный массив B[1..50], значения элементов которого равны максимальным элементам строк  двухмерного массива.

2.       В массиве В найдите индексы максимального и минимального элементов.

3.       Сожмите одномерный массив В, удалив предшествующие минимальному элементы.

4.     Найдите сумму элементов столбца и строки массива А, на пересечении которых находится максимальный элемент.

     Список литературы:

1.              В.Б. Попов, “TurboPascal для школьников», М. «Финансы и статистика», 1996г.

2.              В.В. Фаронов, “TurboPascal 7.0. Начальный курс. Учебное пособие”, изд. “Нолидж”,1997г.

3.              В.Н. Пильщиков, “Сборник упражнений по языку Паскаль”, М. “Наука”,1989г.

4.              О.Ф. Ускова, О.Д. Горбенко, “Начала алгоритмического языка”, Воронеж, издательство Воронежского университета, 1990г.

5.              В.А. Гольденберг “Введение в программирование”, Минск, Харвест, 1997г.

 

Система работы

Спецкурсы

Уроки (Массивы)

Уроки (NC)

Планирование