Заполнение матрицы случайными числами

void fillRandomMatrix(int m, int n, int **matrix);

Нахождение индекса строки с максимальной суммой модулей //элементов

int findMaxColumn(int m, int n, int **matrix);

Поиск минимального элемента в столбце

int findMinInColumn(int m, int n, int **matrix, int col);

Вывод матрицы

void outputMatrix(int m, int n, int **matrix);

Освободить память

void freeMemory(int m, int n, int **matrix);

int main()

{

srand(time(NULL));

int m, n, maxColumn, minElement;

int **matrix;

matrix = 0;

m = n = 6;

allocMemory(m, n, matrix);

fillRandomMatrix(m, n, matrix);

outputMatrix(m, n, matrix);

maxColumn = findMaxColumn(m, n, matrix);

minElement = findMinInColumn(m, n, matrix, maxColumn);

cout << "Maximal column: " << maxColumn << ", minimal element: " << minElement << "\n";

freeMemory(m, n, matrix);

return 0;

}

Выделение памяти

void allocMemory(int m, int n, int **&matrix)

{

int i;

matrix = new int*[m];

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

matrix[i] = new int[n];

}

}

Заполнение матрицы случайными числами

void fillRandomMatrix(int m, int n, int **matrix)

{

int i, j;

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

for (j = 0; j < n; j++) {

matrix[i][j] = rand() % 30;

}

}

}

Нахождение индекса строки с максимальной суммой модулей элементов

int findMaxColumn(int m, int n, int **matrix)

{

int maxCol;

int cursum, sum;

int i, j;

sum = 0;

maxCol = 0;

for (j = 1; j < n; j++) {

cursum = 0;

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

cursum += (matrix[i][j] < 0) ? -matrix[i][j] : matrix[i][j];

}

if (cursum > sum) {

sum = cursum;

maxCol = j;

}

}

return maxCol;

}

Поиск минимального элемента в столбце

int findMinInColumn(int m, int n, int **matrix, int col)

{

int i, mi;

mi = 0;

for (i = 1; i < m; i++) {

if (matrix[i][col] < matrix[mi][col]) {

mi = i;

}

}

return mi;

}

Вывод матрицы

void outputMatrix(int m, int n, int **matrix)

{

int i, j;

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

{

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

{

cout<< setw(6)<< matrix[i][j] << ' ';

}

cout << '\n';

}

}

Освобождение памяти

void freeMemory(int m, int n, int **matrix)

{

int i;

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

delete[] matrix[i];

}

delete[] matrix;

}

В этой программе для выделения места в памяти для динамического массива и заполнения его случайными числами используются аналогичные предыдущей задаче функции. После создания массива и вывода его на экран мы вызываем функцию maxColumn = findMaxColumn(m, n, matrix).

Эта функция имеет тип возврата int, и должна нам вернуть намер строки, в которой находится макимальная по модулю сумма элементов. Поэтому мы можем сохранить возвращенное значение в переменной maxColumn целого типа.

В теле функции мы создаем переменную maxCol, в которой сформируется индекс искомой строки, и переменные cursum, sum в которых будут храниться сумма текущей строки и максимальная сумма соответственно. Находим сумму каждой строки и сравниваем ее с максимальной , индекс сохраняем в переменной maxCol.


Когда функция завершит работу в этой переменной окажется индекс, который функция возвратит, а мы сохраним.Напомню оператор

cursum += (matrix[i][j] < 0) ? -matrix[i][j] : matrix[i][j];

условный. Мы проходили его ранее.

В данном случае к значению в cursum мы прибавляем значение -matrix[i][j], если этот элемент меньше нуля, и matrix[i][j] если больше. В переменной cursum ,таким образом, сформируется сумма модулей элементов строки.

После того, как мы находим индекс строки, обращаемся к функции

minElement = findMinInColumn(m, n, matrix, maxColumn)

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

 

Работу по созданию вашей программы следует выполнять поэтапно.

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

 


Варианты заданий

 

