С использованием матричных операций и функций 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

С использованием матричных операций и функций



n=input('Введите n=');

m=input('Введите m=');

for i=1:n

disp(sprintf('Введите эл. %d строки матрицы',i))

for j=1:m

B(i,j)=input('B(i,j)=');

end

end

C= max(abs(B));

disp(' Получен массив С: ')

disp(C)

 

Задача 41. Преобразование строки и столбца, где находится минимум матрицы

Условие задачи. Дана матрица А. Обнулить в ней элементы той строки и того столбца, где находится минимальный элемент матрицы. Известно, что в матрице имеется только один элемент с минимальным значением.

Исходными данными являются целочисленные количество строк N и столбцов M матрицы A и вещественные элементы этой матрицы. Результатом будет та же матрица А после требуемых преобразований.

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

Поиск минимума среди всех элементов матрицы отличается от поиска в каждой строке или в каждом столбце тем, что сначала в качестве исходного значения за эталон минимума Min берётся любой элемент, обычно элемент в левом верхнем углу, а затем каждый элемент матрицы (в любом порядке) сравнивается с эталоном. Обход матрицы при этом можно производить как по строкам, так и по столбцам, но в любом случае с помощью двух вложенных циклов. Если какой-либо элемент оказывается меньше эталона Min, то теперь в качестве эталона берётся этот меньший элемент. Для того, чтобы определить местоположение минимума, нужно запоминать ещё два значения: номер строки Pos_i и номер столбца Pos_j минимального элемента.

Порядок действий для определения искомых номеров строки и столбца минимума будет следующим. Сначала в качестве начального значения эталона возьмём элемент, находящийся в левом верхнем углу, иначе говоря элемент первой строки, первого столбца, Min = A[1,1], и запомним его номер строки и столбца: Pos_i = 1; Pos_j=1. Затем будем обходить все элементы матрицы построчно, для этого организуем вложенные циклы: внешний цикл – по строкам i=1, N, внутренний цикл – по столбцам j=1, M. При этом каждый элемент A[i,j] будем сравнивать с текущим значением Min, и если встретится меньший по значению элемент, то в Min занесём его, в Pos_i – его номер строки i, в Pos_j – его номер столбца j. В результате обхода матрицы местоположение минимума будет найдено.

Теперь останется заменить нулями элементы строки Pos_i и столбца Pos_j. Для прохода по строке Pos_i нужен цикл, изменяющий номера столбцов j=1,M, в нём каждому элементу A[Pos_i,j] будем присваивать ноль. Аналогично, для прохода по столбцу Pos_j нужен цикл, изменяющий номера строк i=1,N, в нём каждому элементу A[i,Pos_j] будем присваивать ноль. После преобразований полученную матрицу выведем на экран, используя вложенные циклы.

Структурированная запись алгоритма 41

1. Ввести размеры матрицы N, M и элементы матрицы А.

2. Задать начальные значения Min = A[1,1]; Pos_i = 1; Pos_j=1.

3. В цикле для i=1,N повторять

3.1. В цикле для j=1,M повторять

3.1.1. Проверять: если A[i,j]<Min, то

3.1.1.1.Min=A[i,j]

3.1.1.2.Pos_i=i; Pos_j=j

4. В цикле для j=1,M повторять

4.1. A[Pos_i,j]=0

5. В цикле для i=1,N повторять

5.1. A[i,Pos_j]=0

6. Вывести элементы матрицы А.

Схема алгоритма

Текст программы на языке Си

#include <stdio.h>

#include <math.h>

#define N 25

int main (void)

{

int n,m,i,j,pos_i,pos_j;

double a[N][N],min;

printf ("\nВведите n и m\n");

scanf ("%d%d", &n,&m);

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

{

printf ("Введите элементы %d строки\n",i);

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

    scanf ("%lf", &a[i][j]);

}

min=a[0][0];

pos_i=0; pos_j=0;

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

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

  if (a[i][j]<min)

  {

    min=a[i][j];

    pos_i=i;

    pos_j=j;

  }

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

a[pos_i][j]=0;

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

   a[i][pos_j]=0;

printf ("Полученная матрица\n");

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

{

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

    printf ("%3.0lf", a[i][j]);

printf("\n");

}

return 0;

}



Поделиться:


Последнее изменение этой страницы: 2021-04-12; просмотров: 101; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.140.198.173 (0.009 с.)