...

Для чего в программах используются двумерные массивы как они описываются

Паскаль – Урок 11: Двумерные массивы

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

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

Как описываются двумерные массивы? Для записи двумерных массивов есть несколько способов, я рассмотрю 2 из них.

1 способ описание массива: array [1..m, 1..n] of тип переменных в массиве (integer/real/byte);

2 способ описания массива: array [1..m] of array [1..n] of тип переменных в массиве;

Сначала описываются строки (1..m), а потом столбцы (1..n).

Во втором способе описывается как бы два одномерных массива, которые вместе образуют один двумерный.

Двумерный массив может описываться в разделе Type, для последующего обращения к нему несколько раз или же в разделе описания переменных Var, хочу обратить внимание, что вместо m и n можно подставить и числа, а можно и пользоваться константами.

Пример задания двумерного массива в разделе описания переменных:

Const 
m = 100;
n = 100;
var
a: Array [1..m, 1..n] of integer;

В этом случае мы задали двумерный массив a размера 100 на 100, то есть у нас получилась квадратная матрица.

Пример задания матричного массива при помощи раздела Type:

Const 
m = 100;
n = 100;
Type
Matrix = Array [1..m, 1..n] of integer;
var
a: Matrix;
b:Matrix;

Во втором примере мы задали два одинаковых матричных массива размерами 100 на 100, при описании массива b нам не пришлось снова описывать его размеры и тип данных.

Как обращаться к ячейке-переменной двумерного массива?

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

x:=a[i,j];

x-любая переменная, a – название массива, i-номер строки, j – номер столбца.

Причём i и j может быть как переменными, так и целыми числами.

Пример записи данных в массив:

For i:= 1 to n do //задание в цикле номера строки 
For j:=1 to m do //задание в цикле номера столбца
a[i,j]:=random (100);

//присваивание ячейке с номером строки i и номером столбца j случайного значения

Мы заполнили массив случайными числами от 1 до 100.

Пример программы с использованием двумерного массива, в котором мы заполняем массив случайными числами и выводим его на экран:


Var //описание переменных и массива
Matrix: Array[1..10,1..10] of integer;
i, j: integer;

Begin //начало основной программы
writeln ('Двумерный массив: '); //Диалог с пользователем

for i := 1 to 10 do //заполнение массива
for j := 1 to 10 do
Matrix[i,j]:=random (100);

for i := 1 to 10 do begin //Вывод массива
for j := 1 to 10 do
write (matrix[i,j], ' ');
writeln
writeln ('ZedPost.Ru'); //При желании можно удалить
end; //Конец программы

//readln //используется в Турбо паскаль
end.

Скачать пример с использованием матрицы:zapolneniemas.pas

Двумерные массивы (матрицы) в Паскале

Одномерный массив можно представить как линейную структуру, в которой элементы следуют друг за другом. Однако бывают более сложные структуры данных. Например, двумерные массивы, которые можно описать как таблицу, в ячейках которой располагаются значения. Для обращения к данным массива указывается номера их строк и столбцов. Часто табличные массивы называют матрицами.

Обычно двумерные массивы на языке программирования Pascal описываются так:

array [1..m, 1..n] of базовый_тип

Однако можно их описывать как массив массивов:

array [1..m] of array [1..n] of базовый_тип

При этом описание может быть в разделе type и тогда создается новый тип, который можно использовать при объявлении переменных. m и n – это константы, их можно опустить и вставить конкретные значения, но лучше так не делать. Обычно подразумевают, что в интервале от 1 до m определяется количество строк, а в интервале от 1 до n – количество столбцов массива.

1 вариант – описание массива через раздел type :

const M = 10; N = 5; type matrix = array [1..M, 1..N] of integer; var a: matrix;

2 вариант – описание массива в разделе переменных:

const M = 10; N = 5; var a: array [1..M, 1..N] of integer;

При использовании третьего варианта описания лучше сначала определить некоторый тип одномерного массива (строка двухмерного массива), который затем используется при описании двухмерного массива:

type a = array[1..10] of byte; var b: array[1..100] of a;

Для обращения к элементу двухмерного массива необходимо указать имя массива и в квадратных скобках через запятую – значения двух индексов (первый указывает номер строки, а второй – номер столбца), на пересечение которых стоит элемент (например, a[i,2]:=6) . В языке программирования Pascal допустимо разделение индексов с помощью квадратных скобок (например, a[i][5]:= 7 ).

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

type arr = array[1..4, 1..3] of integer; const cords: arr = ((1,-1,3), (0,0,0), (1,4,0), (4,-1,-1));

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

var matrix: array[1..3,1..5] of integer; i, j: integer; begin writeln('Введите 15 чисел: '); for i := 1 to 3 do for j := 1 to 5 do read(matrix[i,j]); for i := 1 to 3 do begin for j := 1 to 5 do write(matrix[i,j], ' '); writeln end; end.

Размерность массива (т.е. количество содержащихся в нем значений) определяется произведением количества строк на количество столбцов. В примере выше в массив помещается 15 значений.

Когда пользователь вводит очередное число, то процедура read считывает его и помещает в ячейку с текущими индексами i и j . Когда i равна единице, значение j меняется пять раз, и, значит, заполняется первая строка таблицы. Когда i равна двум, значение j снова меняется пять раз и заполняется вторая строка таблицы. Аналогично заполняется третья строка таблицы. Внутренний цикл for в общей сложности совершает 15 итераций, внешний только 3.

Как пользователь вводит значения – не важно. Он может их разделять либо пробелом, либо переходом на новую строку.

Вывод значений двумерного массива организован в виде таблицы. Выводятся 3 строки по 5 чисел в каждой. Внутри строк числа разделяются пробелом.

На самом деле, это не совсем корректно написанная программа. Мы несколько раз используем цифры 3 и 5. А что если мы захотим поменять размерность массива? Придется просмотреть всю программу (представьте, что она очень большая) и исправить значения. Это неэффективно. Поэтому в программе следует использовать константы. В случае необходимости значения можно поменять всего лишь в одном месте.

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

Вот так может выглядеть подправленный вариант программы:

const M = 3; N = 5; var matrix: array[1..M,1..N] of integer; i, j: integer; begin writeln ('Введите 15 чисел: '); for i := 1 to M do for j := 1 to N do read (matrix[i,j]); for i := 1 to M do begin for j := 1 to N do write (matrix[i,j]:5); writeln end; end.

Двумерные массивы

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

Двумерный массив – это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам.

Данные двумерного массива хранятся в прямоугольной таблице – матрице.

Двумерный массив определяется именем, числом строк и столбцов и обозначается: , где А – имя массива; N – число строк, M – число столбцов. Если M=N, то матрица называется квадратной. В матрице каждый элемент определяется номером строки и номером столбца, на пере пересечении которых он расположен, и в соответствии с этим обозначается именем массива с двумя индексами: первый – номер строки, второй – номер столбца. Пример: .

Если обозначить: i – номер строки, j – номер столбца, то элемент матрицы обозначается .

Если матрица квадратная:

– Для элементов, принадлежащих главной диагонали .

– Для элементов, принадлежащих вспомогательной диагонали , где n – размерность квадратной матрицы.

– Для элементов, лежащих выше главной диагонали .

– Для элементов, лежащих ниже главной диагонали .

Формат записи:

: array [1..N, 1..M] of

Пример описания двумерного массива на языке программирования Pascal:

 

Type Str = array [1..10] of integere; Matrix=array [1..5] of Str; Var M: matrix;

Мы объявили двумерный массив Паскаля M, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться , а каждому j -му элементу внутри i -й строки – .

 

Var A: array[1..n,1..m] of integer; const n=4, m=3 Masiv=array [1..n, 1..m] of integer;

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

Типовые алгоритмы обработки двумерных массивов

1. Поэлементный ввод массива:

 

for i:=1 to N do begin for j:=1 to M do readln (A[i, j]); end.

2. Вывод массива в виде таблицы:

 

for i:= 1 to n do begin for j:= 1 to m do write (a[i,j]:4); writeln; end;

3. Использование генератора случайных чисел для заполнения двумерного массива и вывода его на печать:

 

randomize; for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=random(100)-10; write(a[i,j]:4); end; writeln; end;

4. Нахождение суммы значений элементов массива:

 

S:=0; for i:=1 to N do begin for j:=1 to M do S:= S + A[i, j]; end;

5. Нахождение суммы двумерных массивов:

 

begin for j:= 1 to m do c[i, j]:=a[i, j]+ b[i, j] end;

6. Транспонирование матрицы – зеркальное отражение ее элементов относительно главной диагонали. Сделать это можно, введя новый массив:

 

for i:= 1 to n do for j:= 1 to n do b[i, j]= a[j, i];

Пример .

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

 

program srednee; const m=3; n=4; var a: array[1..n,1..m] of integer; i,j,pol_elem:integer; sred:real; begin for i:=1 to n do for j:=1 to m do read(a[i,j]); sred:=0; for i:=1 to n do begin pol_elem:=0; for j:=1 to m do begin sred:=sred+a[i,j]; if a[i,j] > 0 then inc(pol_elem); end; writeln('В',i,'-ой строке',' ',pol_elem,' ','положительных элементов'); end; sred:=sred/n/m; writeln('Средннее арифметическое:',sred:6:2); end.

Тест.Блок-схема

  • Выберите один из вариантов в каждом из 5 вопросов;
  • Нажмите на кнопку “Показать результат”;
  • Скрипт не покажет результат, пока Вы не ответите на все вопросы;
  • Загляните в окно рядом с номером задания. Если ответ правильный, то там (+). Если Вы ошиблись, там (-).
  • За каждый правильный ответ начисляется 1 балл;
  • Оценки: менее 2.5 баллов – НЕУДОВЛЕТВОРИТЕЛЬНО, от 2.5 но менее 3.75 – УДОВЛЕТВОРИТЕЛЬНО, 3.75 и менее 5 – ХОРОШО, 5 – ОТЛИЧНО;
  • Чтобы сбросить результат тестирования, нажать кнопку “Сбросить ответы”;

При подготовке материала использовались источники:
https://zedpost.ru/128-paskal-urok-11-dvumernye-massivy.html
https://pas1.ru/arraymulti
https://usernameschool.github.io/blog-post13.html

Добавить комментарий