Как найти количество положительных элементов в матрице

Обозначения:
a[k,l] – матрица целых чисел; k – количество
строк матрицы; l – количество столбцов
матрицы; i,j – номера строк и столбцов
матрицы; с[k] – массив, элементы которого
есть количество положительных элементов
в столбцах матрицы a[k,l].

//
Program ex35;

#include<iostream.h>

#include<stdlib.h>

int
a[100][100];

int
c[100];

int
i,j,n,k,l;

main()

{

cout
<< “Введите количество строк матрицы
k =”;

cin
>> k;

cout
<< “Введите количество столбцов
матрицы l =”;

cin
>> l;

for
(i=0; i<k; i++)

for
(j=0; j<l; j++)

a[i][j]=rand()%10-5;

cout
<< “nИсходная
матрица
a[i,j]:n”;

for
(i=0; i<k; i++)

{

for(j=0;
j<l; j++)

cout
<< a[i][j] << ” “;

cout
<< “n”;

}

for
(j=0;j<l;j++)

{

c[j]=0;

for
(i=0;i<k;i++)

{

if
(a[i][j]>=0)

c[j]=c[j]+1;

}

}

cout
<< “nn Кол-во положительных элементов
в столбцах = “;

for
(j=0;j<l;j++)

cout
<< c[j] <<” “;

}

36.
Задана квадpатная
матpица
целых чисел a[k,k].
Поменять местами элементы главной и
обpатной диагонали.

Обозначения:
a[k,k] – матрица целых чисел; k – количество
строк и столбцов матрицы; i,j – номера
строк и столбцов матрицы; r – ячейка
обмена.

//Программа
№36

#include<iostream.h>

#include<stdlib.h>

int
a[100][100];

int
i,j,k,r;

main()

{

cout
<< “Введите количество строк матрицы
k=”;

cin
>> k;

for(i=0;
i<k; i++)

for(j=0;
j<k; j++)

a[i][j]=rand()%30;

cout
<< “nИсходная матрица a[i,j]:n”;

for
(i=0; i<k; i++)

{

for(j=0;
j<k; j++)

cout
<< a[i][j] << ” “;

cout
<< “n”;

}

j=k-1;

for(i=0;
i<k; i++)

{

r=a[i][j];

a[i][j]=a[i][i];

a[i][i]=r;

j–;

}

cout
<< “nРезультат:n”;

for
(i=0; i<k; i++)

{

for(j=0;
j<k; j++)

cout
<< a[i][j] << ” “;

cout
<< “n”;

}

return
0;

}

37.
Опpеделить максимальный элемент
матpицы.

Обозначения:
a[k,l] – матрица целых чисел; k – количество
строк матрицы; l – количество столбцов
матрицы a; i,j – номера строк и столбцов
матрицы; max- максимальный элемент матрицы.

//
Программа №37

//
Определить максимальный элемент матрицы.

//Обозначения:

//a[k,l]
– матрица целых чисел; k – количество
строк матрицы;

//l
– количество столбцов матрицы;

//i,j
– номера строк и столбцов матрицы;

//max
– максимальный элемнт матрицы;

#include<iostream.h>

#include<stdlib.h>

int
a[100][100];

int
k,l,i,j,max;

main()

{

cout
<< “Введите количество строк матрицы
k =”;

cin
>> k;

cout
<< “Введите количество столбцов
матрицы l =”;

cin
>> l;

for(i=0;
i<k; i++)

for(j=0;
j<l; j++)

a[i][j]=rand()%10-5;

cout
<< “nИсходная матрица a[i,j]:n”;

for
(i=0; i<k; i++)

{

for(j=0;
j<l; j++)

cout
<< a[i][j] << ” “;

cout
<< “n”;

}

cout
<< ” n “;

max=a[1][1];

for
(i=0;i<k;i++)

for
(j=0;j<l;j++)

if
(max<a[i][j]) max=a[i][j];

cout
<<“n”;

cout
<< ” Максимальный элемент матрицы
= ” << max
<< ” nn”;

return
0;

}

38.
Задана матpица целых чисел a[m,n]. Опpеделить
min элемент сpеди
a[i,j]
> 0.

Обозначения:
a[m,n] – матрица целых чисел; m – количество
строк матрицы; n – количество столбцов
матрицы; i,j – номера строк и столбцов
матрицы; b[k] – массив, элементы которого
равны положительным элементам матрицы
a[m,n]; k – количество элементов в массиве
b[k]; min – минимальный элемент среди
положительных элементов матрицы a[m,n].

//Программа
№38

#include<iostream.h>

#include<stdlib.h>

int
a[10][10];

int
b[100];

int
i,j,m,n,k,min;

main()

{

cout
<< “Введите количество строк матрицы
m=”;

cin
>> m;

cout
<< “Введите количество столбцов
матрицы n=”;

cin
>> n;

for(i=0;
i<m; i++)

for(j=0;
j<n; j++)

a[i][j]=rand()%100-50;

cout
<< “nИсходная матрица a[i,j]:n”;

for
(i=0; i<m; i++)

{

for(j=0;
j<n; j++)

cout
<< a[i][j] << ” “;

cout
<< “n”;

}

k=-1;

for(i=0;
i<m; i++)

for(j=0;
j<n; j++)

if(a[i][j]>0)

{

k++;

b[k]=a[i][j];

}

cout
<< “nРезультат:n”;

if(k!=-1)

{

cout
<< “nЭлементы
матрицы
a[i][j]>0: “;

for
(i=0; i<=k; i++)

cout
<< b[i] << ” “;

min=b[0];

for(i=1;
i<k; i++)

if(min>b[i])
min=b[i];

cout
<< “nmin=” << min;

}

else
cout << “na[i][j]>0 НЕТ!!!”;

cout
<< “nn”;

return
0;

}

Опишите алгоритм определения количества положит…

Задание:

Опишите на русском языке или на одном из языков программирования алгоритм определения количества положительных элементов квадратной матрицы, превышающих по величине среднее арифметическое всех элементов главной диагонали.

Решение:

В этой задаче нужно сначала найти среднее арифметическое всех элементов главной диагонали. Для этого требуется один простой (не вложенный!) цикл, потому что для элементов главной диагонали номер строки равен номеру столбца.
Пусть N (константа) – количество строк (и столбцов!) матрицы A. Введем вещественную переменную sred, в которой сначала подсчитаем сумму всех элементов главной диагонали. Введем целую переменную i, обозначающую номер строки. Запишем в sred начальное значение 0. В цикле изменяем i от 1 до N с шагом 1, добавляем к значению переменной sred значение элемента матрицы A[i,i]. После окончания цикла разделим sred на N (на главной диагонали всего N элементов), таким образом, в sred находится среднее значение элементов главной диагонали.
Теперь можно считать (только!) положительные элементы всей матрицы, которые больше sred. Вводим целочисленные переменные j (номер столбца) и count (счетчик «нужных» элементов) . В счетчик записываем начальное значение 0.
Организуем двойной цикл, перебирающий все комбинации (i,j) для i=1..N и j=1..N. В теле цикла проверяем элемент матрицы A[i,j]: если он больше нуля и больше sred, увеличиваем счетчик count на 1.
После окончания двойного цикла выводим значение count.
Программа может выглядеть так:

 
const N=5;
var A:array[1..N,1..N] of integer;
    i, j, count: integer;
    sred: real;
begin
  for i:=1 to N do   { ввод матрицы }   
    for j:=1 to N do readln(A[i,j]);
  sred := 0;          { находим сумму главной диагонали }
  for i:=1 to N do 
    sred := sred + A[i,i];
  sred := sred / N;  { находим среднее }
  count := 0;        { считаем нужные элементы } 
  for i:=1 to N do      
    for j:=1 to N do
      if (A[i,j] > 0) and (A[i,j] > sred) then
        count := count + 1;
  writeln(count)
end.
 

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

 
if sred < 0 then sred := 0;
 

а условный оператор изменить так:

 
if A[i,j] > sred then
  count := count + 1;
 

Во-вторых, можно немного более грамотно обработать условие A[i,j] > sred. Дело в том, что при делении в операторе

 
sred := sred / N;  { находим среднее }
 

может получиться вещественное число (с дробной частью). Вещественные числа (за редким исключением ) хранятся в памяти компьютера неточно, потому что в двоичном коде содержат (теоретически) бесконечное число разрядов. Поэтому лучше НЕ делить полученную сумму sred на N, а для проверки вместо условия A[i,j] > sred/N использовать равносильное ему A[i,j]*N > sred. Плюс в том, что в последнем случае все операции выполняются с целыми числами и ошибок из-за неточного представления дробных чисел в памяти гарантированно не будет. Однако, есть и минус: вместо одного деления (на всю программу) придется выполнять N2 умножений (для каждого элемента матрицы). Вот еще одна версия программы:

 
const N=5;
var A:array[1..N,1..N] of integer;
    i, j, count: integer;
    sred: real;
begin
  for i:=1 to N do   { ввод матрицы }   
    for j:=1 to N do readln(A[i,j]);
  sred := 0;          { находим сумму главной диагонали }
  for i:=1 to N do 
    sred := sred + A[i,i];
  count := 0;        { считаем нужные элементы } 
  if sred < 0 then sred := 0;
  for i:=1 to N do      
    for j:=1 to N do
      if A[i,j]*N > sred then
        count := count + 1;
  writeln(count)
end.
 

Оксана Лукьянчикова



Знаток

(388),
на голосовании



13 лет назад

Голосование за лучший ответ

И1

Профи

(802)


13 лет назад

делаешь условие если элемент положительный то ставишь счетчик и он считает

Похожие вопросы

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