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

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

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

Дана квадратная матрица А порядка n. Получить матрицу АВ ; элементы матрицы В вычисляются по формуле b[i][j]=1/(i+j-1). Нужно сделать в указателях
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const int array_size = 5;
  float a[array_size][array_size];
  float b[array_size][array_size];
  float ab[array_size][array_size];
 
  int i, j, k;
  printf("A[][]:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j)
      // так как индексация в математике идет с единицы
      // в формуле прибавляется по +1 для каждого измерения
      // +2 -1 = +1 иначе получаем inf при i = 0 или j = 0
      printf("%9.5f", b[i][j] = 1./(i + j + 1));
    printf("\n");
  }
  printf("\n");
 
  printf("B[][]:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j)
      printf("%9.5f", a[i][j] = (rand() % 1000) / 100.);
    printf("\n");
  }
  printf("\n");
 
  printf("C[][] = A x B:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j) {
      ab[i][j] = 0;
      for (k = 0; k < array_size; ++k)
        ab[i][j] += a[i][k] * b[k][j];
      printf("%9.5f", ab[i][j]);
    }
    printf("\n");
  }
  printf("\n");

  return 0;
}

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

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main(int argc, char *argv[]) {
  srand(time(NULL));
  const int array_size = 5;
  float **a = (float**)malloc(sizeof(float*) * array_size);
  float **b = (float**)malloc(sizeof(float*) * array_size);
  float **ab = (float**)malloc(sizeof(float*) * array_size);
  for(int i = 0; i < array_size; ++i){
    a[i] = (float*)malloc(sizeof(float) * array_size);
    b[i] = (float*)malloc(sizeof(float) * array_size);
    ab[i] = (float*)malloc(sizeof(float) * array_size);
  }
 
  int i, j, k;
  printf("A[][]:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j)
      // так как индексация в математике идет с единицы
      // в формуле прибавляется по +1 для каждого измерения
      // +2 -1 = +1 иначе получаем inf при i = 0 или j = 0
      printf("%9.5f", *(*(b + i) + j) = 1./(i + j + 1));
    printf("\n");
  }
  printf("\n");
 
  printf("B[][]:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j)
      printf("%9.5f", *(*(a + i) + j) = (rand() % 1000) / 100.);
    printf("\n");
  }
  printf("\n");
 
  printf("C[][] = A x B:\n");
  for (i = 0; i < array_size; ++i) {
    for (j = 0; j < array_size; ++j) {
      *(*(ab + i) + j) = 0;
      for (k = 0; k < array_size; ++k)
        *(*(ab + i) + j) += *(*(a + i) + k) * *(*(b + k) + j);
      printf("%9.5f", *(*(ab + i) + j));
    }
    printf("\n");
  }
  printf("\n");
 
  for(int i = 0; i < array_size; ++i){
    free(a[i]);
    free(b[i]);
    free(ab[i]);
  }
  free(a);
  free(b);
  free(ab);
  return 0;
}

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

В этом коде создаются три массива строк (матрицы) A, B и C. Матрица A заполняется случайными числами от 0 до 1000, матрица B вычисляется по формуле 1/(i+j+1), а матрица C вычисляется как произведение матриц A и B. Здесь представлена разбиение кода на отдельные шаги и их описание:

  1. Определение размера матрицы. Задается размер матрицы в виде константы array_size (строка 6).
  2. Выделение памяти под матрицы A, B и C. Используется оператор malloc для выделения памяти под каждый элемент матрицы (строки 8-10).
  3. Заполнение матрицы A случайными числами. Используется генератор случайных чисел rand() для заполнения матрицы A случайными числами от 0 до 1000 (строки 13-18).
  4. Заполнение матрицы B по формуле 1/(i+j+1). Используется формула 1/(i+j+1) для заполнения матрицы B (строки 21-26).
  5. Вычисление матрицы C как произведения матриц A и B. Используется цикл for для вычисления произведения матриц A и B и сохранения результата в матрице C (строки 28-37).
  6. Освобождение памяти. После использования malloc, память освобождается с помощью функции free (строки 40-45).
  7. Выход из программы. Программа завершается возвратом значения 0 (строка 49).

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


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

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

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