МАССИВЫ
Краткие теоретические сведения
С понятием "массив" приходится сталкиваться при решении научно-технических и экономических задач обработки совокупностей большого количества значений. В общем случае массив - это структурированный тип данных, состоящий из фиксиро- ванного числа элементов, имеющих один и тот же тип.
Тип элементов массива называется базовым. Число элементов массива фиксиру- ется при описании и в процессе выполнения программы не меняется. Доступ к элемен- там массива осуществляется путем индексирования элементов массива. Тип индекса определяет границы изменения индекса. Для описания массива предназначено слово- сочетание 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. Примеры описания и ввода-вывода линейного и двумерного массивов.
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.