Поэлементно вычесть последнюю строку из всех столбцов матрицы, кроме последнего - C (СИ)
Формулировка задачи:
Всем привет. Помогите решить.
1. Дана вещественная матрица А (8х8). Преобразовать матрицу: поэлементно вычесть последнюю строку из всех столбцов, кроме последнего.
2. В заданной целочисленной матрице размера mxn (m и n – некоторые константы) указать индексы всех элементов, имеющих наибольшее значение.
Спасибо.
Решение задачи: «Поэлементно вычесть последнюю строку из всех столбцов матрицы, кроме последнего»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
const int* max_element(const int **matrix, size_t rows, size_t columns)
{
int i, j;
const int *ret_val = *matrix;
if (rows == 0)
return NULL;
if (columns == 0)
return NULL;
for (i = 0; i < rows; i++)
for (j = 0; j < columns; j++)
if (matrix[i][j] > *ret_val)
ret_val = &matrix[i][j];
return ret_val;
}
void print_indexes
(
const int **matrix,
size_t rows,
size_t columns,
int value,
const char *fmt
)
{
int i, j;
for (i = 0; i < rows; i++)
for (j = 0; j < columns; j++)
if (matrix[i][j] == value)
printf(fmt, i, j);
}
int main(void)
{
size_t rows, columns, i, j;
int **matrix;
srand(time(0));
printf("Rows: ");
if (scanf("%u", &rows) != 1)
{
fprintf(stderr, "Error reading variable");
exit(1);
}
printf("Columns: ");
if (scanf("%u", &columns) != 1)
{
fprintf(stderr, "Error reading variable");
exit(1);
}
matrix = (int**)malloc(sizeof(int*) * rows);
for (i = 0; i < rows; i++)
{
matrix[i] = (int*) malloc(sizeof(int) * columns);
for (j = 0; j < columns; j++)
printf("%4d ", matrix[i][j] = rand() % 20);
putchar('\n');
}
print_indexes(matrix, rows, columns, *max_element(matrix, rows, columns), "[%d, %d]\n");
for (i = 0; i < rows; i++)
free(matrix[i]);
free(matrix);
return 0;
}
Объяснение кода листинга программы
В этом коде:
- Создается матрица случайных целых чисел.
- Находится максимальное значение в матрице.
- Выводится на экран найденное максимальное значение и его координаты в матрице.
- Все элементы матрицы освобождаются, и сама матрица удаляется.