Консультация № 174280
16.11.2009, 13:03
0.00 руб.
0 9 2
дана действительная матрица размера 18*n. Найти значение наибольшего по модулю елемента матрицы а также индексы какого-нибудь елемента с найденным значением модуля

Обсуждение

Неизвестный
16.11.2009, 13:05
общий
Дорогие эксперты пожалуйста помогите никак не могу разобраться с поставленной задачей заранее благодарен
Неизвестный
16.11.2009, 13:43
общий
Никита Жуйков Павлович:
дана действительная матрица размера 18*n

Откуда брать n?
Неизвестный
16.11.2009, 13:56
общий
Матрица должна быть создана динамически или статически?
Неизвестный
16.11.2009, 14:08
общий
Micren
n нужно вводить
Калеев Владимир Викторович
нужно статически
спс за отзыв
Неизвестный
16.11.2009, 14:10
общий
Если N нужно вводить, то получается что матрицу нужно создавать динамически
Неизвестный
16.11.2009, 14:30
общий
ой точно, просто я в матрицах плохо разбираюсь
Неизвестный
16.11.2009, 14:40
общий
это ответ
Здравствуйте, Никита Жуйков Павлович.
Решение на C.

Приложение:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

const int M = 18; // Число строк
const int RANGE_MIN = -100; // Минимально возможное число матрицы
const int RANGE_MAX = 100; // Максимально возможное число матрицы

int main(int argc, char* argv[])
{
// Запрашиваем n
printf("Enter N: ");
int n = 0;
scanf("%i", &n);

//Динамически создаем матрицу
double** matrix = NULL;
matrix = new double* [M];
for(int i = 0; i< M; i++)
matrix [i] = new double[n];

/* Устанавливаем отсчет генератора случайных чисел
в соответствии с текущим временем, чтобы при каждом
запуске числа были разные*/
srand((unsigned)time( NULL ));

//Заполняем матрицу случайными числами
for(int i = 0; i<M ; i++){
for(int j = 0; j<n; j++){
matrix[i][j] = ((double)rand() / (RAND_MAX + 1))* (RANGE_MAX - RANGE_MIN)
+ RANGE_MIN;

printf("%7.2f", matrix[i][j]);
}
printf("\n");
}

double maxnum = RANGE_MIN;
int x; int y;

// Выполняем поиск наибольшего по модулю элемента матрицы
for(int i = 0; i < M; i++)
for(int j = 0 ; j < n; j++){
if (matrix[i][j]<0){ // Если элемент меньше нуля
if (-matrix[i][j]>maxnum){
maxnum = -matrix[i][j];
x = i; y = j; // Сохраняем индексы
}
} else { // Если элемент больше или равен нулю
if (matrix[i][j]>maxnum){
maxnum = matrix[i][j];
x = i; y = j; // Сохраняем индексы
}
}
}

// Выводим результат
printf("maximum = %7.2f; row = %i; colum = %i", maxnum, x+1, y+1);

getch();
return 0;
}

Неизвестный
16.11.2009, 18:58
общий
Калеев Владимир Викторович:
Решение на C.

Интересно. С каких пор в C появился operator new?
Неизвестный
16.11.2009, 23:17
общий
это ответ
Здравствуйте, Никита Жуйков Павлович.
Программа. C++. Компилировалась для проверки gcc.
Код:
#include <iostream>
#include <limits>
#include <iomanip>
#include <vector>
#include <valarray>
#include <cstdlib>
#include <ctime>

using namespace std;

// Количество строк
const size_t Rows=18;

// Позиция в матрице
class position
{
public:
position(size_t row,size_t col)
:_row(row)
,_col(col)
{}
size_t row() const {
return _row;
}
size_t col() const {
return _col;
}
private:
size_t _row,_col;
};

// Используемые типы для матрицы и вектора позиций
typedef valarray<valarray<double> > matrixType;
typedef vector<position> positionsType;

// Заполняет матрицу случайными числами
void genMatrix(matrixType& matrix)
{
for(size_t i=0,iEnd=matrix.size();i<iEnd;++i)
{
for(size_t j=0,jEnd=matrix[i].size();j<jEnd;++j)
{
matrix[i][j]=rand()%51-25;
cout<<setw(5)<<matrix[i][j]<<' ';
}
cout<<endl;
}
}

// Ищет максимальный по модулю и позиции таковых
double findMaxAbs(const matrixType& matrix,positionsType& positions)
{
positions.clear();
double absMax=0.0;
for(size_t i=0,iEnd=matrix.size();i<iEnd;++i)
{
for(size_t j=0,jEnd=matrix[i].size();j<jEnd;++j)
{
double item=abs(matrix[i][j]);
if(item>absMax)
{
absMax=item;
positions.clear();
}
if(item==absMax)
{
positions.push_back(position (i,j));
}
}
}
return absMax;
}

int main()
{
srand(static_cast<unsigned int>(time(0)));
size_t Cols;
// Вводим к-во столбцов
while(true)
{
cout<<"Введите количество столбцов(n):";
cin>>Cols;
if(cin.fail())
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(),'\n');
cout<<"Ошибка ввода"<<endl;
}
else
{
cin.ignore(numeric_limits<streamsize>::max(),'\n');
if(Cols>0)
{
break;
}
else
{
cout<<"Ожидается целое положительное число"<<endl;
}
}
}

// Матрица
matrixType matrix(valarray<double>(Cols),Rows);

// Заполним матрицу
genMatrix(matrix);

positionsType positions;
// Ищем согласно условия
double absMax=findMaxAbs(matrix,positions);

// Выводим результат
cout<<"Максимальный по модулю элемент: "<<absMax<<endl
<<"Позиции максимальных по модулю элементов:"<<endl
<<setw(7)<<"Строка"<<' '<<setw(7)<<"Столбец"<<endl;
for(positionsType::const_iterator it=positions.begin(),end=positions.end();it!=end;++it)
{
cout<<setw(7)<<it->row()<<' '<<setw(7)<<it->col()<<endl;
}

return 0;
}

Пример вывода:
Код:
~/Projects/174280/Debug/src$ ./174280                                                                                                            
Введите количество столбцов(n):5
8 11 24 -4 -15
7 14 22 17 0
-7 -19 24 -5 -21
16 12 -16 21 -5
21 -8 -15 -17 1
6 17 -7 -10 -18
15 23 -7 13 19
-23 19 7 24 -16
-19 16 16 5 -14
20 -5 -3 3 15
17 -1 -18 -24 7
-18 -18 23 25 -3
4 14 20 -4 -25
13 -2 20 19 -4
3 25 -13 -7 -22
23 13 23 -6 -10
13 -15 14 -6 11
20 -25 18 -9 25
Максимальный по модулю элемент: 25
Позиции максимальных по модулю элементов:
Строка Столбец
11 3
12 4
14 1
17 1
17 4
Форма ответа