МАССИВЫ

  • docx
  • 26.12.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л3-0025366.docx

МАССИВЫ

 

Краткие теоретические сведения

 

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

Тип элементов массива называется базовым. Число элементов массива фиксиру- ется при описании и в процессе выполнения программы не меняется. Доступ к элемен- там массива осуществляется путем индексирования элементов массива. Тип индекса определяет границы изменения индекса. Для описания массива предназначено слово- сочетание array of (массив из).

Описание типа

Type <имя типа>=array [<тип индекса>] of <тип компонента>; Var <идентификатор, …> : <имя типа>;

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

Var <идентификатор>:array[<тип индекса>] of <тип компонента>; Примеры описаний массивов:

Type

Vektor =array [1..7] of integer; Massiv =array [1..20] of real;


Var

А,B:vector; X: massiv;

То же в другом формате:

Var А, B : array [1..7] of integer; X: array [1..20] of real;

Если в описании массива задан один индекс, массив называется одномерным, ес- ли два индекса - двумерным, если n индексов — n-мерным массивом. Одномерный массив соответствует понятию линейной таблицы (вектора), двумерный - понятию прямоугольной таблицы (матрицы, набору векторов). Размерность ограничена только объемом памяти конкретного компьютера.

Описать двумерный массив можно двумя способами:

Var

A: Array[1..20] of Array [1..30] of Integer; или

Var

A : Array [1..20,1..30] Of Integer;

В обоих случаях описан двумерный массив, соответствующий таблице, состоя- щей из 20 строк и 30 столбцов. Отдельный элемент двумерного массива адресуется двумя индексами. Например, элемент, находящаяся в 5-й строке и 6-м столбце будет обозначаться A[5,6].

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

Например, если имеется массив:

A:array[1..5,1..5] of integer;

то в памяти элементы массива будут размещены по возрастанию адресов: А[1,1] А[1,2] А[1,5] А[2,1] А[2,2] А[5,5]

 

Над всем массивом можно выполнять действия A=B, A<>B, A:=B.

Присваивать можно только массивы одинаковых типов. Обращение к отдельно- му элементу массива производится при помощи указания имени всего массива и в квадратных скобках – индекса конкретного элемента. Например: X[10] - элемент мас- сива X с индексом 10.

 

Пример 1.

Сформировать массив из 20 целых чисел, вводимых с клавиатуры, и вывести элементы массива в обратном порядке.

Program PR1; Var

A : Array [1..20] Of Integer;                    I : Integer; BEGIN

For I:=1 To 20 Do                       цикле перебираем индексы элементов массива}

Readln(A[I]);       { вводим очередной элемент массива с клавиатуры }

For I:=20 Downto 1 Do        {Распечатываем массив в обратном порядке}

Write(A[I],'                       ')

END.


Для учебных целей удобнее использовать массивы, сформированные с помо- щью генератора случайных чисел. В языке Паскаль случайные числа, равномерно рас- положенными в интервале от 0 до 1, формирует функция Random. Для получения це- лых случайных чисел от 0 до N следует использовать функцию Random(N+1). Чтобы выбрать целое случайное число из интервала [a, b] можно применить выражение Random(b-a+1)+a.

 

Пример 2.

Сформировать и распечатать массив из 20 целых случайных чисел от 10 до 100.

Найти сумму элементов массива. Program pr3;

Var

A : Array [1..20] Of Integer; I, S : Integer; BEGIN

S:=0; {обнуляем значение суммы}

For I:=1 To N Do begin

A[I]:= Random(101)-50;                               {формирование элементов массива}

Write(A[I],'                             ');                              {вывод массива}

S:=S+A[I];                                                       {суммирование элементов массива}

end

END.

 

Пример 3.

В массиве хранятся цены на 10 видов мороженого. С помощью датчика случай- ных чисел заполнить массив целыми значениями, лежащими в диапазоне от 20 до 80 включительно. Определить порядковый номер самого дорогого мороженого.

 

Program pr3;

Var A:array[1..10] of integer;

i, n, m: integer; {m- максимальный элемент, n- его порядковый номер}

BEGIN

for i:=1 to 10 do begin                    {формирование и вывод элементов массива}

a[i]:=random(18)+3;                                                 write(a[i],' '); end; writeln;

m:=a[1]; n:=1;                {выбираем 1-й элемент в качестве максимального }

for i:=2 to 10 do {перебираем все элементы массива, начиная со 2-го}

if a[i]>m then begin m:=a[i]; n:=i end; {запоминаем наибольший и его индекс}

write('n=',n) END.

 

Пример 4.

В массиве хранится возраст 15 человек. С помощью датчика случайных чисел заполнить массив целыми значениями, лежащими в диапазоне от 16 до 30 включи- тельно. Найти количество человек моложе 25 лет.

 

Program pr4;


Var A:array[1..15] of integer;

i, k : integer;              {k - количество человек моложе 25 лет }

BEGIN

for i:=1 to 15 do begin               {формирование и вывод элементов массива}

a[i]:=random(15)+16;                                                     write(a[i],' '); end;

writeln; k:=0; for i:=1 to 15 do

if a[i]<25 then k:=k+1; {подсчет количества человек моложе 25 лет }

write('k=',k) END.

 

Пример 5.

Массив A[1..9] заполняется числами, вводимыми с клавиатуры. Найти среднее арифметическое элементов, которые больше 12 и меньше 25.

 

Program pr5;

Var A: array[1..9] of integer; i, k, s: integer;

BEGIN

for i:=1 to 9 do begin             {формирование  массива}

