Рандомное заполнение матрицы размер которой задан с клавиатуры - C (СИ)

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

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

Доброе время суток! Помогите поправить под рандомное заполнение, программа работает, но в консоли непонятное значение. Переполнение массива или что то в этом роде.
Листинг программы
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <malloc.h>
  5. #include <clocale>
  6. #include <ctype.h>
  7. #include <math.h>
  8. #include <stdlib.h>
  9. int** Multiply(int**, int, int, int**, int, int**);
  10. int** fill(int**, int, int);
  11. void Print(int**, int, int);
  12. int **rand_A, **rand_B;
  13. int main()
  14. {
  15. int str_A, col_A, str_B, col_B;
  16. setlocale(LC_ALL, "RUS");
  17. printf("Размер матрицы A:\n");
  18. printf("Введите число строк = ");
  19. scanf("%d", &str_A);
  20. printf("Введите число колонок = ");
  21. scanf("%d", &col_A);
  22. // выделение памяти под массивы
  23. int **matr_A = (int**)malloc(str_A * sizeof(int*));
  24. for (int i = 0; i < str_A; ++i)
  25. matr_A[i] = (int *)malloc(col_A * sizeof(int));
  26. /*
  27. printf("\nПолученная матрицы A:\n");
  28. fill(matr_A, str_A, col_A);
  29. */
  30. str_B = col_A;
  31. printf("\nРазмер матрицы B:\n");
  32. printf("Введите число строк = %d\n", str_B);
  33. printf("Введите число колонок = ");
  34. scanf("%d", &col_B);
  35. int **matr_B = (int**)malloc(str_B * sizeof(int*));
  36. for (int i = 0; i < str_B; ++i)
  37. matr_B[i] = (int *)malloc(col_B * sizeof(int));
  38. /*
  39. printf("\nПолученная матрица B:\n");
  40. fill(matr_B, str_B, col_B);
  41. */
  42. int str_C = str_A, col_C = col_B;
  43. int **matr_C = (int**)malloc(str_C * sizeof(int*));
  44. for (int i = 0; i < str_C; ++i)
  45. matr_C[i] = (int *)malloc(col_C * sizeof(int));
  46. Multiply(matr_A, str_A, col_A, matr_B, col_B, matr_C);
  47. printf("\nМатрица A [%dx%d]:\n", str_A, col_A);
  48. Print(matr_A, str_A, col_A);
  49. printf("\nМатрица B [%dx%d]:\n", str_B, col_B);
  50. Print(matr_B, str_B, col_B);
  51. printf("\nФормула умножения C=A*B [%dx%d]:\n", str_C, col_C);
  52. Print(matr_C, str_C, col_C);
  53. // высвобождение памяти
  54. for (int i = 0; i<str_A; i++)
  55. free(matr_A[i]);
  56. free(matr_A);
  57. for (int i = 0; i<str_B; i++)
  58. free(matr_B[i]);
  59. free(matr_B);
  60. for (int i = 0; i<str_C; i++)
  61. free(matr_C[i]);
  62. free(matr_C);
  63. _getch();
  64. return 0;
  65. }
  66.  
  67. // вывод матриц на экран
  68. void Print(int **matr, int str, int col)
  69. {
  70. for (int i = 0; i<str; i++)
  71. {
  72. printf("\n");
  73. for (int j = 0; j<col; j++)
  74. printf("%d\t", matr[i][j]);
  75. }
  76. printf("\n");
  77. printf("\n");
  78. }
  79. // функции рандома
  80. void random_A(const int col_B, const int col_A, int **matr_A)
  81. {
  82. for (int i = 0; i < col_B; i++)
  83. for (int j = 0; j < col_A; j++)
  84. matr_A[i][j] = 0 + rand() % 10;
  85. }
  86. void random_B(const int col_B, const int col_A, int **matr_B)
  87. {
  88. for (int i = 0; i < col_B; i++)
  89. for (int j = 0; j < col_A; j++)
  90. matr_B[i][j] = 0 + rand() % 10;
  91. }
  92.  
  93. // умножение матрицы
  94. int** Multiply(int **matr_A, const int str_A, const int col_A,
  95. int **matr_B, const int col_B, int **matr_C)
  96. {
  97. int sum;
  98. for (int i = 0; i < col_B; i++)
  99. for (int j = 0; j<str_A; j++)
  100. {
  101. sum = 0;
  102. for (int q = 0; q<col_A; q++)
  103. {
  104. sum += matr_A[j][q] * matr_B[q][i];
  105. matr_C[j][i] = sum;
  106. }
  107. }
  108. return matr_C;
  109. }
  110. // ввод элементов
  111. /*
  112. int** fill(int **matr, int str, int col)
  113. {
  114. for (int i = 0; i<str; i++)
  115. for (int j = 0; j<col; j++)
  116. //matr[i][j] = 0 + rand() % 100;
  117. {
  118. printf("Введите элемент [%d][%d]: ", i + 1, j + 1);
  119. scanf("%d", &matr[i][j]);
  120. }
  121. return matr;
  122. }
  123. */

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

textual
Листинг программы
  1. void random_A(const int str_A, const int col_A, int **matr_A)
  2. {
  3.     for (int i = 0; i <str_A; i++)
  4.         for (int j = 0; j <col_A; j++)
  5.             matr_A[i][j] = 0 + rand() % 10;
  6. }

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

  1. Вводится постановка задачи - рандомное заполнение матрицы.
  2. Вводные данные: размер строки матрицы (str_A), размер столбца матрицы (col_A), двумерный массив (матрица) matr_A.
  3. В функции используется два вложенных цикла:
    • внешний цикл для прохода по строкам матрицы (0..str_A-1).
    • внутренний цикл для прохода по столбцам матрицы (0..col_A-1).
  4. Внутренний цикл выполняется для каждого элемента матрицы matr_A[i][j].
  5. Присваивается случайное число от 0 до 9 (включительно) и записывается в элемент матрицы matr_A[i][j].
  6. Функция не возвращает значение, так как является процедурой (не выполняет каких-либо вычислений, а только заполняет матрицу).

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


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

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

9   голосов , оценка 4.444 из 5

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

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

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