Присвойте элементам массива F размерностью m ×n случайные числа от -20 до 20. Выведите на экран. Найдите наибольшее среди произведений элементов столбцов массива . Выведите на экран. Замените отрицательные значения нечетных столбцов элементов массива этим значением. Выведите на экран преобразованный массив.  
Дан целочисленный массив R размерностью n×n. Заполните его случайными числами от-50 до +50. Выведите на экран. Вычислите сумму элементов массива, расположенных ниже главной диагонали. Выведите на экран. Определите количество положительных элементов на главной диагонали . Выведите на экран. Замените им все элементы, расположенные выше главной диагонали. Преобразованный массив выведите на экран.  
Заполните массив К размерностью m×n случайными числами от -25 до 75. Выведете на экран. Посчитайте произведения всех отрицательных элементов массива. Выведите на экран. Найдите суммы каждого столбца и определить минимальную среди полученных сумм. Выведите на экран. Замените ею отрицательные элементы массива. Преобразованный массив выведите на экран.  
Присвойте элементам массива D размерностью m×m случайные числа от -10 до 15. Вывести на экран. Посчитать произведения всех положительных элементов массива. Вывести на экран. Отрицательные элементы четных строк массива замените их модулями. Преобразованный массив выведите на экран Найдите максимальный и минимальный элементы массива. Выведите на экран
Присвойте элементам массива В размерностью m×n случайные числа от 0 до 90. Выведите на экран. Выберите четные элементы массива, среди них найдите максимальный элемент и выведите его на экран Найдите суммы всех строк массива. Выведите на экран. Замените элементы массива, кратные 5,средним арифметическим этих сумм. Преобразованный массив выведите на экран  
Присвойте элементам массива Q размерностью m×n случайные числа от -20 до 65. Выведите на экран. Определите минимальный элемент в каждом столбце матрицы . Выведите на экран Найти максимальный элемент массива. Выведите на экран. Замените им отрицательные элементы, расположенные в k-ой строке. Преобразованный массив выведите на экран  
Присвойте элементам массива Q размерностью m×m случайные числа от -30 до 65. Выведите на экран. Найдите индекс строки с минимальным элементом массива. Выведите на экран. Вычислите сумму элементов, расположенных в четных строках. Выведите на экран Замените им положительные элементы главной диагонали . Преобразованный массив выведите на экран
Присвойте элементам массива В размерностью m×n случайные числа от -20 до 90. Выведите на экран. Найдите количество положительных элементов массива. Выведите на экран. Найдите максимальный элемент k-ой строки . Выведите на экран. Замените им отрицательные элементы, первой строки. Преобразованный массив выведите на экран.  
Дан целочисленный массив R размерностью n×n. Заполните его случайными числами от-50 до +50. Выведите на экран. Вычислите сумму элементов массива, расположенных выше главной диагонали. Выведите на экран. Определите количество положительных элементов на главной диагонали . Выведите на экран. Замените им все элементы, расположенные ниже главной диагонали. Преобразованный массив выведите на экран.
Дан действительный массив P размерностью n×n. Заполните его случайными числами от-50 до +80. Выведите на экран Найдите сумму элементов каждого столбца массива . Выведите на экран. Определите минимальную из полученных сумм. Выведите на экран. Замените отрицательные элементы на главной диагонали полученной суммой. Преобразованный массив выведите на экран.
Присвойте элементам массива Q размерностью m×n случайные числа от -20 до 80. Выведите на экран. Отрицательные элементы массива, расположенные в четных строках, заменить на квадраты их значений. Преобразованный массив выведите на экран. Найти максимальный элемент среди элементов, расположенных в четных столбцах. Выведите на экран.
Присвойте элементам массива Q размерностью m×n случайные числа от -60 до 65. Выведите на экран. Отрицательные элементы массива, расположенные в нечетных строках, заменить на квадраты их значений. Преобразованный массив выведите на экран. Найдите максимальные элементы столбцов массива. Выведите на экран.
Присвойте элементам массива А размерностью m×n случайные числа от 25 до 75. Выведите на экран. Выведите на экран отдельно элементы массива кратные 5. Элементам не кратным 5 присвойте значение 0 и выведите на экран преобразованный массив. Найдите наибольшее среди произведений элементов столбцов массива . Выведите на экран.    
Присвойте элементам массива В размерностью n ×n случайные числа от -20 до 25. Выведите на экран. Найдите наибольшее среди произведений элементов столбцов массива . Выведите на экран. Диагональные элементы массива заменить средними арифметическими соответствующих столбцов. Преобразованный массив выведите на экран  
Присвойте элементам массива В размерностью n ×n случайные числа от -50 до 50. Выведите на экран. Замените отрицательные элементы, расположенные на главной диагонали и выше нее на их квадраты и посчитать количество замен. Выведите преобразованный массив. Замените все элементы первой строки максимальным элементом массива. Выведите преобразованный массив.  
Присвойте элементам массива V размерностью m ×n случайные числа от -90 до 65. Выведите на экран. Найти наибольшее значение среди сумм элементов столбцов массива. Выведите на экран. Элементы k –ой строки массива заменить средними арифметическими соответствующих столбцов. Выведите на экран преобразованный массив.  

 


Контрольные вопросы

 

1)Что такое функция? Зачем нужно? Приведите пример простейшей функции.

2) Как передаются аргументы в функцию? Что можно передавать в качестве аргумента? Приведите примеры.

3) Что возвращает функция? Приведите примеры.

4) Приведите решение любой из задач данной лабораторной работы кроме своего варианта.


 

Лабораторная работа №7

 

Цель: усовершенствовать навыки программирования на примере решения задачи записи и чтения информации из файлов.

 

Задачи:

1) Изучить вопросы использования текстовых файлов для чтения/записи информации.

2) Разработать программу, табулирующую некую функцию и производящую запись результата в текстовый файл.

3) Разработать программу, читающую из файла данные табулированной функции.