Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/432: Рейтинг темы: голосов - 432, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5

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

23.10.2008, 19:39. Показов 89641. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред.
Подскажите в чем проблема пожалуйста.Размеры матрицы передаются через командную строку, такое задание ...
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");
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2008, 19:39
Ответы с готовыми решениями:

Возведение матриц в степени, перемножение и сложение матриц
Даны 3-ех элементные вещественные векторы x и y и квадратные матрицы A и B. Вычислить: (A 2 * x, y) + (B 2 * y, x) + (A * B * x, y) ...

Перемножение матриц
Привет. Помогите пожалуйста решить нетрудную задачу.Заранее спасибо. (если можно рабочую версию) Дано два двумерных массива ...

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

12
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
23.10.2008, 19:55
вот это умножение матриц, ты просто перепутал индексы
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];
4
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
23.10.2008, 20:56  [ТС]
Изменил на это не помогло, у меня вроде тоже самое было..
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 сравнивается я там понимаю потому что квадратные матрицы перемножают?
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.10.2008, 09:12
пардон, просто я обычно первым индексом ставлю i, потом - j... ну и так далее...
а еще у меня вопрос, почему это ты результирующую матрицу не снуляешь перед умножением? там же у тебя мусор хранится, а ты к нему еще и что-то прибавляешь, попробуй м3 в ноль выставить...
0
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
25.10.2008, 13:46  [ТС]
Цитата Сообщение от WooDooMan Посмотреть сообщение
пардон, просто я обычно первым индексом ставлю i, потом - j... ну и так далее...
а еще у меня вопрос, почему это ты результирующую матрицу не снуляешь перед умножением? там же у тебя мусор хранится, а ты к нему еще и что-то прибавляешь, попробуй м3 в ноль выставить...
Да забыл обнулить, и ещё ошибку нашел, double это %f ...
Сделал так всеравно станные числа выдает, изменил матрицы на инт все работает...
Не понимаю почему когда тип дабл ставлю не правильно считает
0
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
25.10.2008, 14:06
d-503,технически,double это %lf
0
0 / 0 / 0
Регистрация: 18.10.2008
Сообщений: 5
31.10.2008, 21:48  [ТС]
Меня препод заставил переделать через функцию и динамический массив , теперь не работает, при компиляции ) ошибок, запускаю прогу ввожу матрицы и сразу вылетает ошибка. Компилю в 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 секунд
Заметил закономерность когда кол-во вводимых строк больше чем кол-во столбцов, то тогда выдает ошибку. Я так понимаю ошибка в выделение памяти.В чем проблема?
0
1 / 1 / 0
Регистрация: 11.11.2010
Сообщений: 6
19.02.2011, 20:50
Добавлено через 25 минут 40 секунд
Заметил закономерность когда кол-во вводимых строк больше чем кол-во столбцов, то тогда выдает ошибку. Я так понимаю ошибка в выделение памяти.В чем проблема?
Ошибку выдает потому что невозможно умножить 2 матрицы если у первой меньше строк чем столбиков у второй Математика*
1
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
19.02.2011, 21:11
Цитата Сообщение от d-503 Посмотреть сообщение
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред.
Подскажите в чем проблема пожалуйста.Размеры матрицы передаются через командную строку, такое задание ...
когдато решал подобную задачу на удалено удалено

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

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

Не по теме:

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

0
1 / 1 / 0
Регистрация: 11.11.2010
Сообщений: 6
20.02.2011, 12:28
Цитата Сообщение от Nameless One Посмотреть сообщение

Не по теме:

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

не важно, вдруг еще кто то будет просматривать эту тему ... как я например
0
5 / 5 / 0
Регистрация: 21.02.2010
Сообщений: 21
21.05.2011, 18:49
Bossea,
твой код не работает )
на 13 строку орет
0
2 / 2 / 0
Регистрация: 14.04.2011
Сообщений: 4
04.04.2012, 20:20
Мне бы не хотелось создавать новую тему, потому и хочу спросить здесь:
У меня задача перемножить две квадратные матрицы 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]);
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.04.2012, 20:20
Помогаю со студенческими работами здесь

Перемножение матриц
Доброго времени суток! У меня есть две матрицы: первая k x m и вторая u x s размерностей. Нужно их перемножить. Подскажите, пожалуйста, в...

Перемножение матриц
Перемножить матрицы m*n и m*p где заданы константы n=1000,m=1100,p=12000

Перемножение 2-ух матриц
Помогите пожалуйста с перемножением 2-ух матриц? в долгу не останусь) Выделение памяти написал, а вот как использовать с умножением, и...

Перемножение матриц
Как сделать перегрузку *= для матриц ?! Был такой вариант: Matrix&amp; Matrix::operator *= (const Matrix &amp;rhs) { Matrix...

Перемножение матриц
Делаю перемножение матриц. В результате выдает некорректные числа #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru