Как найти сумму чисел главной диагонали

Составим квадратную матрицу из случайных чисел и запишем в таблицу Эксель начиная с ячейки C3.

Если размер матрицы 5х5 то вся матрица займёт диапазон C3:G7

Для наглядности можно выделить ячейки диагонали см Как в таблице Excel выделить диагональ другим цветом?

Придется воспользоваться формулой массива с выбором из всего диапазана ячеек у которых номер строки равен номеру столбца

Для нашей таблицы

номер строки можно вычислить по формуле =СТРОКА()-СТРОКА(С3)

номер столбца можно вычислить по формуле =СТООЛБЕЦ()-СТООЛБЕЦ(С3)

Суммируемое выражение:

ЕСЛИ( (СТРОКА(C3:G7) – СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) – СТОЛБЕЦ(C3)); C3:G7;0)

Общая формула массива для суммы элементов главной диагонали таблицы для диапазона C3:C7 выглядит так:

=СУММ( ЕСЛИ( (СТРОКА(C3:G7) – СТРОКА(C3)) = (СТОЛБЕЦ(C3:G7) – СТОЛБЕЦ(C3)); C3:G7;0))

ввод ограничиваем одновременным нажатием клавиш CTRL+SHIFT+ENTER (фигурные скобки появятся сами):

Нахождение суммы элементов главной диагонали матрицы

Для нахождения суммы элементов главной диагонали матрицы (след матрицы) выберите нужный размер исходной матрицы и заполните её элементы.

Другие онлайн калькуляторы

  • Транспонирование матрицы
  • Нахождение союзной матрицы
  • Нахождение обратной матрицы
  • Вычисление определителя матрицы
  • Приведение матрицы к треугольному виду
  • Возведение матрицы в степень
  • Вычисление ранга матрицы
  • Сложение матриц
  • Вычитание матриц
  • Умножение матриц
  • Умножение матрицы на число

Описание онлайн калькулятора

С помощью данного онлайн калькулятора Вы сможете найти сумму элементов главной диагонали матрицы (след матрицы) или проверить правильность своего решения.

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

Icon info

Описание работы онлайн калькулятора

  • Минимальный размер матрицы 2х2;
  • Максимальный размер матрицы 10х10;
  • В поля ввода значений элементов матриц, можно вводить следующие типы чисел:
    • Натуральные (0; 3; 9);
    • Отрицательные (-43);
    • Десятичные (1,5 или 1.5);
    • Дробные (2/3).
  • Максимальное количество вводимых символов 7;
  • При нажатии кнопки “Вывести результат
    выводится результат требуемой операции.

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

Перейти к содержанию

Вычислить сумму элементов главной или побочной диагонали матрицы

Просмотров 9.6к. Обновлено 15 октября 2021

Дана квадратная матрица. Вычислить сумму элементов главной или побочной диагонали в зависимости от выбора пользователя. Сумма элементов любой диагонали должна вычисляться в одной и той же функции.

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

Если была выбрана сумма главной диагонали, то при определении ее элементов второй индекс матрицы будет равен первому и начинаться с первого элемента. В случае побочной диагонали второй индекс будет начинаться с последнего элемента и заканчиваться первым. Поэтому в теле функции перед проходом по матрице второму индексу присваивается либо 1 (или 0), либо размерность квадратной матрицы (N или N-1). При проходе второй индекс либо увеличивается на каждой итерации, либо уменьшается.

Pascal


const N = 10;
type
type_arr = array[1..N, 1..N] of byte;

var
arr: type_arr;
i, j: byte;
sum: byte;
ch: char;

function diagonal (var arr1: type_arr; c: char): byte;
var
sum1: byte;
i, j: byte;
begin
sum1 := 0;
if c = '1' then j := 1
else j:= N;
for i:=1 to N do begin
sum1 := sum1 + arr1[i][j];
if c = '1' then j := j + 1
else j := j-1;
end;
diagonal := sum1;
end;

begin
randomize;
for i:=1 to N do begin
for j:=1 to N do begin
arr[i,j] := random(10);
write(arr[i,j]:4);
end;
writeln;
end;
write('Главная (1) или побочная (2): ');
readln(ch);
if (ch = '1') or (ch = '2') then begin
sum := diagonal(arr, ch);
writeln(sum);
end;
end.



