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

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

Задача

В двумерном массиве случайных чисел [1..10,1..10] вычислить сумму элементов побочной диагонали.

(Побочная диагональ проходит из нижнего левого угла в верхний правый.)

Решить задачу двумя способами:
• Используя подпрограмму-функцию.
• Используя подпрограмму-процедуру.

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

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

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

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:

#include
#define N 10
int diagonal ( char c ) ;
int a [ N ] [ N ] ;

Читайте также:  Fraps не работает на windows 10

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 ( "
" ) ;
>
printf ( "Главная (1) или побочная (2): " ) ;
scanf ( "%c" , & ch ) ;
sum = diagonal ( ch ) ;
printf ( "%d
" , 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 ;
>

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
кон

Помогите задать условие "ниже побочной диагонали".

2 ответа 2

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

Итак, если бы это была квадратная матрица размером size x size, и нумерация с нуля, то побочная диагональ это (схематически)

Читайте также:  Sql вставка строки в таблицу

А с диагональню ниже, будет так (заметье, что размер этой диагонали на 1 меньше)

Ссылка на основную публикацию
Стоит ли учиться на нефтяника
Добыча газа и нефти — очень популярная сфера в России. Именно поэтому большое количество выпускников стремится поступать на специальность «Нефтегазовое...
Сони плейстейшен нетворк вход
Игры по сети, развлечения, друзья, покупки и многое другое – ваше сетевое приключение начинается в PSN. Подключитесь к нашему сетевому...
Сони f3112 xperia xa
Недорогой смартфон компании Sony (22 990 рублей за Dual версию) с интересным дизайном, LTE, двумя отдельными слотами для SIM-карт, слотом...
Стойка для аудио аппаратуры своими руками
Решил создать данную тему,т.к. думаю форумчанам будет интересно почитать, а кому то и поделиться личным опытом, по изготовлению своими руками...
Adblock detector