Merdok68 0 / 0 / 0 Регистрация: 16.02.2015 Сообщений: 1 |
||||
1 |
||||
Сумма элементов выше побочной диагонали матрицы16.02.2015, 17:45. Показов 16838. Ответов 3 Метки нет (Все метки)
Ребят такая проблема.
0 |
zss Модератор 13104 / 10376 / 6207 Регистрация: 18.12.2011 Сообщений: 27,754 |
||||
16.02.2015, 18:52 |
2 |
|||
19 строка
0 |
16 / 3 / 2 Регистрация: 24.10.2018 Сообщений: 132 |
|
23.10.2019, 09:19 |
3 |
Вбей матрицу 5 на 5 и посмотри.В 3 на 3 все работает, а вот 5 на 5 хрень.
0 |
Yetty 7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
||||
23.10.2019, 11:48 |
4 |
|||
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.10.2019, 11:48 |
Помогаю со студенческими работами здесь Найти max среди элементов матрицы, лежащих ниже побочной диагонали, и min среди элементов выше главной диагонали Найти сумму элементов матрицы выше побочной диагонали Найти произведение минимальных элементов расположенных выше побочной диагонали матрицы Найти сумму положительных элементов матрицы, стоящих выше побочной диагонали Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 4 |
Формулировка задачи:
Задан двухмерный массив целых чисел А размером М на N. Найти сумму элементов, расположенных выше побочной диагонали.
дякую
Код к задаче: «Найти сумму элементов матрицы, расположенных выше побочной диагонали»
textual
Листинг программы
var A: array[1..25, 1..25] of integer; i, j, N, S: integer; begin write(' N = '); readln(N); writeln; S := 0; randomize; for i := 1 to N do begin for j := 1 to N do begin a[i, j] := -100 + random(200); write(a[i, j]:4); { У элементов выше побочной диагонали сумма индексов меньше N + 1: } if i + j < N + 1 then S := S + a[i, j] end; writeln; end; writeln; write('Сумма элементов выше побочной диагонали: ', S) end.
» 2015 » Апрель » 2 » сумма элементов матрицы выше и ниже побочной диагонали
08:02 сумма элементов матрицы выше и ниже побочной диагонали |
#include <iostream> // выделение памяти // заполнение матрицы случайными числами // поиск суммы элементов над и под побочной диагональю //Освобождение памяти system(«pause»); |
Просмотров: 3460 | | Рейтинг: 3.0/1 |
Тем, кто знакомым с математическими матрицами, будет не трудно освоить и двумерные массивы в 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]);
program pr;
var
a:array[1..4,1..4] of integer;
i,k,sum,j:integer;
begin
writeln(‘Ввод значений матрицы(горизонтально по рядам)’);
for i:=1 to 4 do
begin
for k:=1 to 4 do
begin
readln(a[i, k]);
end;
end;
writeln(‘получившаяся матрица:’);
for i:=1 to 4 do
begin
for k:=1 to 4 do
begin
write(a[i, k]);
end;
writeln();
end;
sum:=0;
j:=4;
for i:=1 to 4 do
begin
for k:=1 to 4 do
begin
if k<j then sum:=sum+a[i,k];
end;
j:=j-1;
end;
writeln(‘сумма: ‘,sum);
end.