Пример(ы) выполнения программы на языке Pascal:

0 2 0 4 8 0 4 1 5 1
1 7 7 0 1 7 8 4 7 7
1 0 7 4 6 5 0 6 4 7
1 5 3 3 0 4 6 7 8 0
1 7 3 8 1 6 9 4 4 7
8 5 7 7 1 7 8 8 8 4
2 0 1 3 1 5 2 0 0 8
4 8 3 7 5 6 5 1 3 9
9 0 9 2 1 0 3 6 1 3
8 3 7 5 8 8 9 5 1 1
Главная (1) или побочная (2): 2
41

Язык Си


#include < stdio.h>
#define N 10
int diagonal(char c);
int a[N][N];

main() {
int i, j, sum;
char ch;
srand(time(NULL));
for (i=0; i< N; i++) {
for (j=0; j< N; j++) {
a[i][j] = rand() % 10;
printf("%3d", a[i][j]);
}
printf("n");
}
printf("Главная (1) или побочная (2): ");
scanf("%c", &ch);
sum = diagonal(ch);
printf("%dn", sum);
}

int diagonal(char c) {
int s, i, j;
s = 0;
if (c == '1')
for (i=0; i< N; i++)
s += a[i][i];
else
for (i=0, j=N-1; i< N; i++,j--)
s += a[i][j];
return s;
}

Python

сумма элементов главной диагонали матрицы python


def diagonal(l,c):
s = 0
i = 0
while i < N:
if c == '1':
s += l[i][i]
else:
s += l[i][N-i-1]
i += 1
return s

from random import random
N = 10
a = []
for i in range(N):
b = []
for j in range(N):
n = int(random()*10)
b.append(n)
print("%3d" % n, end='')
a.append(b)
print()

ch = input("Главная (1) или побочная (2): ")
if ch == '1' or ch == '2':
summa = diagonal(a,ch)
print(summa)

КуМир


цел N = 7
цел таб a[1:N,1:N]
алг
нач
цел i, j, sum
сим ch
нц для i от 1 до N
нц для j от 1 до N
a[i,j] := int(rand(0,10))
вывод a[i,j], " "
кц
вывод нс
кц
вывод "Главная (г) или побочная (п): "
ввод ch
если ch = "г" или ch = "п" то
sum := diag(ch)
вывод sum
все
кон

алг цел diag(сим c)
нач
цел s, i, j
s := 0
нц для i от 1 до N
если c = "г" то
s := s + a[i,i]
иначе
s := s + a[i,N-i+1]
все
кц
знач := s
кон

Содержание

  1. Примеры алгоритмов обработки матрицами
  2. Найти сумму элементов главной диагонали матрицы
  3. Блок схема суммы главной диагонали матрицы

Примеры алгоритмов обработки матрицами

Алгоритмы обработки матриц

Матрица— это двумерный массив, каждый элемент которого имеет два индекса: номер строки — i; номер столбца — j. Поэтому для работы с элементами матрицы необходимо использовать два цикла. Если значениями параметра первого цикла будут номера строк матрицы, то значениями параметра второго — столбцы (или наоборот). Обработка матрицы заключается в том, что вначале поочередно рассматриваются элементы первой строки (столбца), затем второй и т.д. до последней. Рассмотрим основные операции, выполняемые над матрицами при решении задач.

Алгоритм ввода-вывода матриц

Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Блок-схема ввода элементов матрицы изображена на рис. 4.1. Вывод матрицы организуется аналогично вводу.

