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