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

Ошибка в умножении матриц

17.12.2014, 18:07. Показов 332. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток, написал программу умножения матриц, но она выдает не правильный результат.
Подскажите пожалуйста где ошибка и как её исправить.
Я полагаю, что ошибка в выделении памяти для результирующей матрицы.
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<locale.h>
 
int** CreateMatrix ( int w, int h )
    {
        int i,j;
        int *mas;
        int **mas_rows;
        srand( time( NULL ) );
        mas = ( int* )malloc( w*h ); 
        mas_rows = ( int** )malloc( w*sizeof( int* ) );
        for (i = 0; i < w; ++i)
            mas_rows[i] = mas + i*h;
 
            for( i=0; i < w; i++ )
                {
                    for( j=0; j < h; j++ )
                        {
                            mas_rows[i][j] = rand() % 10;
                            printf("%d ", mas_rows[i][j] );
                        }
                    printf("\n");
                }
        return mas_rows;
        free( mas );
        free( mas_rows );
    }
int** MultiMatrix( int **mas1, int **mas2, int w1, int h1, int w2, int h2 )
    {
        int i,j,z;
        if( h1==w2 )
            {
            int *mas;
            int **mas_rows;
            int res=0;
            mas = ( int* )malloc( w1*h2 );
            mas_rows = ( int** )malloc( w1*sizeof( int* ) );
            for (i = 0; i < w1; ++i)
                mas_rows[i] = mas + i*h2;
            for( z=0; z<h1; ++z )
            {
                for(i=0; i<w1; ++i)
                {
                    for(j=0; j<h2; ++j)
                    {
                        mas_rows[i][j] += mas1[i][z]*mas2[z][j];
                        //printf("%d ", mas_rows[i][j]);
                    }
                    //printf("\n");
                }
            }
            return mas_rows;
        }
        else
            {
                printf( "Не корректные размеры матриц! \n" );
                system( "pause" );
                return 0;
                exit( 1 );
            }
    }
void main ( int argc, char **argv )
    {
        setlocale( LC_ALL, "Russian" );
        int w, h, w1, h1, w2, h2, i, j;
        int** mas1;
        int** mas2;
        int** res;
        printf( "Первая матрица:\n" );
        printf( "Введите кол-во строк первой матрицы: " );
        scanf_s( "%d", &w );
        w1=w;
        printf( "\nВведите кол-во столбцов первой матрицы: " );
        scanf_s( "%d", &h );
        h1=h;
        mas1 = CreateMatrix( w, h );
        printf( "\nВторая матрица:\n" );
        printf( "Введите кол-во строк второй матрицы: " );
        scanf_s( "%d", &w );
        w2=w;
        printf( "\nВведите кол-во столбцов второй матрицы: " );
        scanf_s( "%d", &h );
        h2=h;
        mas2 = CreateMatrix( w, h );
        printf( "\nПроизведение матриц:\n" );
        res=MultiMatrix( mas1, mas2, w1, h1, w2, h2 );
        for( i=0; i<w1; i++)
        {
             for(j=0; j<h2; j++)
             {
                 printf("%d ", res[i][j]);
             }
             printf("\n");
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2014, 18:07
Ответы с готовыми решениями:

Ошибка при умножении матриц
при запуске выводит Error using * Inner matrix dimensions must agree. c = 8; ...

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

Ошибка при умножении матриц, индекс за пределами диапазона
private void button1_Click(object sender, EventArgs e) { int...

Произведение матриц. Не могу разобраться, где ошибка в умножении, перемножает, конечно, но неправильно...
Даны три datagridviev, два из них для ввода пользователем матрицы а третья для вывода. Не могу...

0
17.12.2014, 18:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.12.2014, 18:07
Помогаю со студенческими работами здесь

Параллельное вычисление при умножении матриц
Доброго времени суток. Есть программа для умножения квадратных матриц (хотелось бы конечно и не...

Проверить ассоциативность при умножении матриц
Делаю лабораторную с дискретной математики. Нужно проверить ассоциативность при умножении матриц. ...

Ошибки при умножении динамических матриц
В строке ввода в вызывающее окружение матрицы выдает ошибку : &quot;Вызвано исключение по адресу...

При умножении матриц результат равен нулю
При умножении матриц мне вместо нормального ответа выводит нули, почему? помогите плиз... #include...


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

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

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