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

2 / 2 / 0

Регистрация: 21.04.2009

Сообщений: 23

1

Найти сумму элементов находящиеся над главной диагональю

22.04.2009, 23:03. Показов 18864. Ответов 3


Студворк — интернет-сервис помощи студентам

Дана матрица A(4,3). Найти сумму элементов находящиеся над главной диагональю.



1



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

22.04.2009, 23:03

3

.::.DIMA.::.

146 / 146 / 32

Регистрация: 26.10.2008

Сообщений: 782

23.04.2009, 00:53

2

Лучший ответ Сообщение было отмечено beethoven как решение

Решение

Совсем браузер не работает… Опять при нажатии кнопки ответить другой результат. Ладно…
В общем над главной диагональю это элементы a [i][j+1]. Теперь в цикле делай их сумму

C++
1
2
3
4
5
6
7
8
9
10
11
12
int a[4][3];
    int s = 0, i, j;
    for (i = 0; i < 4; i++)
        for (j = 0; j < 3; j++)
            cin >> a [i][j];
    for (i = 0; i < 4; i++)
        for (j = 0; j < 3; j++)
        {
            if (j == i+1)
                s += a[i][j];
        }
    cout << s;



0



1 / 1 / 1

Регистрация: 22.12.2016

Сообщений: 23

05.10.2019, 12:58

3

Цитата
Сообщение от .::.DIMA.::.
Посмотреть сообщение

if (j == i+1)

это неверное условие для отбора элементов выше главной диагонали, верное условие — if (j >= i+1)



0



7427 / 5021 / 2891

Регистрация: 18.12.2017

Сообщений: 15,694

05.10.2019, 13:19

4

Цитата
Сообщение от XPRO
Посмотреть сообщение

верное условие — if (j >= i+1)

зачем компилятору лишняя операция сложения ? if (i<j)



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

05.10.2019, 13:19

4

Необходимо вычислить сумму элементов матрицы A[N,N], находящихся над главной диагональю.

Мой код:

import random
s=0
i=0
k=1
N=int(input())
A=[[random.randrange(10) for i in range(N)] for j in range(N)]
for k in range(N):
    while i<N:
        while k<N:
            s+=A[i][k]
            k+=1
        i+=1
print(s)

Но, неверный вывод программа выдает. Подскажите как поступить?

  • python
  • массивы
  • матрицы

задан 26 ноя 2018 в 17:37

beheliton's user avatar

behelitonbeheliton

2792 золотых знака8 серебряных знаков18 бронзовых знаков

1 ответ

for row in range(N):
    for col in range(row + 1, N):
         s+=A[row][col]

beheliton's user avatar

beheliton

2792 золотых знака8 серебряных знаков18 бронзовых знаков

ответ дан 26 ноя 2018 в 17:44

MBo's user avatar

MBoMBo

47.9k1 золотой знак17 серебряных знаков40 бронзовых знаков

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

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

Просмотров 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
кон

const
  n=3;
Var
  a: Array[1..n,1..n] of Integer;
  i,j,s: Integer;
BEGIN
Writeln('Введите элементы матрицы: ');
for i := 1 to n do
    for j := 1 to n do
    begin
      write('a[', i, ',', j, ']=');
      readln(a[i, j])
      end;
Writeln('Матрица:');
For i:=1 to n do
begin
  For j:=1 to n do
    write(a[i,j]:4);
  Writeln;
end;
 
For i:=1 to n-1 do
  For j:=i+1 to n do
    s:=s+a[i,j];
  Writeln('Сумма = ',s);
Readln
END.

Содержание

  1. Двумерные массивы
  2. Главная и побочная диагонали матрицы
  3. Пример двумерного массива
  4. Заполнение и вывод на экран
  5. Сумма элементов двумерного массива
  6. Задачи с решением

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

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

  • i — порядковый номер строки
  • — порядковый номер столбца

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

двумерный массив паскаль

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

Главная и побочная диагонали матрицы

Большое количество задач на обработку связано с элементами главной и побочной диагонали. Они обладают особыми свойствами.

Посмотрите на рисунок ниже. Элементы главной диагонали располагаются в ячейках оранжевого цвета. Главный признак, по которому можно их идентифицировать — значения индексов одинаковы.

главная и побочная диагональ - двумерный массив

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

Пример двумерного массива

Заполнение и вывод на экран

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

План действий:

  • опишем массив, укажем все необходимые переменные;
  • заполним случайными значениями;
  • сделаем вывод на экран в виде таблицы.

Текст программы

var i,j:integer;
a: array [1..5,1..5]of integer;
begin
  {заполнение случайными числами}
for i:=1 to 5 do 
  for j:=1 to 5 do
      a[i,j]:=random(10);
 {вывод на экран} 
for i:=1 to 5 do 
  begin
  for j:=1 to 5 do
      write(a[i,j]:3);
      writeln;
  end;
end.

Второй вариант немного короче. Отличается от первого тем, что заполнение и вывод проходит в одном цикле. Можно использовать в качестве шаблона для решения однотипных задач на Паскаль.

const n=5; m=5;
var 
i,j:integer;
a: array [1..n,1..m] of integer;
begin
  {заполнение случайными числами и вывод на экран}
for i:=1 to n do 
  begin
  for j:=1 to m do 
    begin
      a[i,j]:=random(10);
      write(a[i,j]:3);
    end;
      writeln;
  end;
{здесь будет код обработки по условию задачи}
end.

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

двумерный массив паскаль

Результат работы программы

Обработка элементов по условию задачи будет различаться и записываться в продолжении указанного выше текста программы на Паскаль. После обработки следует код вывода результата работы программы.

Сумма элементов двумерного массива

Запишем код обработки элементов, который вычислит их сумму.

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

Код обработки и вывода результата. Его нужно добавить в текст программы на Паскаль, указанной выше.

s:=0;
  for i:=1 to 5 do 
  for j:=1 to 5 do 
      s:=s+a[i,j];
  write('Сумма элементов = ',s);

Задачи с решением

Задача 1. Вычислить сумму и количество положительных элементов целочисленного массива A[1..n,1..n], находящихся над главной диагональю.

Посмотреть решение

Решение: В этом примере размер матрицы задается через константу, что удобно использовать при отладке программы. Постоянные величины в Паскаль записывают перед разделом Var.

const n=4;
var i,j,s,k:integer;
a: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран} 
for i:=1 to n do 
  begin 
  for j:=1 to n do 
    begin a[i,j]:=random(10); 
    write(a[i,j]:3); 
    end; writeln; 
  end; 
  {код обработки по условию задачи} 
  s:=0;k:=0;
  for i:=1 to n do 
  begin 
  for j:=i+1 to n do 
    begin 
      s:=s+a[i,j];
      k:=k+1; 
    end;  
  end; 
  writeln('Сумма элементов = ',s);
  write('Количество элементов = ',k);
end.

Задача 2. Задана квадратная матрица. Получить транспонированную матрицу (перевернутую относительно главной диагонали).

Посмотреть решение

Решение:

const n=5;
var i,j:integer;
a,b: array [1..n,1..n]of integer; 
begin 
{заполнение случайными числами и вывод на экран}
writeln('Исходная матрица'); 
for i:=1 to n do 
  begin 
  for j:=1 to n do 
    begin a[i,j]:=random(10); 
    write(a[i,j]:3); 
    end; writeln; 
  end; 
  {код обработки по условию задачи} 
  for i:=1 to n do 
  for j:=1 to n do   
      b[i,j]:=a[j,i];
  writeln('Транспонированная матрица');
  for i:=1 to n do 
  begin 
  for j:=1 to n do 
    begin  
    write(b[i,j]:3); 
    end; writeln; 
  end;  
end.

Понравилась статья? Поделить с друзьями:
  • Синий экран смерти windows xp как исправить на компьютере через биос
  • Как найти максимум функции экстремум
  • Как составить угол потолочного плинтуса
  • Как найти зимой липу в лесу
  • Как найти тайник с ключами