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

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

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

Если была выбрана сумма главной диагонали, то при определении ее элементов второй индекс матрицы будет равен первому и начинаться с первого элемента. В случае побочной диагонали второй индекс будет начинаться с последнего элемента и заканчиваться первым. Поэтому в теле функции перед проходом по матрице второму индексу присваивается либо 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("%d\n", 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
кон

Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
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("%d\n", 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
кон