Двумерные массивы ( матрицы ) на языке PASCAL Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a 21 – это элемент, стоящий во второй строке и в первом столбце. Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы. Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:
Описание двумерного массива Паскаля Существует несколько способов объявления двумерного массива Паскаля. Мы уже умеем описывать одномерные массивы, элементы которых могут иметь любой тип, а, следовательно, и сами элементы могут быть массивами. Рассмотрим следующее описание типов и переменных: Пример описания двумерного массива Паскаля A: array [1..5,1,,10] of ; Мы оъявили двумерный массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i, j ]. Определение типов для двумерных массивов Паскаля можно задавать и в одной строке:Type Matrix= array [1..5] of array [1..10] of < тип элементов >; или еще проще: type matrix = array [1..5, 1..10] of ; Обращение к элементам двумерного массива имеет вид: M [ i, j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце. Тут главное не перепутать строки со столбцами, а то мы можем снова получить обращение к несуществующему элементу. Например, обращение к элементу M [10, 5] имеет правильную форму записи, но может вызвать ошибку в работе программы. Мы оъявили двумерный массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i, j ]. Определение типов для двумерных массивов Паскаля можно задавать и в одной строке:Type Matrix= array [1..5] of array [1..10] of < тип элементов >; или еще проще: type matrix = array [1..5, 1..10] of ; Обращение к элементам двумерного массива имеет вид: M [ i, j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце. Тут главное не перепутать строки со столбцами, а то мы можем снова получить обращение к несуществующему элементу. Например, обращение к элементу M [10, 5] имеет правильную форму записи, но может вызвать ошибку в работе программы.
Основные действия с двумерными массивами Паскаля Пример программы ввода двумерного массива Паскаля с клавиатуры var A : array [1..5, 1..10] of integer; i, j: integer; { индексы массива } begin for i :=1 to 5 do {цикл для перебора всех строк} for j :=1 to 10 do {перебор всех элементов строки по столбцам} read ( a [ i, j ]); {ввод с клавиатуры элемента, стоящего в i -й строке и j -м столбце}
Вывод двумерного массива Паскаля на экран for i :=1 to 5 do {цикл для перебора всех строк} begin for j :=1 to 10 do {перебор всех элементов строки по столбцам} write ( a [ i, j ]:4); {печать элементов, стоящих в i -й строке матрицы в одной экранной строке, при этом для вывода каждого элемента отводится 4 позиции} writeln ; {прежде, чем сменить номер строки в матрице, нужно перевести курсор на начало новой экранной строки} End. Пример программы вывода двумерного массива Паскаля
Задача. Вычислить сумму элементов каждой строки массива program summa(output); var I,j:integer; S:array[1..4] of integer; A:array[1..4, 1..3] of integer; begin for I:=1 to 4 do for j:=1 to 3 do read (A[i,j]); for I:=1 to 4 do for j:=1 to 3 do S[i]:=S[i]+A[i,j]; for i:=1 to 4 do write('s=',s[i]); end.
Задача. Вычислить сумму всех элементов двумерного массива program summa(output); var I,j:integer; S: integer; A:array[1..2, 1..5] of integer; begin for I:=1 to 2 do for j:=1 to 5 do read (A[i,j]); for I:=1 to 2 do for j:=1 to 5 do S:=S+A[i,j]; write(S:2); end.
Задача: Поменять местами в массиве столбцы и строки program mesto(input,output); var I,j:integer; A:array[1..4, 1..4] of integer; begin for I:=1 to 4 do for j:=1 to 4 do read (A[i,j]); for j:=1 to 4 do begin for i:=1 to 4 do begin write (A[i,j]); end; writeln; end; end.
ЗАДАЧА: Заполнить масcив по правилу Program prim (input,ouiput); var I,j:integer; A:array[1..9, 1..9] of integer; begin for I:=1 to 9 do for j:=1 to 9 do A[i,j]:=i+j; for I:=1 to 9 do begin for j:=1 to 9 do begin write(A[i,j]:4); end; writeln; end; end.
ЗАДАЧА: Составить таблицу умножения (по правилу) program ymn(input,output); var I,j:integer; A:array[1..10, 1..10] of integer; begin for I:=1 to 10 do for j:=1 to 10 do A[i,j]:=i*j; for I:=1 to 10 do begin for j:=1 to 10 do write(A[i,j]:4); end; writeln; end.
Задача. Вычислить сумму элементов каждого столбца массива program summa(output); var I,j:integer; S:array[1..3] of integer; A:array[1..4, 1..3] of integer; begin for I:=1 to 4 do for j:=1 to 3 do read (A[i,j]); for I:=1 to 4 do for j:=1 to 3 do S[j]:=S[j]+A[i,j]; for j:=1 to 3 do write('s=',s[j]); end.
ЗАДАЧИ: Вычислить сумму элементов массива program s_1(output); summa(output); var I,j:integer; S:array[1..3] of integer; A:array[1..4, 1..3] of integer; begin for I:=1 to 4 do for j:=1 to 3 do read (A[i,j]); for I:=1 to 4 do for j:=1 to 3 do S[j]:=S[j]+A[i,j]; for j:=1 to 3 do write('s=',s[j]); end. program summa(output); var I,j:integer; S:array[1..4] of integer; A:array[1..4, 1..3] of integer; begin for I:=1 to 4 do for j:=1 to 3 do read (A[i,j]); for I:=1 to 4 do for j:=1 to 3 do S[i]:=S[i]+A[i,j]; for i:=1 to 4 do write('s=',s[i]); end. program summa(output); var I,j:integer; S: integer; A:array[1..2, 1..5] of integer; begin for I:=1 to 2 do for j:=1 to 5 do read (A[i,j]); for I:=1 to 2 do for j:=1 to 5 do S:=S+A[i,j]; write(S:2); end. Каждого столбца Каждой строки Всех элементов
Примеры решения задач с двумерными массивами Паскаля Задача: Найти произведение ненулевых элементов матрицы. Решение: Program pr(input,output); var A:array[1..2,1..5] of integer; i,j,p:integer; Begin for i:=1 to 2 do begin for j:=1 to 5 do read(A[i,j]); end; begin p:=1; end; for i:=1 to 2 do begin for j:=1 to 5 do if A[i,j]0 then p:=p*A[i,j]; writeln(p); end; end.