Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VladMAN
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 15
#1

Сложение и умножение матриц - C++

10.12.2012, 00:23. Просмотров 936. Ответов 10
Метки нет (Все метки)

Даны квадратные матрицы A(nxn), B(nxn), C(nxn) написать программу вычисления (A+B)*C. Помогите со сложением и умножением

Вот мои наработки

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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
#include <fstream>
#include <stdio.h>
#include "time.h"
#include <stdlib.h>
#include <ctime>
 
using namespace std;
 
int main()
{
setlocale(0, "");
int A[255][255];
printf("Enter N: ");
int N;
scanf("%d", &N);
srand(time(NULL));
for (int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
{
A[i][j] = rand()%100;
printf("%d ", A[i][j]);
}
printf("\n");
}
int B[255][255];
printf("Enter M: ");
int M;
scanf("%d", &M);
srand(time(NULL));
for (int n=0; n<M; n++)
{
for (int m=0; m<M; m++)
{
B[n][m] = rand()%100;
printf("%d ", B[n][m]);
}
printf("\n");
}
int C[255][255];
printf("Enter V: ");
int V;
scanf("%d", &V);
srand(time(NULL));
for (int k=0; k<V; k++)
{
for (int p=0; p<V; p++)
{
C[k][p] = rand()%100;
printf("%d ", C[k][p]);
}
printf("\n");
}
int Q[255][255];
for (int r=0; r<N; r++)
{
for (int t=0; t<N; t++)
{
Q[r][t] = A + B;
}
cout << endl;
}
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2012, 00:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение и умножение матриц (C++):

Сложение и умножение матриц - C++
Даны матрицы A,B,C порядка n. Найти матрицу D=(A+B)C

Умножение, сложение и транспонирование матриц - C++
помогите написать программу на языке с++ которая выполняет умножение, сложение и транспонирование матриц

Сложение и умножение матриц, Побочную диоганаль поменять местами - C++
Нужна программа выполняющая *Сложение и умножение матриц, Побочную диоганаль поменять местами * НАРОД ПОМОГИТЕ!!! у кого есть или кто...

Ввод, транспонирование, умножение и сложение матриц используя функций - C++
Есть две матрицы, каждую из них надо транспонировать и умножить на себя, полученные две матрицы сложить, т.е в конце должна выводиться одна...

Задано 4 матрицы. Провести сложение, умножение, умножение на число - C++
Задано 4 матрицы A,B,C,D размером 4х4.Вычеслить такие матрицы: F,G,T. G=3/4 A+B F=B*(2D) T=c/5

Умножение треугольных матриц«Методы обработки разреженных матриц» - C++
Нужно перемножить треугольные матрицы в обычном виде и в свёрнутом. С обычным проблем нет. Доступ к элементам свёрнутой матрицы...

10
vano47
2 / 2 / 0
Регистрация: 12.05.2012
Сообщений: 20
10.12.2012, 01:16 #2
ну и чего у тебя возникли проблемы?

сумма:
C++
1
2
3
4
5
6
for (int r=0; r<N; r++)\\ и тут проверка нужна, что размерности матриц совпадают
{
for (int t=0; t<N; t++)
{
Q[r][t] = A[r][t] + B[r][t];
}}
умножение чуть посложней, но тоже реально

C++
1
2
3
4
5
6
7
for (int r=0; r<N; r++)
{
for (int t=0; t<N; t++)
{
for (int z=0; z<N; z++)
G[r][t] += A[r][z] * B[z][t];
}}}
не забудь сделать проверки, потму что при умножении матриц число строк должно совпадать с числом столбцов другой матрицы, вообщем подумаешь.
и в циклах фор, можешь исползовать i и j, ведь ты их всегда обнуляешь.
0
Kuzia domovenok
1952 / 1805 / 140
Регистрация: 25.03.2012
Сообщений: 6,248
Записей в блоге: 1
10.12.2012, 01:19 #3
Цитата Сообщение от vano47 Посмотреть сообщение
for (int r=0; r<N; r++)
{
for (int t=0; t<N; t++)
{
for (int z=0; t<N; t++)
G[r][t] = A[r][z] * B[z][t];
}}}
скорее
C++
1
2
3
4
5
6
7
for (int r=0; r<N; r++)
{
for (int t=0; t<N; t++)
{
for (int z=0; t<N; t++)
G[r][t] += A[r][z] * B[z][t];
}}}
1
vano47
2 / 2 / 0
Регистрация: 12.05.2012
Сообщений: 20
10.12.2012, 01:21 #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
скорее
C++
1
2
3
4
5
6
7
for (int r=0; r<N; r++)
{
for (int t=0; t<N; t++)
{
for (int z=0; t<N; t++)
G[r][t] += A[r][z] * B[z][t];
}}}
да точно! исправил))
1
VladMAN
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 15
10.12.2012, 21:53  [ТС] #5
В общем я сделал всё так, но у меня появляется окно с прекращением работы программы. Почему так?
0
vano47
2 / 2 / 0
Регистрация: 12.05.2012
Сообщений: 20
11.12.2012, 18:59 #6
Цитата Сообщение от VladMAN Посмотреть сообщение
В общем я сделал всё так, но у меня появляется окно с прекращением работы программы. Почему так?
какое окно? какой компилятор используете? результат выводиться? скрин можно выложить.
0
VladMAN
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 15
11.12.2012, 21:51  [ТС] #7
Вот оно
0
Миниатюры
Сложение и умножение матриц  
vano47
2 / 2 / 0
Регистрация: 12.05.2012
Сообщений: 20
11.12.2012, 22:55 #8
хм.. не знаю что это((

напиши весь код.
1
VladMAN
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 15
12.12.2012, 19:18  [ТС] #9
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
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <conio.h>
#include <fstream>
#include <stdio.h>
#include "time.h"
#include <stdlib.h>
#include <ctime>
 
using namespace std;
 
int main()
{
     setlocale(0, "");
     int A[255][255];
     printf("Enter N: ");
     int N;
     scanf("%d", &N);
     srand(time(NULL));
     for (int i=0; i<N; i++)
     {
         for (int j=0; j<N; j++)
         {
             A[i][j] = rand()%100;
             printf("%d ", A[i][j]);
         }
         printf("\n");
     }
     int B[255][255];
     printf("Enter M: ");
     int M;
     scanf("%d", &M);
     srand(time(NULL));
     for (int n=0; n<M; n++)
     {
         for (int m=0; m<M; m++)
             {
                 B[n][m] = rand()%100;
                 printf("%d ", B[n][m]);
             }
         printf("\n");
     }
     int C[255][255];
     printf("Enter V: ");
     int V;
     scanf("%d", &V);
     srand(time(NULL));
     for (int k=0; k<V; k++)
     {
         for (int p=0; p<V; p++)
             {
                  C[k][p] = rand()%100;
                  printf("%d ", C[k][p]);
             }
           printf("\n");
      }
      int Q[255][255];
      for (int r=0; r<N; r++)
      {
          for (int t=0; t<N; t++)
          {
                 Q[r][t] = A[r][t] + B[r][t];
          }
          cout << endl;
      }
      int G[255][255];
      for (int y=0; y<N; y++)
      {
          for (int x=0; x<N; x++)
          {
              G[y][x] = Q[y][x] * C[y][x];
          }
          cout << endl;
      }
    return 0;
}
Проверь у себя, может это у меня с компом что-то
0
Kuzia domovenok
1952 / 1805 / 140
Регистрация: 25.03.2012
Сообщений: 6,248
Записей в блоге: 1
12.12.2012, 19:26 #10
1) 5 матриц 255 на 255 лучше не выделять в стеке, а выделять динамически
2) убрать бардак из подключаемых заголовков. Достаточно <cstdio>, <ctime> и <cstdlib>
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
     int A[25][25];
     printf("Enter N: ");
     int N;
     scanf("%d", &N);
     srand(time(NULL));
     for (int i=0; i<N; i++)
     {
         for (int j=0; j<N; j++)
         {
             A[i][j] = rand()%100;
             printf("%d ", A[i][j]);
         }
         printf("\n");
     }
     int B[25][25];
     printf("Enter M: ");
     int M;
     scanf("%d", &M);
     srand(time(NULL));
     for (int n=0; n<M; n++)
     {
         for (int m=0; m<M; m++)
             {
                 B[n][m] = rand()%100;
                 printf("%d ", B[n][m]);
             }
         printf("\n");
     }
     int C[25][25];
     printf("Enter V: ");
     int V;
     scanf("%d", &V);
     srand(time(NULL));
     for (int k=0; k<V; k++)
     {
         for (int p=0; p<V; p++)
             {
                  C[k][p] = rand()%100;
                  printf("%d ", C[k][p]);
             }
           printf("\n");
      }
      int Q[255][255];
      for (int r=0; r<N; r++)
      {
          for (int t=0; t<N; t++)
          {
                 Q[r][t] = A[r][t] + B[r][t];
          }
          
      }
      int G[255][255];
      for (int y=0; y<N; y++)
      {
          for (int x=0; x<N; x++)
          {
              G[y][x] = Q[y][x] * C[y][x];
          }
      }
    return 0;
}
0
VladMAN
0 / 0 / 0
Регистрация: 10.12.2012
Сообщений: 15
13.12.2012, 17:58  [ТС] #11
Да спасибо работает. Но только прога выводит матрицы. А Сложение и умножение не считает. Может кто подскажет как по другому сделать. А выражение такое (A+B)*C
0
13.12.2012, 17:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 17:58
Привет! Вот еще темы с ответами:

Умножение=сложение и сдвиг - C++
Доброго времени суток У меня возникла такая вот ситуация) Нужно реализовать умножение двух чисел, которые вводяться с клавиатуры, через...

Переделать сложение на умножение - C++
Вот код складывает элементы между первым и последним нулем,а как сделать так что бы он их перемножал? #include &lt;iostream&gt; #include...

Сложение, вычитание, умножение - C++
Доброго времени суток! Помогите с задачей: Написать функцию, которая складывает, вычитает или умножает два целых числа и возвращает...

Матрицы и вектора, сложение и умножение - C++
Цель работы Освоить способ динамического захвата и освобождения памяти под двумерные массивы данных (матрицы) – при помощи оператора new...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru