Подсчитать среднее арифметическое элементов каждой строки матрицы используя указатели - 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. Затем находится максимальный элемент вектора и выводится на экран. В конце программы освобождается выделенная память.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д