Рассмотрим несколько задач обработки матриц. Для их решения напомним читателю некоторые свойства матриц (рис. 4.2):

  • если номер строки элемента совпадает с номером столбца (i = j), это означает что элемент лежит на главной диагонали матрицы;
  • если номер строки превышает номер столбца (i > j), то элемент находится ниже главной диагонали;
  • если номер столбца больше номера строки (i n.

Примеры алгоритмов обработки матрицами

ПРИМЕР 4.1. Найти сумму элементов матрицы, лежащих выше главной диагонали (рис 4.3).

Рис. 4.3. Рисунок к условию задачи из примера 4.1

Алгоритм решения данной задачи (рис. 4.4) построен следующим образом: обнуляется ячейка для накапливания суммы (переменная S). Затем с помощью двух циклов (первый по строкам, второй по столбцам) просматривается каждый элемент матрицы, но суммирование происходит только в том случае если, этот элемент находится выше главной диагонали, то есть выполняется свойство i

ПРИМЕР 4.2. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях. Напомним, что в квадратной матрице число строк равно числу столбцов.

Прежде чем преступить к решению задачи рассмотрим рисунок 4.6, на котором изображена схема квадратных матриц различной размерности. Из условия задачи понятно, что не нужно рассматривать все элементы заданной матрицы. Достаточно просмотреть первую и последнюю строки, первый и последний столбцы, а так же диагонали. Все эти элементы отмечены на схеме, причем черным цветом выделены элементы, обращение к которым может произойти дважды. Например, элемент с номером (1,1) принадлежит как к первой строке, так и к первому столбцу, а элемент с номером (N,N) находится в последней строке и последнем столбце одновременно. Кроме того, если N — число нечетное (на рисунке 4.6 эта матрица расположена слева), то существует элемент с номером (N/2+1, N/2+1), который находится на пересечении главной и побочной диагоналей. При нечетном значении N (матрица справа на рис. 4.6) диагонали не пересекаются.

Рис. 4.6. Рисунок к условию задачи из примера 4.2

Итак, разобрав подробно постановку задачи, рассмотрим алгоритм ее решения. Для обращения к элементам главной диагонали вспомним, что номера строк этих элементов всегда равны номерам столбцов. Поэтому, если параметр i изменяется циклически от 1 до N, то Ai,i — элемент главной диагонали. Воспользовавшись свойством, характерным для элементов побочной диагонали получим: i+j-1 = n > j = n-i+1, следовательно, для i=1,2,…,n элемент Аi,n-i+1 — элемент побочной диагонали. Элементы, находящиеся по периметру матрицы записываются следующим образом: А1,i — первая строка, АN,i — последняя строка и соответственно Аi,1 — первый столбец, Аi,N — последний столбец.

Блок-схема описанного алгоритма изображена на рис. 4.7. В блоке 1 организуется цикл для обращения к диагональным элементам матрицы. Причем в блоках 2-3 подсчитывается количество положительных элементов на главной диагонали, а в блоках 5-6 на побочной. Цикл в блоке 6 задает изменение параметра i от 2 до N-1. Это необходимо для того, чтобы не обращать к элементам, которые уже были рассмотрены: A11, A1N, AN,1 и AN,N. Блоки 7-8 подсчитывают положительные элементы в первой строке, 9 и 10 — в последней строке, 11 и 12 — в первом столбце, а 13 и 14 в последнем. Блок 15 проверяет, не был ли элемент, находящийся на пересечении диагоналей, подсчитан дважды. Напомним, что это могло произойти только в том случае, если N — нечетное число и этот элемент был положительным. Эти условия и проверяются в блоке 16, который уменьшает вычисленное количество положительных элементов на единицу.

Рис. 4.7. Блок-схема к примеру 4.2

ПРИМЕР 4.3. Проверить, является ли заданная квадратная матрица единичной. Единичной называют матрицу, у которой элементы главной диагонали — единицы, а все остальные — нули.

Решать задачу будем так. Предположим, что матрица единичная (FL=ИСТИНА) и попытаемся доказать обратное. Если окажется, что хотя бы один диагональный элемент не равен единице или любой из элементов вне диагонали не равен нулю, то матрица единичной не является (FL=ЛОЖЬ). Воспользовавшись логическими операциями все эти условия можно соединить в одно и составить блок-схему (рис. 4.8).

Рис. 4.8. Блок-схема к примеру 4.3

ПРИМЕР 4.4. Преобразовать исходную матрицу так, чтобы первый элемент каждой строки был заменен средним арифметическим элементов этой строки.

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

ПРИМЕР 4.5. Задана матрица An, m. Сформировать вектор Pm, в который записать номера строк максимальных элементов каждого столбца.

Алгоритм решения этой задачи следующий: для каждого столбца матрицы находим максимальный элемент и его номер, номер максимального элемента j-го столбца матрицы записываем в j-й элемент массива P. Блок-схема алгоритма приведена на рис. 4.10.

ПРИМЕР 4.6. Написать программу умножения двух матриц An,m и Bm,l.

Например, необходимо перемножить две матрицы

Воспользовавшись правилом «строка на столбец», получим матрицу:

В общем виде формула для нахождения элемента Ci,j матрицы имеет вид:

где i = 1,Nи j = 1,L.

Обратите внимание, что проводить операцию умножения можно только в том случае, если количество строк левой матрицы совпадает с количеством столбцов правой. Кроме того, A >

Источник

Найти сумму элементов главной диагонали матрицы

Дано довимирний массив 3×3. Найти сумму элементов главной диагонали.

Найти сумму элементов главной диагонали матрицы
Ввести матрицу B (n, n) целого типа. Найти сумму элементов главной диагонали. Заменить ею элементы.

Найти сумму элементов главной диагонали матрицы
помогите с ошибками, пожалуйста. program pr7; const n = 3; m = 3; var MAS:array of.

Найти сумму элементов главной диагонали матрицы
Помогите пожалуйста с 2 задачами. Задача 1: а) Найти сумму элементов главной диагонали массива.

