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