Подсчитать среднее арифметическое элементов каждой строки матрицы используя указатели - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Для

прямоугольной

матрицы (заполнить случайными числами) подсчитать среднее арифметическое элементов каждой строки за исключением элементов столбца с номером k (ввести с клавиатуры) и сформировать из них вектор. Найти максимальный элемент этого вектора. Реализовать программу через указатели и динамическое выделение памяти. Если можно, то вывести печать массива в отдельную функцию. Без указателей и выделения памяти памяти - получилось, а с ними не выходит. Заранее спасибо.
Для прямоугольной матрицы подсчитать среднее арифметическое элементов вот тут уже есть реализация этой программы, но без указателей и выделения памяти.

Решение задачи: «Подсчитать среднее арифметическое элементов каждой строки матрицы используя указатели»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define SIZE 10
  6.  
  7. void creat_vector(int **matrix, float *vector, int size, int k);
  8. float max_item_vector(float *vector, int size);
  9. int get_rand(int n);
  10.  
  11. int main(void) {
  12.  
  13.     int i, j, k;
  14.     int **arr;
  15.     float *vector;
  16.  
  17.     arr = malloc(SIZE * sizeof(int*));
  18.     for (i = 0; i < SIZE; ++i) {
  19.         arr[i] = malloc(SIZE * sizeof(int));
  20.         for (j = 0; j < SIZE; ++j) {
  21.             arr[i][j] = get_rand((i + 1) * (j + 1));
  22.         }
  23.     }
  24.     printf("Заданная матрица\n");
  25.     for (i = 0; i < SIZE; ++i) {
  26.         for (j = 0; j < SIZE; ++j) {
  27.             printf("%5d", arr[i][j]);
  28.         }
  29.         printf("\n");
  30.     }
  31.     printf("\n");
  32.  
  33.     do {
  34.         printf("Введите значение k\n");
  35.         scanf("%d", &k);
  36.     } while (k < 0 || k >= SIZE);
  37.     printf("\n");
  38.  
  39.     vector = malloc(SIZE * sizeof(float));
  40.     creat_vector(arr, vector, SIZE, k);
  41.     printf("Созданный вектор\n");
  42.     for (i = 0; i < SIZE; ++i) {
  43.         printf("%g ", vector[i]);
  44.     }
  45.     printf("\n\n");
  46.  
  47.     printf("Максимальный элемент вектора\n");
  48.     printf("%g\n", max_item_vector(vector, SIZE));
  49.  
  50.     /* освобождаем память */
  51.     for (i = 0; i < SIZE; ++i)
  52.         free(arr[i]);
  53.  
  54.     free(arr);
  55.     free(vector);
  56.  
  57.     return EXIT_SUCCESS;
  58. }
  59.  
  60. void creat_vector(int **matrix, float *vector, int size, int k) {
  61.     int i, j;
  62.     float sum = 0;
  63.     for (i = 0; i < size; ++i) {
  64.         for (j = 0; j < size; ++j) {
  65.             if (j != k) {
  66.                 sum += (float) matrix[i][j];
  67.             }
  68.         }
  69.         vector[i] = sum / (float) (size - 1);
  70.         sum = 0.0;
  71.     }
  72. }
  73.  
  74. float max_item_vector(float *vector, int size) {
  75.     int i;
  76.     float max = vector[0];
  77.     for (i = 1; i < size; ++i) {
  78.         if (vector[i] > max) {
  79.             max = vector[i];
  80.         }
  81.     }
  82.     return max;
  83. }
  84.  
  85. /* Генератор чисел от 0 до 1023 */
  86. int get_rand(int n) {
  87. srand(n + time(NULL ));
  88. return 0 + rand() % 127;
  89. }

Объяснение кода листинга программы

В этом коде используется динамическое выделение памяти для создания матрицы и вектора. Затем происходит заполнение матрицы случайными целыми числами. Вектор создается путем вычисления среднего арифметического элементов каждой строки матрицы, кроме столбца k. Затем находится максимальный элемент вектора и выводится на экран. В конце программы освобождается выделенная память.

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


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

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

7   голосов , оценка 4.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы