Заполнение матрицы случайными числами
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) Разработать программу, читающую из файла данные табулированной функции.