Подсчитать среднее арифметическое элементов каждой строки матрицы используя указатели - C (СИ)
Формулировка задачи:
Для
прямоугольной
матрицы (заполнить случайными числами) подсчитать среднее арифметическое элементов каждой строки за исключением элементов столбца с номером k (ввести с клавиатуры) и сформировать из них вектор. Найти максимальный элемент этого вектора. Реализовать программу через указатели и динамическое выделение памяти. Если можно, то вывести печать массива в отдельную функцию. Без указателей и выделения памяти памяти - получилось, а с ними не выходит. Заранее спасибо.
Для прямоугольной матрицы подсчитать среднее арифметическое элементов
вот тут уже есть реализация этой программы, но без указателей и выделения памяти.
Решение задачи: «Подсчитать среднее арифметическое элементов каждой строки матрицы используя указатели»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void creat_vector(int **matrix, float *vector, int size, int k);
float max_item_vector(float *vector, int size);
int get_rand(int n);
int main(void) {
int i, j, k;
int **arr;
float *vector;
arr = malloc(SIZE * sizeof(int*));
for (i = 0; i < SIZE; ++i) {
arr[i] = malloc(SIZE * sizeof(int));
for (j = 0; j < SIZE; ++j) {
arr[i][j] = get_rand((i + 1) * (j + 1));
}
}
printf("Заданная матрица\n");
for (i = 0; i < SIZE; ++i) {
for (j = 0; j < SIZE; ++j) {
printf("%5d", arr[i][j]);
}
printf("\n");
}
printf("\n");
do {
printf("Введите значение k\n");
scanf("%d", &k);
} while (k < 0 || k >= SIZE);
printf("\n");
vector = malloc(SIZE * sizeof(float));
creat_vector(arr, vector, SIZE, k);
printf("Созданный вектор\n");
for (i = 0; i < SIZE; ++i) {
printf("%g ", vector[i]);
}
printf("\n\n");
printf("Максимальный элемент вектора\n");
printf("%g\n", max_item_vector(vector, SIZE));
/* освобождаем память */
for (i = 0; i < SIZE; ++i)
free(arr[i]);
free(arr);
free(vector);
return EXIT_SUCCESS;
}
void creat_vector(int **matrix, float *vector, int size, int k) {
int i, j;
float sum = 0;
for (i = 0; i < size; ++i) {
for (j = 0; j < size; ++j) {
if (j != k) {
sum += (float) matrix[i][j];
}
}
vector[i] = sum / (float) (size - 1);
sum = 0.0;
}
}
float max_item_vector(float *vector, int size) {
int i;
float max = vector[0];
for (i = 1; i < size; ++i) {
if (vector[i] > max) {
max = vector[i];
}
}
return max;
}
/* Генератор чисел от 0 до 1023 */
int get_rand(int n) {
srand(n + time(NULL ));
return 0 + rand() % 127;
}
Объяснение кода листинга программы
В этом коде используется динамическое выделение памяти для создания матрицы и вектора. Затем происходит заполнение матрицы случайными целыми числами. Вектор создается путем вычисления среднего арифметического элементов каждой строки матрицы, кроме столбца k. Затем находится максимальный элемент вектора и выводится на экран. В конце программы освобождается выделенная память.