Переменная Mas – матрица, состоящая из пяти строк, в каждую из которых включено по десять элементов. 3) Предыдущий способ можно упростить так:
Const n = 5; m = 10; Турe arr=Array[1..n] Of Аrrау[1..m] of ; Var Mas: arr;
4) И снова сократив запись, получим:
Const n = 5; m = 10; Type arr = Array[1..n,1..m] of ; Var Mas: arr;
Для обработки содержимого матрицы, удобно пользоваться вложенными циклами:
For i:= 1 To n Do For j:= 1 To m Do
Например, для заполнения массива случайнми числами:
for i:=1 to n do for j:=1 to n do x[i,j]:=random(100);
Для вывода двумерного массива вещественных чисел размером n строк, m столбцов:
for i:=1 to n do begin for j:=1 to m do write(x[i,j]:5:2); writeln; end;
В следующей программе массив сначала заполняется числами с клавиатуры, а затем выводиться на экран.
program input_and_output_array; uses crt; const n=3; m=3; var i, j: integer; mas: array[1..n, 1..m] of integer; begin for i:=1 to n do for j:=1 to m do begin write(‘ Элемент ‘, i,’ строки, ‘,j,’ столбца = ‘); readln(mas[i, j]); end; writeln(‘ Получившаяся матрица: ‘); for i:=1 to n do begin for j:=1 to m do begin write(mas[i, j]:5); end; writeln end; end.
Двумерные массивы вывод. Заполнение. Двумерный массив циклы. C++ для начинающих. #32
Количество элементов в массиве (его размерность) можно узнать, умножив количество строк на количество столбцов. Сумма всех элементов квадратной матрицы:
sum:=0; for i:=1 to n do for j:=1 to n do sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Сумма элементов главной диагонали квадратной матрицы (элементы главной диагонали имеют одинаковые индексы -x[1,1], x[2,2] и т.д.):
sum:=0; for i:=1 to n do sum:=sum+x[i,i]; writeln(‘Сумма=’,sum);
Сумма элементов побочной диагонали (диагонали противоположной главной). Индексы элементов побочной диагонали в сумме равны n+1, т.е. i+j=n+1 или j=n+1-i :
sum:=0; for i:=1 to n do sum:=sum+x[i,n+1-i]; writeln(‘Сумма=’,sum);
Сумма элементов ниже главной диагонали квадратной матрицы (строго ниже):
sum:=0; for i:=1 to n do for j:=1 to n do if i>j then sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Можно не просматривать весь массив, а брать только нужные элементы:
sum:=0; for i:=2 to n do for j:=1 to i-1 do sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Сумма элементов выше и на главной диагонали квадратной матрицы:
sum:=0; for i:=1 to n do for j:=1 to n do if i
Здесь также можно не просматривать весь массив, а брать только нужные элементы:
sum:=0; for i:=1 to n do for j:=i to n do sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Сумма элементов ниже побочной диагонали квадратной матрицы (строго ниже) :
sum:=0; for i:=1 to n do for j:=1 to n do if i+j>n+1 then sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Можно не просматривать весь массив, а брать только нужные элементы:
sum:=0; for i:=2 to n do for j:=n+2-i to n do sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Если надо посчитать сумму элемсентов ниже побочной диагонали и на ней, то в предыдущем примере, при просмотре всего массива в предыдущем примере надо заменить знак отношения > на >=, а при просмотре толко нужных элементов применить такой код:
Двумерный динамический массив c++ пример. Создание, заполнение, удаление. Динамические массивы. #56
sum:=0; for i:=1 to n do for j:=n+1-i to n do sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
При подсчете суммы элементов выше и на главной диагонали, выше и на побочной диагонали возможно применине такого кода:
sum:=0; for i:=1 to n do for j:=1 to n do if (i<=j) and (i+j<=n+1) then sum:=sum+x[i,j]; writeln(‘Сумма=’,sum);
Подсчет сумм элементов по строкам:
for i:=1 to n do begin sum:=0; for j:=1 to n do sum:=sum+x[i,j]; writeln(‘Сумма ‘,i,’-й строки’,sum); end;
Подсчет сумм элементов по столбцам:
for j:=1 to n do begin sum:=0; for i:=1 to n do sum:=sum+x[i,j]; writeln(‘Сумма ‘,j,’-го столбца ‘,sum); end;
Безусловно суммы по строкам и столбцам можно записывать в одномерный массив. Например, для сумм по столбцам:
for i:=1 to n do sum[j]:=0; for i:=1 to n do for j:=1 to n do zum[j]:=sum[j]+x[i,j]; for i:=1 to n do write(sum[i]:4); writeln;
Суммы элементов по диагоналям, параллельным главной диагонали. Очевидно, что таких сумм будет 2n-1. Кроме того, разности индексов эдементов, стоящих на одной диагонали будут равны друг другу. Имеется в виду разность «номер строки минус номер столбца».
Эти разности будут меняться от -n+1 для самой верхней диагонали s1, содержащей всего лишь один элемент, до n-1 для диагонали s2N-1, расположенной в самом низу матрицы и содержащей также всего один элемент. Таким образом, для подсчета сумм мы должны объявить массив: Var sum:array[-n+1..n-1] of integer; Число элементов в этом массиве будет 2n-1. Код для подсчета этих сумм:
for i:=-n+1 to n-1 do sum[i]:=0; for i:=1 to n do for j:=1 to n do sum[i-j]:=sum[i-j]+x[i,j]; for i:=-n+1 to n-1 do write(sum[i]);
Суммы элементов по диагоналям, параллельным побочной диагонали.
for i:=2 to 2*n do sum[i]:=0; for i:=1 to n do for j:=1 to n do sum[i+j]:=sum[i+j]+x[i,j]; for i:=2 to 2*n do write(sum[i]);
Суммы элементов по периметрам двумерного массива.
Cледует различать четный или нечетный порядок матрицы n. Число сумм будет равно k=n div 2 при четном n и k=n div 2 +1 при нечетном значении n. Счет суммы начинается по строке i от столбца j равного i и заканчивается столбцом n-i+1 , т.е. начинается с элемена находящегося на главной диагонали и заканчивается элементом на побочной диагонали. Одновременно учитываются элементы из параллельной строки, индекс которой равен n-i+1 . Затем считаем элементы по двум паралельным столбцам i и n-i+1 (не учитывая элементы, стоящие в строках). Если n -нечетное число, то выводим значение центрального элемента массива x[k+1,k+1] .
k:=n div 2; for i:=1 to k do begin sum:=0; for j:=i to n-i+1 do sum:=sum+x[i,j]+x[n-i+1,j]; for j:=i+1 to n-i do sum:=sum+x[j,i]+x[j,n-i+1]; writeln(sum); end; if n mod 2=1 then writeln(x[k+1,k+1]);
Источник: pro-prof.com
Двумерные массивы паскаль
Двумерный массив в Паскале представляет собой таблицу, состоящую из нескольких одномерных массивов. Двумерные массивы Pascal называют матрицей. Положение элементов в матрице обозначается двумя индексами.
Рассмотрим матрицу 3*3, то есть она будет состоять из 3 строк и 3 столбцов:
Каждый элемент обладает 2-мя индексами. Первый — номер строки, в котором располагается элемент, а второй – номер столбца. Следовательно, индекс элемента определяется местом пересечением столбца и строки . Например, a13 – это элемент, стоящий в первой строке и в третьем столбце массива.
Описание двумерного массива Паскаля.
Имеется ряд методов объявления двумерного массива.
Рассмотри способ, в котором указывается тип элемента и переменные.
Type Vector = array [1..9] of ; Matrix= array [1..4] of vector; Var mas: matrix;
В данном варианте матрица mas состоит из 4 строк, в каждой из которых 9 столбцов. При этом мы можем обратиться к любой i -й строке через mas [ i ], а к j -му элементу внутри i строки – m [ i , j ].
Во втором и третьем способе матрицу можно задать в одну строку.
Type Matrix= array [1..4] of array [1..9] of < тип элементов >; или еще проще: type matrix = array [1..4, 1..9] of ;
Как и в предыдущем варианте, матрица имеет 4 строки и 9 столбцов, обращение к какому-либо элементу массива имеет вид: mas [ i , j ]. Значит, что элемент, расположен в i -й строке и j -м столбце. Важно не перепутать строки со столбцами, иначе произойдет ошибка в ответе.
Основные действия с двумерными массивами Паскаля
Все основные действия над матрицами выполняются поэлементно, причем типы данных элементов должны быть одинаковыми. То есть, если матрица состоит из чисел, то действия можно выполнять только с числами. Однако для реализации операции присваивания массивам достаточно быть одного размера. Например, дан массив
type matrix= array [1..4, 1..9] of integer; var a , b : matrix ;
в ходе выполнения такой программы матрице а можно присвоить значения матрицы b ( a := b ).
Ввод двумерного массива Паскаля.
Для поочередного ввода элементов в матрицу необходимо перебрать элементы с 1-го столбца 1-ой строки до последнего столбца последней строки. Для этого используется два оператора цикла for, причем один вложен в другой.
Проанализируем образец ввода двумерного массива Паскаля с клавиатуры:
type matrix= array [1..4, 1..9] of integer; var a, : matrix; i, j: integer; < индексы массива >begin for i :=1 to 4 do for j :=1 to 9 do readln ( a [ i , j ]);
Вывод двумерного массива Паскаля на экран.
При выводе элементы должны печатать по порядку индексов, то есть в строках элементы стоят друг за другом, а в столбах один под другим. Для этого необходимо написать следующие элементы кода:
for i :=1 to 4 do begin for j :=1 to 9 do write ( a [ i , j ]:3); writeln ; end ;
Примечание! Использовать операторы readln ( a [ i , j ]), writeln именно в таком виде, в противном случае компилятор не сможет считать и напечатать элемент. Ввод в программу операторов в таком виде readln (a), writeln (a) не допустим, так как а – это переменная типа массив.
Представление двумерного массива Паскаля в памяти
В памяти ЭВМ элементы двумерного массива располагаются последовательно и занимают несколько байт. Например, элементы массива типа integer, будут занимать по 2 байта. А весь массив займет S^2 байта, где S – количество элементов в массиве.
В матрице для каждого элемента типа integer потребуется 2 байта памяти. Рассмотрим пример.
Matrix = array [1..4, 1..3] of integer ;
В данном случае необходимо 24 байт памяти.
Модель размещения массива M типа matrix в памяти.
Для любого элемента предоставляется две ячейки памяти, размещение осуществляется от первой строки до нижней, в порядке изменения индекса.
Между переменной и адресом ячейки устанавливается соответствие, однако, при объявлении матрицы программе известно только адрес начала массива, к остальным элементам адрес вычисляется по формуле:
Addres + SizeElemt * sum *( I -1)+ SizeElem *( J -1),
где Addres – местоположение первого элемента, выделенного для массива; I , J – индексы элемента в двумерном массиве; SizeElemt – размер элемента массива (например, 2 байта для элементов типа integer ); sum – количество элементов в строке.
SizeElemt * sum *( I -1)+ SizeElemt *( J -1) — смещение относительно начала массива.
Какой размер памяти выделяется для массива?
Чтобы программа работала нормально, компьютер выделят память сегментами по 64 Кбайт. Один из сегментов отводится для данных, которые обрабатываются программой. Для каждой переменной отводится свой сегмент. Например, если переменная состоит из массива, то он не сможет занимать места больше, чем 65536 байт. Естественно, кроме массива в сегменте могут находится и другие переменные, поэтому объем памяти вычисляется по формуле 65536- S , где S – размер памяти, ранее отведенные под другие переменные.
Рассмотрим пример, в котором:
Type myArray= array [1..50000] of integer;
С точки зрения синтаксиса запись верная, но компилятор выдаст ошибку об объявлении слишком длинного массива.
Можно без труда подсчитать количество элементов, которые допустимы по формуле: 65536/2 –1=32767. Однако, других переменных не должно быть. Матрицы обладают еще меньшими пределами индексов.
Решим задачу с двумерным массивом Паскаля.
Задача: Вычислить произведение ненулевых элементов матрицы.
Решение:
- Для начала нужно установить переменные: матрицу, состоящую из целочисленных элементов; P – произведение элементов, не равное 0; I , J – индексы массива; N , M – количество строк и столбцов в матрице.
- Входные данные N , M пусть вводятся с клавиатуры, а матрица зададим с помощью функции random ().
- Выходными параметром получим P (произведение).
- Выведем матрицу на экран, для проверки работы программы.
А теперь поговорим о процедурах.
Примечание! Тип массива должен быть определен заранее. Например:
Type Matrix=array [1..10, 1..10] of integer; . procedure primer (a: matrix); .
Для того чтобы вводимая матрица была передана в программу как результат следует воспользоваться процедурой vvod , В таком случае матрица будет передаваться по ссылке. В таком случае процедура выглядит следующее:
Procedure vvod ( var m : matrix );
Print – процедуры вывода на экран матрицы, которая передается по значению.
Procedure print ( m : matrix );
Для реализации вложенных циклов внутри процедуры нужно ввести счетчики – k и h . Алгоритм вывода матрицы на экран был описан выше, используем это описанием.
Итак, опишем ход выполнения программы.
- Ввод значений N и M ;
- Обращаемся к процедурам vvod ( a ) и print ( a ) для ввода и вывода матрицы соответственно, где а – матрица;
- Переменной, которая отвечает за произведение P, присвоим значение 1;
- Поочередно перебираем элементы матрицы с индексом 11 до элемента с индексом Каждый элемент матрицы должен удовлетворять условию: если a ij ? 0, то произведение P умножаем на элемент a ij ( P = P * a ij );
- Выводим на экран результат произведения ненулевых элементов матрицы – P
Program proizvedenie; Type Matrix=array [1..10, 1..10] of integer; Var a: matrix; n, m, i, j: byte; P: integer; Procedure vvod (var m: matrix); Var k , h : byte ; Begin For i :=1 to n do For j :=1 to m do M[i,j]:= random(10); End; Procedure print (m: matrix); Var k, h: byte; Begin For i:=1 to n do begin For j:=1 to m do Write (M[i, j]: 4); Writeln; end ; End ; Begin Writeln (‘Введите размерность матрицы:’); Readln(N, M); Vvod(a); Print(a); P:=1; For i:=1 to N do For j:=1 to M do If a[i, j]<>0 then p:=p*a[i, j]; Writeln ( p ); End .
Источник: gospodaretsva.com
Двумерные массивы в Pascal.
Двумерный массив представляет собой массив, в котором положение элементов определяется 2-мя индексами. Фактически, двумерный массив – это обычный (одномерный) массив, элементами которого являются другие одномерные массивы.
Поэтому двумерный массив можно задать следующим образом: b:array[1..n] of array[1..m] of integer.
Однако, подобная запись двумерного массива на практике используется нечасто. Наиболее предпочтительным является следующий вариант: b: array[1..n,1..m] of integer.
Схематично, двумерный массив можно представить в виде матрицы, где первый индекс [1..n] определяет количество строк, а второй индекс [1..m] определяет количество столбцов. Для примера возьмем массив b: array[1..7,1..6] of integer. Схематично его можно представить так:
Как видно, такой массив содержит 42 элемента (7?6). Для доступа к элементу массива необходимо указать номер строки и столбца, на пересечении которых этот элемент расположен. Например, на нашем рисунке элемент массива b[3,3] имеет значение 122.
Следующая программа записывает в каждый элемент массива случайное число и затем выводит все эти числа на экран.
program massiv10; uses crt; const N=5; M=4; var X:array [1..N, 1..M] of integer; I, J:integer; begin clrscr; randomize; for i:=1 to N do for j:=1 to M do x [I, J]:=random (100); for i:=1 to N do begin for j:=1 to M do write (‘ ‘,x[I,J]); writeln end; readln end.
В строке №3 и №4 укажем значение для константы «N» и «M».
В строке№5 запишем область двумерного массива, состоящего из N – строк и M – столбцов. Он записывается также как и одномерный массив, только в квадратных скобках указывается область хранения двумерного массива. Таким образом, наш массив будет состоять из 5 строк и 4 столбцов
В строке №6 записываем переменные, для хранения индексов строки и столбца.
Строка №9,10,11,12 – заполняем массив случайными числами (Все строки и столбцы заполнятся случайными числами). Как видно из программы, для того чтобы заполнить элементы двумерного массива различными значениями, необходимо использовать 2 цикла (один цикл вкладывается в другой). Во внешнем цикле счетчиком выступает индекс строки, во внутреннем цикле — индекс столбца. Внешний цикл выполнится один раз только когда внутренний цикл выполнится 4 раза. А так как внешний цикл должен выполниться 5 раз, то внутренний цикл за это время выполнится 20 раз, заполнив при этом все 20 элементов двумерного массива.
Строка №13-№17. Выводим значения всех элементов массива на экран. Причем, как только заполняются все ячейки одной строки массива, проиходит переход на другую строку, и следующая строка массива выводится на другой строке.
Источник: mojainformatika.ru