write('a[',i,']='); readln(a[i]) end;

writeln; k:=0; s:=0; for i:=1 to 9 do

if (a[i]<25) and (a[i]>12) then begin k:=k+1; s:=s+ a[i]; end;

if k>0 then writeln('srednee=',s/k:4:2) else writeln('Искомых элементов нет’); readln;

END.

 

Пример 6.

Задан массив A[1..10]. Сформировать два массива, включая в первый четные элементы исходного  массива, а во второй - нечетные.

 

Program Pr9; Const n=10;

Var         a, x, y: array[1..n] of integer;

i, k, m: integer; {k- количество элементов массива X, m- количество элементов массива Y}

BEGIN

randomize; writeln('Массив А:');

for i:=1 to n do             begin     {формирование и вывод элементов массива A}

a[i] := random(51); Write(a[i]:4);

end;

writeln;             k:=0; m:=0; for i:=1 to n do


{если очередной элемент массива А четный, то заносим его в массив Х, иначе - в массив Y}

if                  a[i] mod 2=0  then begin k:=k+1; x[k]:=a[i]; end

else                                              begin m:=m+1; y[m]:=a[i]; end; writeln('Массив X'); for i:=1 to k do write(x[i]:4);                   {вывод массива Х}

writeln; writeln('Массив Y');             for i:=1 to m do write(y[i]:4);     {вывод массива Y}

END.

 

Пример 7.

Найти сумму элементов целочисленной матрицы размером N*M. Program pr7;

Const n=2; m=5;

Var Mt: array [1..n,1..m] of integer; J, S, I: integer;

BEGIN                         {ввод элементов матрицы}

Writeln (‘введи элементы матрицы по строкам’); For I:=1 to n do

For j:=1 to  m do begin

Write ('Mt [', I, ’,’ ,  j, ']= ');                         Readln (Mt[i,j]); End;

{нахождение суммы элементов матрицы}

S:=0; For I:=1 to n do

For j:=1 to m do S:=S+Mt[i,j];

Writeln (‘сумма = ’, S);

END.

 

Пример 8.

Сформировать и вывести на экран в виде таблицы массив A[1..4,1..6], заполнив его целыми случайными числами из интервала [25,80].

Program pr8;

Var a: array[1..4,1..6] of integer; i, j: integer;

BEGIN

randomize;                          {формирование и вывод построчно элементов массива}

for i:=1 to 4 do begin                                  {I номер строки}

for j:=1 to 6 do begin                                  {j – номер столбца}

a[i,j]:=random(56)+25; write(a[i,j],' '); end;

writeln;                                                {переход на новую строку}

end; END.

 

Пример 9.

Дана целочисленная матрица размером N*M. Все отрицательные элементы за- менить нулями, а положительные – единицами. Полученную матрицу вывести в виде таблицы.


Program pr9;

Const n=3; m=3;

Type massiv=array [1..n,1..m] of integer; Var                  Mt: massiv;

i, j: integer;

BEGIN                      {ввод элемента матрицы} Writeln (‘введи элемент матрицы по строкам’); For I:=1 to n do

For j:=1 to m do begin

Write ('Mt [', I, j, ']= '); readln (Mt [i, j]) End;

For I:=1 to n do                       {перебираем построчно элементы массива}

For j:=1 to m do

If Mt [i, j] <=0 then Mt [i, j] :=0  Else Mt[i, j]:=1;

{вывод в виде таблицы}

for I:=1 to n do              begin

for j:=1 to m do write (Mt [I, j]);

writeln                          {переходим на новую строку}

end; END.

 

Пример 10.

В массиве A[1..5,1..5] найти сумму элементов главной диагонали, кратных 5.

Program p10;

Var a: array[1..5,1..5] of integer; i, j, s: integer;

BEGIN

randomize;               for i:=1 to 5 do begin     {формируем и выводим таблицу}

for                                                                       j:=1 to 5 do begin a[i,j]:=random(80);  write(a[i,j],' ');

end; writeln;

end;

s:=0;                       for i:=1 to 5 do   {перебираем построчно элементы массива}

for j:=1 to 5 do

{если элемент находится на главной диагонали и кратен 5, то суммируем }

if (i=j) and (a[i,j] mod 5=0) then s:=s+a[i,j]; writeln('s=',s)

END.

 

Пример 11

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

Program pr11;

Var         a: array[1..5,1..3] of integer;


i, j, m, s1, s5: integer; BEGIN

randomize;                         {формируем и выводим таблицу}

for i:=1 to 5 do

for j:=1 to 3 do begin a[i,j]:=random(10)+20;                                                              write(a[i,j],' ');

end; writeln

end;

m:=a[3,1];                                     {находим наибольший элемент в 3-ей строке}

for i:=1 to 3 do

if a[3, i]>m then m:=a[3,i];

writeln('численность самой большой группы на третьем курсе ', m);

{находим сумму элементов 1-й строки и сумму элементов 5-й строки}

for j:=1 to 3 do begin s1:=s1+a[1,i];

s5:=s5+a[5,i]

end;

{сравниваем количество студентов на 1-м и на 5-м курсах}

if s1>s5 then writeln('студентов больше на 1 курсе')

else if s1<s5 then writeln('студентов больше на 5 курсе')

else writeln('количество студентов на 5-м и на 1-м курсах равно')

END.

 

Контрольные вопросы

1.     Массивы. Основные понятия и определения.

2.     Формат записи массивов. Описание одномерного и двумерного массивов.

3.     Действия над массивами. Действия над элементами массивов.

4.     Примеры описания и ввода-вывода линейного и двумерного массивов.