Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 3
Регистрация: 25.09.2016
Сообщений: 40
1

Умножение матриц (не работает для неквадратных матриц)

04.12.2016, 17:25. Показов 1934. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Написал код для перемножения двух матриц. При вводе квадратной матрицы всё работает нормально.
При вводе матриц с разным количеством столбцов, т.е. 3x2 и 2x3 например, программа вылетает, при этом выдает правильный ответ. Видимо выход за границы массива. Помогите доработать. Заранее спасибо.
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
#include <stdio.h> 
#include <stdlib.h> 
int vvod(int **a, int m, int n){ 
int i,j; 
{ 
for ( i=0;i<m;i++) 
for ( j=0;j<n;j++) 
{ 
a[i][j]=rand()%25-5; 
 
 
}}} 
 
int vivod(int **a, int m, int n){ 
int i,j; 
for ( i=0;i<m;i++){ 
 
for ( j=0;j<n;j++) 
{ 
printf("%4d\t",a[i][j]); 
 
} 
printf("\n");} 
} 
 
//int rogueone(int **c,int **b,int **a,int i,int j ,int k) 
//{ 
//c[i][j] += a[i][k] * b[k][j]; 
//} 
 
int main(void) 
 
 
{ 
 
int **a,**b,**c,h,k,z,x,i,j,m,n,co; 
 
printf("Enter Matrix 1\n"); 
 
scanf("%d",&m); 
scanf("%d",&n); 
scanf("Enter Matrix 2\n"); 
scanf("%d %d",&z,&x); 
if(n!=z){ 
system("pause"); return 0;} 
 
a=(int**)malloc(m*sizeof(int*)); 
b=(int**)malloc(z*sizeof(int*)); 
c=(int**)malloc(m*sizeof(int*)); 
for (i=0;i<m;i++) 
 
 
{ a[i]=(int*)malloc(n*sizeof(int)); 
 
 
} 
for (i=0;i<m;i++) 
 
 
{ b[i]=(int*)malloc(x*sizeof(int)); 
 
 
} 
for (i=0;i<m;i++) 
{ c[i]=(int*)malloc(x*sizeof(int)); 
} 
 
vvod(a,m,n); 
vivod(a,m,n); 
printf("\n\n"); 
vvod(b,z,x); 
vivod(b,z,x); 
printf("\n\n"); 
 
 
 
 
 
for(i = 0; i < m; i++) 
for(j = 0; j < x; j++) 
{ 
co=0;
for(k = 0; k < z; k++) 
{ 
co+=a[i][k]*b[k][j];
c[i][j]=co;
 
//rogueone(c,b,a,i,j,k); 
 
} 
} 
vivod(c,m,x); 
for( i=0;i<m;i++)
     
      
      {   
       free(a[i]);
        
        
      }
    for( i=0;i<z;i++)
     
      
      {   
       free(b[i]);
        
        
      }
    for( i=0;i<m;i++)
     
      
      {   
       free(c[i]);
        
        
      }
    
free(a); 
free(b); 
free(c); 
system("pause"); 
return 0; 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2016, 17:25
Ответы с готовыми решениями:

Умножение матриц работает некорректно
Что не так в этом коде? Вроде же все правильно. Суммируется нормально, а вот умножение...Бывает...

Умножение матриц Си
моя програма считает умножение двух матриц. Вводим одно Число(оно же будет размером двух матриц),...

Параллельное умножение матриц
Всем привет, помогите написать программу) нужно написать программу Параллельное умножение матриц,...

Умножение квадратных матриц
Доброго времени суток. Я опять прошу Вашей неоценимой помощи. Столкнулся с задачей, нужно...

2
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
04.12.2016, 20:01 2
EvgeniyKoval, В смысле оформления кода это совсем не рекорд. Видали и хужей. Но не намного.
0
qwarta
04.12.2016, 21:34     Умножение матриц (не работает для неквадратных матриц)
  #3

Не по теме:

Разбирая чужой код, всегда нахожу для себя что-то новенькое.
Здесь у ТС заинтересовала такая конструкция:

C
1
scanf("Enter Matrix 2\n");
Оказалось, компилятор (MinGW) кушает ее на раз-два, даже не поперхнется.
Как такое происходит, может нужен какой-то особый ключ компилятору?

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

Умножение матриц по Винограду
Для вариантов, предусматривающих решение систем линейных уравнений, умножение матриц и вычисление...

Умножение матриц - коррекция кода
Помогите пожалуйста вроде прогу пральную написал но ответы не совпадают даны две прямоугольные...

Умножение матриц произвольного размера
Доброго времени суток.Нужно написать вот это Написать функцию для умножения матриц произвольного...

Умножение матриц большого размера
Как объявить матрицу из целых чисел размера NxN если это N &lt;=1024? Нужно написать умножение матриц...


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

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