Найти сумму элементов главной диагонали матрицы
дана квадратная матрица А порядка М. найти сумму элементов её главной диагонали, то есть диагонали.

Найти сумму элементов главной диагонали матрицы
В матрице состоящей из целочисленных элементов, найти сумму элементов главной диагонали

Найти сумму элементов главной диагонали матрицы
Дан двумерный массив n*m. Найти сумму элементов главной диагонали при n=m.

Найти сумму элементов главной диагонали матрицы
1. В матрице А(8,8) найти сумму элементов главной диагонали.

Источник

Блок схема суммы главной диагонали матрицы

3.1 . [Pascal | C | Basic] Дана матрица A(N, M) . Найдите её наибольший элемент и номера строки и столбца, на пересечении которых он находится.

3.2 . [Pascal | C | Basic] В каждой строке заданной матрицы A(N, M) вычислите сумму, количество и среднее арифметическое положительных элементов.

3.3 . [Pascal | C | Basic] Для заданной целочисленной матрицы A(N, M) определите, является ли сумма её элементов чётным числом, и выведите на печать соответствующий текст.

3.4 . [Pascal | C | Basic] Дана матрица A(N, M) . Найдите количество элементов этой матрицы, больших среднего арифметического всех её элементов.

3.5 . [Pascal | C | Basic] Дана целочисленная матрица A(N, M) . Вычислите сумму и произведение тех её элементов, которые при делении на два дают нечётное число.

3.6 . [Pascal | C | Basic] В заданной матрице A(N, M) поменяйте местами столбцы с номерами P и Q .

3.7 . [Pascal | C | Basic] Дана матрица A(N, M) . Вычислите вектор X(M) , где значение X j равно сумме положительных элементов j -го столбца матрицы A .

3.8 . [Pascal | C | Basic] Дана матрица A(N, M) . Получите вектор X(M) , равный P -й строке матрицы, и вектор Y(N) , равный Q -му столбцу матрицы.

3.9 . [Pascal | C | Basic] Дана матрица A(N, M) . Поменяйте местами её наибольший и наименьший элементы.

3.10 . [Pascal | C | Basic] По заданному n постройте матрицы размером ( n,n ) вида

а) 1 0 . 0
0 1 . 0
. . . .
0 0 . 1
б) n n-1 n-2 . 1
0 n n-1 . 2
. . . . .
0 0 0 . n
в) 0 0 . 0 1
0 0 . 1 2
. . . . .
1 2 . n-1 n

3.11 . [Pascal | C | Basic] Даны две целочисленные матрицы A(N, M) и B(N, M) . Подсчитате (в отдельности) количество тех пар , для которых: а) a i j i j ; б) a i j = b i j ; в) a i j > b i j .

3.12 . [Pascal | C | Basic] Дана матрица A(N, N) . Перепишите элементы её главной диагонали в одномерный массив Y(N) и разделите их на максимальный элемент главной диагонали.

3.13 . [Pascal | C | Basic] Дана матрица A(N, M) . Получите Y = X 1 . X N + X 2 . X N-1 + . + X N . X 1 , где X i — наибольший элемент в строке с номером i матрицы A .

3.14 . [Pascal | C | Basic] Постройте матрицу A(N, N) , элементы которой определяются равенствами a i j = i + 2 . j , а также найдите произведение чётных элементов этой матрицы, удовлетворяющих условию a i j (0 .

3.15 . [Pascal | C | Basic] Найдите наибольший элемент побочной диагонали заданной матрицы A(N, N) и выведите на печать всю строку, в которой он находится.

3.16 . [Pascal | C | Basic] Дана целочисленная матрица A(N, M) . Вычислите сумму и произведение нечётных отрицательных элементов матрицы, удовлетворяющих условию | a i j | .

3.17 . [Pascal | C | Basic] Для заданной матрицы А(N, N) найдите:
а) сумму всех элементов;
б) сумму элементов главной диагонали;
в) значения наибольшего и наименьшего из элементов главной диагонали.

3.18 . [Pascal | C | Basic] По трём заданным матрицам А(N, N) , В(N, N) и С(N, N) постройте матрицу Х того же размера, каждый элемент которой вычисляется по формуле x i j = max < a i j , b i j , c i j >.

3.19 . [Pascal | C | Basic] Дана матрица А(N, N) и целое P . Преобразуйте матрицу по правилу: строку с номером P сделайте столбцом с номером P , а столбец с номером P сделайте строкой с номером P .

3.20 . [Pascal | C | Basic] Для заданной матрицы A(N, N) найдите сумму элементов, расположенных в строках с отрицательным элементом на главной диагонали.

3.21 . [Pascal | C | Basic] Дана матрица A(N, M) . Определите:
а) число ненулевых элементов в каждой строке матрицы;
б) общее число ненулевых элементов в матрице;
в) отношение числа ненулевых элементов в каждой строке матрицы к общему числу ненулевых элементов в матрице.

3.22 . [Pascal | C | Basic] Вычислите матрицу С(N, N) , являющуюся суммой матриц А(N, N) и В(N, N) . Матрица А задана, а элементы матрицы B вычисляются по формуле

3.23 . [Pascal | C | Basic] Из заданной матрицы A(N, M) удалите строку с номером K и столбцы с номерами P и Q . Полученную матрицу уплотните.

3.24 . [Pascal | C | Basic] В заданном массиве X(N, M) все числа различны. В каждой строке выбирается минимальный элемент, затем среди этих чисел выбирается максимальное. Напечатайте номер строки массива Х , в которой расположено выбранное число.

3.25 . [Pascal | C | Basic] В заданном массиве A(N, M) переставьте строки так, чтобы суммы их элементов возрастали.

3.26 . [Pascal | C | Basic] В заданном массиве A(N, N) вычислите две суммы элементов, расположенных выше и ниже побочной диагонали.

3.27 . [Pascal | C | Basic] Дана матрица A(N, M) . Переставляя её строки и столбцы, добейтесь того, чтобы наибольший элемент (один из них) оказался в верхнем левом углу.

3.28 . [Pascal | C | Basic] Расстояние между двумя множествами точек — это расстояние между наиболее близко расположенными точками этих множеств. Найдите расстояние между двумя заданными множествами точек на плоскости.

3.29 . [Pascal | C | Basic] В заданном множестве точек на плоскости найдите пару точек с максимальным расстоянием между ними.

3.30 . [Pascal | C | Basic] Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым местом.

3.31 . [Pascal | C | Basic] На основе сведений о ежедневном пробеге на тренировке спортсменов команды рассчитате среднесуточный и общий пробег каждого спортсмена за 20 дней.

3.32 . [Pascal | C | Basic] Известен расход по N видам горючего в каждом из M автохозяйств. Определите для каждого хозяйства вид горючего с наибольшим и с наименьшим расходом.

3.33 . [Pascal | C | Basic] На основе сведений об отметках учеников класса в последней четверти
а) вычислите средние баллы по каждому предмету;
б) определите группу из пяти лучших учеников;
в) определите группу из пяти самых слабых учеников.

3.34 . [Pascal | C | Basic] Заданы запасы по N видам топлива в каждом из М районов города и нормы минимально допустимого запаса по каждому виду топлива. Определите:
а) запасы каждого вида топлива на все районы;
б) запасы всех видов топлива для каждого района;
в) в каких районах запас того или иного вида топлива меньше минимально допустимого и каких видов топлива запасено недостаточно в каждом районе.

3.35 . [Pascal | C | Basic] Последовательно (в лексикографическом порядке) напечатайте всевозможные перестановки целых чисел 1, 2, . n. Значение n задано.

3.36* . [Pascal | C | Basic] Напечатать элементы заданной матрицы А(N, N) в следующем порядке:

3.37* . [Pascal | C | Basic] Дана матрица A(N, N) , где N — нечётное число. Вычислите сумму её элементов из заштрихованной области.

3.38 . [Pascal | C | Basic] Шестизначный номер автобусного билета называют «счастливым», если равны суммы его первых трёх и последних трёх цифр. Подсчитате количество «счастливых» билетов.

3.39 . [Pascal | C | Basic] Дана последовательность целых чисел a 1 , a 2 , . a m . Постройте на ее основе новую последовательность, содержащую только те числа, которые в исходную последоватеьность входят по одному разу.

3.40 . [Pascal | C | Basic] Даны два множества целых чисел: a 1 , a 2 , . a n и b 1 , b 2 , . b m . Среди a 1 , a 2 , . a n нет повторяющихся чисел, нет их и среди b 1 , b 2 , . b m . Постройте:
а) пересечение и объединение этих множеств;
б) множество, содержащее все члены множества b 1 , b 2 , . b m , которые не входят в множество a 1 , a 2 , . a n .

3.41 . [Pascal | C | Basic] Вычислите P = 1 . 2 + 2 . 3 . 4 + 3 . 4 . 5 . 6 + . + N . (N+1) . . . 2N .

3.42 . [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Подсчитайте, сколько в ней содержится квадpатов, состоящих из единиц, со стоpоной из двух элементов таблицы и pазвеpнутых по отношению к таблице на 45 гpадусов.

3.43 . [Pascal | C | Basic] Дана квадpатная таблица А(N, N), элементами котоpой являются нули и единицы. Не проверяя значений элементов таблицы, замените каждый из нулей на единицу, а каждую из единиц — на ноль.

3.44 . [Pascal | C | Basic] Имеется N партий микросхем одного вида. Из каждой партии для контроля отобрали M микросхем. Тестовый контроль определил годность или негодность каждой микросхемы. Для того, чтобы вся партия была забракована, достаточно обнаружить в этих M выбранных микросхемах K негодных. По данным тестового контроля определите количество негодных микросхем в каждой партии и число забракованных партий.

3.45 . [Pascal | C | Basic] Числом Армстронга называется целое n-значное число, сумма n-х степеней цифр которого равна самому этому числу. Например, числом Армстронга является число 407, так как 407 = 4 3 + 0 3 + 7 3 . Найдите все числа Армстронга для заданного n

Источник

Тем, кто знакомым с математическими матрицами, будет не трудно освоить и двумерные массивы в Pascal. Матрица – это математический объект, представляющий собой прямоугольную таблицу. Таблица состоит из элементов, которые находятся на пересечении строк и столбцов, определяющих их, то есть i-ая строка и j-ый столбец задают адрес k-ому элементу матрицы (kij). Двумерные массивы абсолютно аналогичны математическим матрицам.

В отличие от одномерных массивов, двумерные характеризуются в программе парой индексов, один из которых соответствует номеру строки, другой – столбца:

Mas[m, n], где Mas – имя массива, n – номер строки, а m – номер столбца.

Описать матрицу в программе можно несколькими способами:

1) В разделе описания переменных:

Var Mas: Array[1..n, 1..m] of <тип элементов>;

2) При помощи одномерного массива, элементами которого являются одномерные массивы.
Пример:

Const
n = 5; m = 10;
Type
Arr1 = Array[1..m] of <тип элементов >;
Arr2 = Array[1..n] of arr1;
Var Mas: arr2;

Переменная 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.

Количество элементов в массиве (его размерность) можно узнать, умножив количество строк на количество столбцов.

Сумма всех элементов квадратной матрицы:

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<=j then 
      sum:=sum+x[i,j];

writeln('Сумма=',sum);

Здесь также можно не просматривать весь массив, а брать только нужные элементы:

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);

Если надо посчитать сумму элемсентов ниже побочной диагонали и на ней, то в предыдущем примере, при просмотре всего массива в предыдущем примере надо заменить знак отношения > на >=, а при просмотре толко нужных элементов применить такой код:

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]); 

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