Форум программистов, компьютерный форум CyberForum.ru

Перемножение 2-х матриц - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 376, средняя оценка - 4.61
d-503
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
23.10.2008, 19:39     Перемножение 2-х матриц #1
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред.
Подскажите в чем проблема пожалуйста.Размеры матрицы передаются через командную строку, такое задание ...
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
#include <stdio.h>
#define w 100
 
main(int argc,char *argv[])
{
int i,j,x1,y1,x2,y2,k;
double m1[w][w],m2[w][w],m3[w][w];
 
x1=atoi(argv[1]);
y1=atoi(argv[2]);
x2=atoi(argv[3]);
y2=atoi(argv[4]);
 
if(y1 != x2)
{
    printf("!!!Error!!!\n");
    exit(-1);
}
for(i=0; i < x1; i++)
{
    
    for(j=0; j < y1; j++)
    {
        printf("matr1 A[%d][%d]=", i+1, j+1);
        scanf("%d",&m1[i][j]);
    }
}
 
for(i=0; i < x2; i++)
{
    for(j=0; j <y2; j++)
    {
        printf("matr2 A[%d][%d]=", i+1, j+1);
        scanf("%d",&m2[i][j]);
    }
 
}
 
for (i=0; i < x1; i++)
    for (k=0; k < y2; k++)
        for (j=0;j < x2; j++)
            m3[i][k]+=(m1[i][j])*(m2[j][k]);
 
for(i=0; i < x1; i++)
{
    for(k=0; k < y2; k++)
    {    
        printf("%d " ,m3[i][k]);
        
    }
printf("\n");
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2008, 19:39     Перемножение 2-х матриц
Посмотрите здесь:

C++ Перемножение матриц
Перемножение 2-ух матриц C++
Перемножение матриц. C++
Перемножение матриц C++
C++ перемножение матриц
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
23.10.2008, 19:55     Перемножение 2-х матриц #2
вот это умножение матриц, ты просто перепутал индексы
C++
1
2
3
4
5
  for(int i = 0; i < N; i++)
    for(int j = 0; j < N; j++){
      c[i][j] = 0;
      for(int k = 0; k < N; k++)
        c[i][j] += a[i][k] *b[k][j];
d-503
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
23.10.2008, 20:56  [ТС]     Перемножение 2-х матриц #3
Изменил на это не помогло, у меня вроде тоже самое было..
C++
1
2
3
4
 for (i=0; i < x1; i++)
    for (j=0; j < y2; j++)
            for (k=0;k < x2; k++)
                m3[i][j]+=m1[i][k]*m2[k][j];
c[i][j] = 0; а если эту строчку оставить, то нулевая матрица будет всегда

а с N сравнивается я там понимаю потому что квадратные матрицы перемножают?
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 1
24.10.2008, 09:12     Перемножение 2-х матриц #4
пардон, просто я обычно первым индексом ставлю i, потом - j... ну и так далее...
а еще у меня вопрос, почему это ты результирующую матрицу не снуляешь перед умножением? там же у тебя мусор хранится, а ты к нему еще и что-то прибавляешь, попробуй м3 в ноль выставить...
d-503
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
25.10.2008, 13:46  [ТС]     Перемножение 2-х матриц #5
Цитата Сообщение от WooDooMan Посмотреть сообщение
пардон, просто я обычно первым индексом ставлю i, потом - j... ну и так далее...
а еще у меня вопрос, почему это ты результирующую матрицу не снуляешь перед умножением? там же у тебя мусор хранится, а ты к нему еще и что-то прибавляешь, попробуй м3 в ноль выставить...
Да забыл обнулить, и ещё ошибку нашел, double это %f ...
Сделал так всеравно станные числа выдает, изменил матрицы на инт все работает...
Не понимаю почему когда тип дабл ставлю не правильно считает
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
25.10.2008, 14:06     Перемножение 2-х матриц #6
d-503,технически,double это %lf
d-503
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
31.10.2008, 21:48  [ТС]     Перемножение 2-х матриц #7
Меня препод заставил переделать через функцию и динамический массив , теперь не работает, при компиляции ) ошибок, запускаю прогу ввожу матрицы и сразу вылетает ошибка. Компилю в Visual C 6. Подскажите в чем ошибка.Срочно то завтра сдавать.
Вот новый код:
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
#include <stdio.h>
#include <stdlib.h>
 
void proizv (int **mas1,int **mas2,int x1,int y1,int y2)
{
    int **mas3;
    int i,j,k;
    mas3=(int **)malloc(sizeof(int *)*y2);
    for(i=0; i<y2; i++)
        mas3[i] = (int*)malloc(sizeof(int)*x1);
    
    for(i=0; i < x1; i++)
        for(j=0; j < y2; j++)
            mas3[i][j]=0; 
    
    for (i=0; i < x1; i++)
        for (j=0; j < y2; j++)
            for (k=0;k < y1; k++)
                mas3[i][j]+=mas1[i][k]*mas2[k][j];
    
    printf("Proizvedenie matr = \n\n\n");
    
    for(i=0; i < x1; i++)
        {
            for(j=0; j < y2; j++)
                {    
                    printf("%d ",mas3[i][j]);
        
                }
        printf("\n");
        }
free(mas3);
}
 
int main()
 
{
    int i,j,x1,x2,y1,y2;
    int **mas1;
    int **mas2;
    printf("Vvedite kol-vo strok matrix 1\n");
    scanf("%d",&x1);
    printf("Vvedite kol-vo stolbcov matrix 1\n");
    scanf("%d",&y1);    
    printf("Vvedite kol-vo strok matrix 2\n");
    scanf("%d",&x2);
    printf("Vvedite kol-vo stobcov matrix 2\n");
    scanf("%d",&y2);
    
    if(y1 != x2)
    {
        printf("!!!Error!!!\n");
        exit(-1);
    }
    mas1=(int **)malloc(sizeof(int*)*y1);
    for(i=0; i < x1; i++)
        mas1[i]=(int*)malloc(sizeof(int)*x1);
    
    for(i=0; i < x1; i++)
    {
        for(j=0; j < y1; j++)
        {
        printf("matr1 A[%d][%d]=", i+1, j+1);
        scanf("%d",&mas1[i][j]);
        }
    }
    mas2=(int **)malloc(sizeof(int*)*y2);
    for(i=0; i < x2; i++)
        mas2[i]=(int*)malloc(sizeof(int)*x2);
    
    for(i=0; i < x2; i++)
    {
        for(j=0; j <y2; j++)
        {
            printf("matr2 A[%d][%d]=", i+1, j+1);
            scanf("%d",&mas2[i][j]);
        }
    }
    
    proizv(mas1,mas2,x1,y1,y2); 
    
    free(mas1);
    free(mas2);
}
Добавлено через 8 минут 19 секунд
Ребят видно чет меня переклинело вроде все заработало...

Добавлено через 25 минут 40 секунд
Заметил закономерность когда кол-во вводимых строк больше чем кол-во столбцов, то тогда выдает ошибку. Я так понимаю ошибка в выделение памяти.В чем проблема?
Bossea
0 / 0 / 0
Регистрация: 11.11.2010
Сообщений: 6
19.02.2011, 20:50     Перемножение 2-х матриц #8
Добавлено через 25 минут 40 секунд
Заметил закономерность когда кол-во вводимых строк больше чем кол-во столбцов, то тогда выдает ошибку. Я так понимаю ошибка в выделение памяти.В чем проблема?
Ошибку выдает потому что невозможно умножить 2 матрицы если у первой меньше строк чем столбиков у второй Математика*
агерон
 Аватар для агерон
265 / 264 / 33
Регистрация: 12.10.2009
Сообщений: 1,030
19.02.2011, 21:11     Перемножение 2-х матриц #9
Цитата Сообщение от d-503 Посмотреть сообщение
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред.
Подскажите в чем проблема пожалуйста.Размеры матрицы передаются через командную строку, такое задание ...
когдато решал подобную задачу на удалено удалено

 Комментарий модератора 
См. правила форума:

5.8. Запрещено публиковать ссылки на другие форумы.
Nameless One
20.02.2011, 08:40
  #10

Не по теме:

Bossea, ты бы посмотрел, какого года тема.

Bossea
0 / 0 / 0
Регистрация: 11.11.2010
Сообщений: 6
20.02.2011, 12:28     Перемножение 2-х матриц #11
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

Bossea, ты бы посмотрел, какого года тема.

не важно, вдруг еще кто то будет просматривать эту тему ... как я например
qwrety
5 / 5 / 0
Регистрация: 21.02.2010
Сообщений: 21
21.05.2011, 18:49     Перемножение 2-х матриц #12
Bossea,
твой код не работает )
на 13 строку орет
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.04.2012, 20:20     Перемножение 2-х матриц
Еще ссылки по теме:

Перемножение матриц C++
Перемножение матриц C++
Перемножение матриц C++

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

Или воспользуйтесь поиском по форуму:
Andrew_666
1 / 1 / 0
Регистрация: 14.04.2011
Сообщений: 4
04.04.2012, 20:20     Перемножение 2-х матриц #13
Мне бы не хотелось создавать новую тему, потому и хочу спросить здесь:
У меня задача перемножить две квадратные матрицы 3х3, я написал прогу но выводит тоже бредни:
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
 #include <iostream.h>
 #include <conio.h>
 #include <math.h>
 #include <stdio.h>
void main(void)
{
int i,j,k,a[3][3],b[3][3],c[3][3];
 
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
 
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
cout<<"b["<<i<<"]["<<j<<"]=";
cin>>b[i][j];
}
}
 
 
 for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
for (k=0;k<3;k++)
 c[i][j]=0;
 c[i][j]+=(a[i][k])*(b[k][j]);
}
}
 
 for (i=0;i<3;i++)
{
 for (j=0;j<3;j++)
{
  cout<<c[i][j]<<"\t";
}
 cout<<"\n";
}
 getch();
}
может кто то подсказать...

Добавлено через 23 минуты
Ой тут так, я просо не правильно скопировал

C++
1
2
3
4
5
6
7
 for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
 c[i][j]=0;
for (k=0;k<3;k++)
 c[i][j]+=(a[i][k])*(b[k][j]);
Yandex
Объявления
04.04.2012, 20:20     Перемножение 2-х матриц
Ответ Создать тему
Опции темы

Текущее время: 06:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru