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


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



ЗНАЕТЕ ЛИ ВЫ?

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



n=5;

m=6;

disp('Введите эл. матрицы');

for i=1:n

for j=1:m

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

end

end

sr=mean(a');

disp('Среднее арифм. каждой строки:');

disp(sprintf('%5.2f ', sr))

 

Задача 40. Поиск максимального по модулю элемента в столбцах матрицы

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

Поскольку в условии данной задачи ничего не сказано о размерах матрицы, то число её строк N и столбцов M будут целочисленными исходными данными, которые вводятся пользователем в процессе выполнения программы, далее вводятся элементы матрицы B (вещественные числа).

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

Поиск максимального по модулю элемента в одном столбце с номером j выполняется так же, как в одномерном массиве. Для этого сначала в специально выделенную для максимума переменную MAX помещают модуль первого элемента столбца B[1,j]. Далее все остальные элементы этого столбца, взятые по модулю, сравнивают с текущим значением переменной MAX (для перемещения по остальным элементам столбца изменяют i от 2 до N), и, если встречается большее значение, то его помещают в переменную MAX. По окончании всех сравнений в переменной MAX останется значение самого большого по модулю элемента столбца, и его надо поместить в очередной элемент массива С. Его номер, очевидно, должен совпадать с номером столбца матрицы, в котором осуществлялся поиск максимума. Описанные выше действия должны повторяться в цикле для каждого столбца матрицы В, в результате чего будут получены все элементы массива С.

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

1. Ввести число строк и столбцов N и M и элементы матрицы В.

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

2.1. Присвоить начальное значение MAX =abs (B[1,j])

2.2. В цикле для i =2, N повторять:

2.2.1. Выполнять сравнение abs (B[i,j])>MAX. Если условие выполняется, то присвоить MAX = abs (B[i,j]).

2.3. Занести MAX в новый массив С[ j ]= MAX.

3. Вывести элементы массива С.  

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

 

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

#include <stdio.h>

#include <math.h>

#define N 25

int main (void)

{

int n,m,i,j;

double b[N][N],c[N],max;

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", &b[i][j]);

}

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

{

max=fabs(b[0][j]);

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

    if (fabs(b[i][j])>max)

      max=fabs(b[i][j]);

c[j]=max;

}

printf ("Получен массив С: \n");

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

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

return 0;

}

Текст программы на языке Паскаль

Program Pr_40;

Var

B: array [1..20, 1..20] of real;

C: array [1..20] of real;

N, M, i, j: integer;

MAX: real;

begin

writeln(' Введите размеры матрицы');

readln(N,M);

for i:=1 to N do

begin

writeln('Введите элементы строки',i);

for j:=1 to M do

    read(B[i,j]);

end;

for j:=1 to M do

begin

MAX:=abs(B[1,j]);

for i:=2 to N do

    if abs(B[i,j])>MAX then

       MAX:= abs(B[i,j]);

C[j]:=MAX

end;

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

for j:=1 to M do write(C[j]:6:1);

end.

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

Program Pr_40

Implicit none

real, allocatable:: B(:,:), C(:)

integer N, M, i, j

real MAX

print *, ' Введите размеры матрицы'

read *, N,M

allocate(B(N,M))

allocate(C(M))

do i=1, N

print *, 'Введите элементы ',i,' строки'

read *, (B(i,j),j=1,M)

enddo

do j=1, M do

MAX=abs(B(1,j));

do i=2, N

    if (abs(B(i,j))>MAX) then

       MAX:= abs(B(i,j))

    endif

enddo

C(j)=MAX

enddo

print *,'Получен массив С: '

print *,(C(j),j=1,M)

deallocate(B)

deallocate(C)

end

Программа на языке Python

print("Введите N -- число строк матрицы B: ")

N=int(input())  

print("Введите M -- число столбцов матрицы B: ")

M=int(input())  

B = [] # Создаем пустой список строк

# в Python списки индексируются с 0

for i in range(0, N):

B.append([])

# Добавляем пустой список элементов i-й строки

for j in range(0, M):

print("Введите B[{0},{1}]: ".format(i+1,j+1))

B[i].append(float(input()))

C= [] # Создаем пустой список максимальных модулей

for j in range(0, M): # j = 0,... M-1 -- всего M

C.append(-1.0)

# Добавляем новый элемент со значением,

# недопустимым для модуля числа: если оно таким и

# останется, значит что-то идет не так...

MAX = abs(B[0][j])

for i in range(1, N):

if abs(B[i][j]) > MAX:

MAX = abs(B[i][j])

C[j] = MAX

print("Получен массив C:")

for i in range(0, M):

print("C[{0}]={1}".format(i+1, C[i]))

Программа в системе Матлаб

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

for j=1:m

MAX=abs(B(1,j));

for i=2:n

if abs(B(i,j))>MAX

    MAX=abs(B(i,j));

end

end

C(j)=MAX;

end

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

disp(C)



Поделиться:


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

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