0 / 0 / 1
Регистрация: 27.01.2013
Сообщений: 12
1

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

14.12.2015, 22:13. Показов 506. Ответов 2

Студворк — интернет-сервис помощи студентам
Доброе время суток!
Помогите поправить под рандомное заполнение, программа работает, но в консоли непонятное значение.
Переполнение массива или что то в этом роде.
Рандомное заполнение матрицы размер которой задан с клавиатуры

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

Как сделать рандомное заполнение матрицы?
Нужно исправить текст програми: вставить рандомное заполнение матрицы и также вставить цикл,...

Как ввести размер матрицы с клавиатуры?
Есть двухмерная матрица нужно задать размер с помощью клавиатуры

Ввести размер квадратной матрицы с клавиатуры
Добрый день. Написала код поиска наименьших элементов в верхнем и нижнем, затем в левом...

Рандомное заполнение матрицы, причем от числа до числа, введенного с клавиатуры
Подскажите ,пожалуйста, как сделать рандомное заполнение матрицы,причем от числа до...

2
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12225 / 7357 / 1730
Регистрация: 25.07.2009
Сообщений: 13,468
15.12.2015, 00:57 2
Цитата Сообщение от smokerock Посмотреть сообщение
void random_A(const int col_B, const int col_A, int **matr_A)
Во-первых за чем нужны две функции, делающие по сути одно и то же, а во-вторых в функцию надо передавать указатель на матрицу, в-третьих где вообще по-вашему элементы матриц инициализируются?
0
0 / 0 / 1
Регистрация: 27.01.2013
Сообщений: 12
15.12.2015, 01:22  [ТС] 3
C
1
2
3
4
5
6
void random_A(const int str_A, const int col_A, int **matr_A)
{
    for (int i = 0; i <str_A; i++)
        for (int j = 0; j <col_A; j++)
            matr_A[i][j] = 0 + rand() % 10;
}
Ну я так понял к каждой матрице свой рандом, так как количество столбцов и строк может отличаться.
Пытался после делать так matr_A[i][j] = matr_A[j][q], а matr_B[i][j] = matr_B[q][i], программа просто перестает работать, с программированием у меня не очень, препод сказал, бери и грызи гранит сам, трудно грызется.

Добавлено через 13 минут
Про указатель понял, а на счет инициализации, голова совсем уже не варит, запутался.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2015, 01:22
Помогаю со студенческими работами здесь

Переписать элементы матрицы, размер которой вводится с клавиатуры, в вектор по строкам.
Переписать элементы матрицы, размер которой вводится с клавиатуры, в вектор по строкам.

Рандомное заполнение матрицы
Дана матрица 5х5, необходимо её заполнить числами от 1 до 25 в хаотичном порядке, так называемый...

Рандомное заполнение симметричной матрицы
Помогите сделать рандомное заполнение симметричной матрицы из 0, 1. На главной диагонали должны...

Как переделать рандомное заполнение матрицы на ручной ввод?
#include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;stdio.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru