Заполнение массива случайными числами
void fillRandomMatrix(int m, int n, double **matrix);
Нахождение индексов минимального элемента
void findMin(int m, int n, double **matrix, int &mi, int &mj);
Вывод массива
void outputMatrix(int m, int n, double **matrix);
Освобождение памяти
void freeMemory(int m, int n, double **matrix);
int main()
{
srand(time(NULL));
int m, n, i, j; //индексы массивов
double **matrix; //указатель на динамический массив
matrix = 0;
m = 8;
cout << "input n: " << "\n";
cin >> n; //ввод индекса массива
allocMemory(m, n, matrix);
fillRandomMatrix(m, n, matrix);
outputMatrix(m, n, matrix);
findMin(m, n, matrix, i, j);
cout << "Maximal element: " << matrix[i][j]
<< " at (" << i << ", " << j << ")\n";
freeMemory(m, n, matrix);
return 0;
}
Выделение памяти
void allocMemory(int m, int n, double **&matrix)
{
int i;
matrix = new double*[m];
for (i = 0; i < m; i++) {
matrix[i] = new double[n];
}
}
Заполнение массива случайными числами
void fillRandomMatrix(int m, int n, double **matrix)
{
int i, j,a;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
a = rand();
if (a) {
matrix[i][j] = rand() / (double)a;
//matrix[i][j] = rand() % 100 ;
}
}
}
}
Нахождение индексов минимального по модулю элемента
void findMin(int m, int n, double **matrix, int &mi, int &mj)
{
int i, j;
mi = 0;
mj = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if (fabs(matrix[i][j]) > fabs(matrix[mi][mj])) {
mi = i;
mj = j;
}
}
}
}
Вывод массива
void outputMatrix(int m, int n, double **matrix)
{
int i, j;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
cout<< setw(10)<<setprecision(5) << matrix[i][j] << ' ';
}
cout << '\n';
}
}
Освобождение памяти
void freeMemory(int m, int n, double **matrix)
{
int i;
for (i = 0; i < m; i++) {
delete[] matrix[i];
}
delete[] matrix;
}
Прогамма разбита на пять функций-для выделение памяти , заполнения массива случайными числами, поиска индесов минимального элемента , вывода массива на экран и освобождения памяти.
Прототипы функций расположены перед заголовком функции main().
В самой функции main().,мы объявляем переменные m, n-рзмерность массива, i, j –переменные цикла. Все они целого типа. Далее объявляется указатель matrix на double ,в котором будет располагаться адрес массива, который мы разместим в свободном хранилище. Количество строк массива известно, и по условию равно 8, количество столбцов вводим оператором cin >> n.После этого вызывается функция allocMemory(m, n, matrix);.
В этой функции выделяется место для динамического массива. В качестве аргументов в функцию передаются размеры массива и указатель , в котором в результате работы функции будет находиться адрес памяти, выделенной под динамический массив. Обратите внимание, что параметр этот ссылочный. Этот факт означает, что аргумент в функции можно изменять. Это мы и сделаем, когда присвоим ему, как видно из кода функции, адрес массива указателей.
После выполнения функции в этой переменной будет находиться адрес до тех пор, пока не будет выполнено освобождение памяти. В остальных функциях указатель matrix передается по значению, так как изменять мы его более не будем.
Обратите внимание на тип возврата. Мы ничего не возвращаем,так как назначение функции только изменить агумент.
Далее вызывается фукция
fillRandomMatrix(m, n, matrix).
В качестве аргументов в функцию передаются размеры массива и указатель, который уже получил значение адреса и передается по значению.
В функции массив заполняется случайными числами, как мы уже это делали в предыдущей лабораторной работе. После этого выводим на экран полученный массив с помощью функции outputMatrix(m, n, matrix).
Аргументы у нее также размеры массива и указатель на него.
И вот , когда мы убедились, что массив создан , приступаем к определению минимального элемента массива и его индексов, используя функцию
findMin(m, n, matrix, i, j)
В функцию передаем размер массива, его адрес и по ссылке - два индекса.
В самой функции находим минимальный элемент массива, как мы это умеем, а в аргументах i, j сохраняем индексы найденного минимального элемента.
И , когда функция завершила свою работу , мы выводим на экран этот элемент используя измененные в функции индексы.
Наша задача успешно выполнена и мы освобождаем задействованную память.
Для этого используем функцию freeMemory(m, n, matrix).
Аргументы у нее также размеры массива и его адрес.
После этого программа завершает свою работу.
Дана целочисленная квадратная матрица порядка 6. Найти наименьшее из значений элементов столбца, который обладает наибольшей суммой модулей элементов. Если таких столбцов несколько, то взять первый из них. Поиск наименьшего значения элементов в строке и сумму модулей элементов столбца определить с помощью функций
/ Листинг 30
#include <stdlib.h>
#include <time.h>
#include <math.h>
#include <iostream.h>
#include <iomanip.h>
Прототипы функций
Выделение памяти
void allocMemory(int m, int n, int **&matrix);