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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.857 из 5
Похожие ответы