Как вывести строку матрицы где есть максимальный элемент определенного столбца?

170
17 апреля 2018, 04:31
typedef struct Matrix //структура матрицы
{
int n;
int m; 
float* elem;
} Matrix;

Пользователь вводит номер столбца в котором ищется максимальный элемент:

float searchMaxAnaliz(Matrix* matrix, int column)
{
    int number_analiz; 
    cout << "Введите номер анализа для поиска максимального: ";
    cin >> number_analiz;
    float max = matrix->elem[0];
    for(int i = 0; i < matrix->n; i++)
        if(matrix->elem[i*column + number_analiz] > max) max = matrix->elem[i*column + number_analiz];
    return max;     
}

Как вывести на консоль элементы строки в которой есть найденный максимальный элемент введенного пользователем столбца?

Answer 1

Если Matrix::n это количество строк, а Matrix::m _ столбцов, то столбец выводить так:

 for (int i = 0; i < n; ++i)
        cout << matrix->elem[i * matrix->m + number_analiz] << endl;

И один совет, не имеющий отношение к вопросу: будет куда лучше и удобнее, если вы для вашей структуры определите конструктор, деструктор...

Чтобы выводить строку, нужно иметь обьект, который хранит индекс той строки, где находится максимальный элемент.

float searchMaxAnaliz(Matrix* matrix)
{   
    int column = matrix->m;
    int number_analiz, index = 0;; 
    cout << "\n Введите номер анализа для поиска максимального: ";
    cin >> number_analiz;
    float max = matrix->elem[0];
    for(int i = 0; i < matrix->n; i++)
        if(matrix->elem[i*column + number_analiz - 1] > max)  {
            max = matrix->elem[i*column + number_analiz - 1];
            index = i;
        }
     // выводим строку
     for (int i = 0; i < column; ++i)
        cout << matrix->elem[index * column + i] << endl;
    return max;     
}

Второй аргумент функции по моему не нужен, поэтому создал такую же в функции, чтоб все оставалось как есть, с немногими изменениями

Answer 2
 /*Вывод результатов суточных анализов пациентов с максимальным
    значением уровня глюкозы в анализе с указанным номером*/
    #include<iostream>
    #include<conio.h>
    #include <iomanip>
    using namespace std;
    #pragma warning(disable:4996)
    typedef struct Matrix //структура матрицы
    {
        int n;
        int m; 
        float* elem;
    } Matrix;
    void PrintMaxAnaliz(Matrix* matrix, int column);
    float searchMaxAnaliz(Matrix* matrix, int column);      
    void main()
    {
        srand(time(NULL));
        setlocale(LC_ALL, "RUS");//Подключение русского языка
        Matrix *tmp = (Matrix*)malloc(sizeof(Matrix));//Выделяем память под список
        tmp->n = 10;//количество пациентов
        tmp->m = 8; 
        tmp->elem = (float *)malloc(tmp->n*tmp->m*sizeof(float));
        for (int i = 0; i < tmp->n; i++)
          for (int j = 0; j < tmp->m; j++)
            tmp->elem[i*tmp->m + j] = (float)rand() / (RAND_MAX + 1) * (2 - 0) - 0;//рандомное заполнение
        for (int i = 0; i < tmp->n; i++){
          for (int j = 0; j < tmp->m; j++)
            cout << setprecision(2) << setw(5) << fixed << tmp->elem[i*tmp->m + j];//вывод на экран
        cout << endl;
        }
       float maxAnaliz = searchMaxAnaliz(tmp, tmp->m);
       cout << endl << maxAnaliz << endl;
       getch();
   }
float searchMaxAnaliz(Matrix* matrix, int column)
{
    int number_analiz; 
    cout << "\n Введите номер анализа для поиска максимального: ";
    cin >> number_analiz;
    float max = matrix->elem[0];
    for(int i = 0; i < matrix->n; i++)
        if(matrix->elem[i*column + number_analiz - 1] > max) max = matrix->elem[i*column + number_analiz - 1];
     for (int i = 0; i < matrix->n - 1; ++i)
        cout << matrix->elem[i * matrix->m + column] << endl;
    return max;     
}
READ ALSO
K массивов, порядка m&#215;n

K массивов, порядка m×n

Здравствуйте, скажите пожалуйста, как обращаться к элементу массива - матрице номер k размером m×n, например? к 3 элементу, 5 строки, 2 матрицы?...

178
Вызов перегруженного индексатора

Вызов перегруженного индексатора

Итак, у меня есть класс-родитель:

163
Ошибка &ldquo;Undefined reference to&rdquo; подключённой (!) функции

Ошибка “Undefined reference to” подключённой (!) функции

В общем, создал заголовочный иcpp файлы

169
Сортировка строк двумерного массива

Сортировка строк двумерного массива

Вечер добрый! Есть двумерный массив, в котором содержится n-ое количество строкКаждая строка представляет собой последовательность нулей...

179