Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
1

Написать программу, реализующую умножение прямоугольных целочисленных матриц

03.12.2013, 16:57. Показов 3324. Ответов 22
Метки нет (Все метки)

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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
void intmas1 (int **mas, int const  n, int const m);
void intmas2(int **mas, int const n, int const m);
int Proizved(int **mas, const int n, const int m);
 
int main()
{
    srand((unsigned)time(0));
    int n=3;
    int m=3;
 
    int **mas = new int*[n];
    for ( int i = 0; i < n; i++)
        mas[i] = new int[m];
        intmas1(mas,n,m);
        intmas2(mas,n,m);
        cout << '\n';
 
 cout << '\n';
 
       cout<< Proizved(mas,n,m);
    return 0;
}
 
void intmas1 (int **mas, const int n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
            mas[i][j]=rand() %10-2;
    }
}
 
void intmas2(int **mas, int const n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
    cout << mas[i][j] << " ";
    cout << endl;
    }
}
int Proizved(int **mas, const int n, const int m)
{
  int i,j,k;
  for ( i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++)
    {
      mas[i][j] = 0;
      for ( k = 0; k < n; k++)
      {
        mas[i][j] += mas[i][k] * mas[k][j];
      }
    }
  }
  return mas[i][j];
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2013, 16:57
Ответы с готовыми решениями:

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

Умножение целочисленных прямоугольных матриц
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #include &lt;cmath&gt; #include &lt;math.h&gt; ...

Умножение прямоугольных матриц
Смотрел на форуме, но у меня все равно не работает( Что не так? void Multiply() { int p,...

Реализовать умножение прямоугольных матриц
Здравствуйте. Только начал заниматься программированием. Начал с азов. но при написании ...

22
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
03.12.2013, 17:26 2
Добавлено через 12 минут
C++
1
return mas[i][j]
исправь на:

C++
1
return **mas;
и в конце main()
перед
C++
1
return 0;
добавь такую строку:
C++
1
system("Pause");
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
03.12.2013, 23:39  [ТС] 3
FAQEnD, просто число выводит, одно
1
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 00:02 4
C++
1
2
3
4
5
6
7
8
9
    Proizved(mas,n,m);
    int i,j;
    for(i = 0; i < n; i++)
    {
        for(j=0; j<m; j++)
            cout<<mas[i][j]<<"      ";
        cout<<endl;
    }
    return 0;
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 00:46  [ТС] 5
FAQEnD, помоги пожалуйста, а в функции где ошибка, а то он не правильно их произведение считает(
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 01:19 6
Цитата Сообщение от Troo Посмотреть сообщение
FAQEnD, помоги пожалуйста, а в функции где ошибка, а то он не правильно их произведение считает(
Скинь свой текущий код
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 19:35  [ТС] 7
FAQEnD,


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 <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
void intmas1 (int **mas, int const  n, int const m);
void intmas2(int **mas, int const n, int const m);
int Proizved(int **mas, const int n, const int m);
 
int main()
{
    srand((unsigned)time(0));
    int n=3;
    int m=3;
 
    int **mas = new int*[n];
    for ( int i = 0; i < n; i++)
        mas[i] = new int[m];
        intmas1(mas,n,m);
        intmas2(mas,n,m);
        cout << '\n';
 Proizved(mas,n,m);
    for(int i = 0; i < n; i++)
    {
        for(int j=0; j<m; j++)
            cout<<mas[i][j]<<"      ";
        cout<<endl;
    }
 
    return 0;
}
 
void intmas1 (int **mas, const int n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
            mas[i][j]=rand() %10-2;
    }
}
 
void intmas2(int **mas, int const n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
    cout << mas[i][j] << " ";
    cout << endl;
    }
}
int Proizved(int **mas, const int n, const int m)
{
  int i,j,k;
  for ( i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++)
    {
      mas[i][j] = 0;
      for ( k = 0; k < n; k++)
      {
        mas[i][j] += mas[i][k] * mas[k][j];
      }
    }
  }
  return **mas;
}
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 19:49 8
у тебя же только 1 матрица есть. А перемножать нужно матрицу на матрицу
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 19:54  [ТС] 9
FAQEnD, ну вот нашу я вторую рандомную, а как её в функцию добавить?

Добавлено через 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
void intmas1 (int **mas, int const  n, int const m);
void intmas2(int **mas, int const n, int const m);
int Proizved(int **mas, const int n, const int m);
 
int main()
{
    srand((unsigned)time(0));
    int n=3;
    int m=3;
 
    int **mas = new int*[n];
    for ( int i = 0; i < n; i++)
        mas[i] = new int[m];
        intmas1(mas,n,m);
        intmas2(mas,n,m);
        cout << '\n';
        intmas1(mas,n,m);
        intmas2(mas,n,m);
 Proizved(mas,n,m);
    for(int i = 0; i < n; i++)
    {
        for(int j=0; j<m; j++)
            cout<<mas[i][j]<<"      ";
        cout<<endl;
    }
 
    return 0;
}
 
void intmas1 (int **mas, const int n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
            mas[i][j]=rand() %10-2;
    }
}
 
void intmas2(int **mas, int const n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
    cout << mas[i][j] << " ";
    cout << endl;
    }
}
int Proizved(int **mas, const int n, const int m)
{
  int i,j,k;
  for ( i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++)
    {
      mas[i][j] = 0;
      for ( k = 0; k < n; k++)
      {
        mas[i][j] += mas[i][k] * mas[k][j];
      }
    }
  }
  return **mas;
}
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 19:56 10
C++
1
2
3
4
5
 intmas1(mas,n,m);
        intmas2(mas,n,m);
        cout << '\n';
        intmas1(mas,n,m);
        intmas2(mas,n,m);
ты работаешь с одной и той-же матрицей, а нужно создать еще одну:
C++
1
2
3
int **mas2 = new int*[n];
    for ( int i = 0; i < n; i++)
        mas2[i] = new int[m];
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:02  [ТС] 11
FAQEnD, не правильное произведение опять, может у меня какая-то ошибка в самой функции?



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
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
 
using namespace std;
void intmas1 (int **mas, int const  n, int const m);
void intmas2(int **mas, int const n, int const m);
void intmas3 (int **mas, int const  n, int const m);
void intmas4(int **mas, int const n, int const m);
int Proizved(int **mas, const int n, const int m);
 
int main()
{
    srand((unsigned)time(0));
    int n=3;
    int m=3;
 
    int **mas = new int*[n];
    for ( int i = 0; i < n; i++)
        mas[i] = new int[m];
        intmas1(mas,n,m);
        intmas2(mas,n,m);
        cout << '\n';
        int **mas2 = new int*[n];
    for ( int i = 0; i < n; i++)
        mas2[i] = new int[m];
        intmas3(mas2,n,m);
        intmas4(mas2,n,m);
  Proizved(mas,n,m);
    for(int i = 0; i < n; i++)
    {
        for(int j=0; j<m; j++)
            cout<<mas[i][j]<<"      ";
        cout<<endl;
    }
    return 0;
}
 
void intmas1 (int **mas, const int n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
            mas[i][j]=rand() %10-2;
    }
}
 
void intmas2(int **mas, int const n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
    cout << mas[i][j] << " ";
    cout << endl;
    }
}
void intmas3 (int **mas, const int n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
            mas[i][j]=rand() %10-2;
    }
}
 
void intmas4(int **mas, int const n, const int m)
{
    int i,j;
    for(i = 0; i < n; i++){
        for(j=0; j<m; j++)
    cout << mas[i][j] << " ";
    cout << endl;
    }
}
int Proizved(int **mas, const int n, const int m)
{
  int i,j,k;
  for ( i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++)
    {
      mas[i][j] = 0;
      for ( k = 0; k < n; k++)
      {
        mas[i][j] += mas[i][k] * mas[k][j];
      }
    }
  }
  return **mas;
}
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:05 12
http://ru.wikipedia.org/wiki/%... 0%B8%D1%86
Почитай внимательно
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:08  [ТС] 13
FAQEnD, да я понимаю, проходили, но ведь не спроста такие числа вообще другие выводит
произведение не правильно считает
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:11 14
Цитата Сообщение от Troo Посмотреть сообщение
FAQEnD, да я понимаю, проходили, но ведь не спроста такие числа вообще другие выводит
произведение не правильно считает
Конечно не правильно
C++
1
mas[i][j] += mas[i][k] * mas[k][j];
нужно считать не произведение матрицы mas * mas, а произведение матриц mas1 * mas2.
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:16  [ТС] 15
FAQEnD, подскажи пожалуйста, как это записать, у меня не получается
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:29 16
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
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
    srand(time(NULL));
    int i, j, mas1[5][5], mas2[5][5], mas3[5][5];
    for(i = 0; i < 5; i++)
        for(j = 0; j < 5; j++)
        {
            mas1[i][j] = rand()%101-50;
            mas2[i][j] = rand()%101-50;
            mas3[i][j] = 0;
        }
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            cout<<mas1[i][j]<<" ";
        }
        cout<<endl;
    }cout<<endl;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            cout<<mas2[i][j]<<" ";
        }
        cout<<endl;
    }
    for(i = 0; i < 5; i++)
        for(j = 0; j < 5; j++)
        {
            for(int k = 0; k < 5; k++)
                mas3[i][j] += mas1[i][k] * mas2[k][j];
        }
 
        cout<<endl;
    for(i = 0; i < 5; i++)
    {
        for(j = 0; j < 5; j++)
        {
            cout<<mas3[i][j]<<" ";
        }
        cout<<endl;
    }
    system("Pause");
    return 0;
}
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:34  [ТС] 17
FAQEnD, а по функциям не получается написать:
C++
1
mas3[i][j] += mas1[i][k] * mas2[k][j];
при объявлении массивов в начале функции, вообще большие числа выводит
C++
1
2
int mas2[n][m];
int mas3[n][m];
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:49 18
Цитата Сообщение от Troo Посмотреть сообщение
FAQEnD, а по функциям не получается написать:
C++
1
mas3[i][j] += mas1[i][k] * mas2[k][j];
при объявлении массивов в начале функции, вообще большие числа выводит
C++
1
2
int mas2[n][m];
int mas3[n][m];
ты хочешь разбить задачу на функции и плюс ко всему сделать массивы динамическими?
если да, то я приду через пару часов и напишу
1
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:52  [ТС] 19
FAQEnD, даа, буду очень благодарна за помощь)
0
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
05.12.2013, 02:06 20
Вводить размеры вида N1 x M1, N2 x M2, где M1 == N2. Иначе посчитать нельзя
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
#include <iostream>
#include <time.h>
using namespace std;
void rand_array(int **mas, int n, int m);
void zero_array(int **mas, int n, int m);
void cout_array(int **mas, int n, int m);
void op_array(int **mas1, int **mas2, int **mas3, int n, int m, int min);
int main()
{
    srand(time(NULL));
    int N1, M1, N2, M2;
    do
    {
        cout<<"Enter N1, M1, N2, M2"<<endl;
        cin>>N1>>M1>>N2>>M2;
        if(N2 != M1)
            cout<<"N2 != M1, Enter other size"<<endl;
    }while(N2 != M1);
    //создаем двухмерный динамический массив
    int **mas1 = new int*[N1];
    int **mas2 = new int*[N2];
    int **mas3 = new int*[N1];
    for ( int i = 0; i < N1; i++)
    {
        mas1[i] = new int[M1];
        mas3[i] = new int[M2];
    }
     for ( int i = 0; i < N2; i++)
    {
        mas2[i] = new int[M2];
    }
 
    //заполняем
    rand_array(mas1, N1, M1);
    rand_array(mas2, N2, M2);
    zero_array(mas3, N1, M2);
    //выводим на экран
    cout_array(mas1, N1, M1);
    cout_array(mas2, N2, M2);
    //считаем
    op_array(mas1, mas2, mas3, N1, M2, N2);
    cout<<endl;
    cout_array(mas3, N1, M2);
    system("Pause");
    return 0;
}
 
void rand_array(int **mas, int n, int m)
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            mas[i][j] = 1+rand()%5;
        }
}
 
void zero_array(int **mas, int n, int m)
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            mas[i][j] = 0;
        }
}
 
void cout_array(int **mas, int n, int m)
{
    for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                cout<<mas[i][j]<<" ";
            }
            cout<<endl;
        }
    cout<<endl;
}
 
void op_array(int **mas1, int **mas2, int **mas3, int n, int m, int min)
{
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        {
            for(int k = 0; k < min; k++)
            {
                mas3[i][j] += mas1[i][k] * mas2[k][j];
            }
        }
}
1
05.12.2013, 02:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2013, 02:06
Помогаю со студенческими работами здесь

Написать программу, реализующую умножение двух матриц
Уважаемые форумчане, горю на контрольной, времени совсем уже нет, сегодня сдаваться идти... Может...

Умножение прямоугольных матриц
добрый вечер. Подскажите пожалуйста как сделать умножение прямоугольных матриц, т.е не nXn , а mxn?...

Транспонирование и умножение прямоугольных матриц
Даны матрицы А и В размерностью NxM. Получить матрицу К=А*A(в степени Т)=В*В(в степени Т). Все...

Умножение прямоугольных вложенных матриц
Добрый день! Помогите пожалуйста реализовать программу. Умножение матриц с ранжомным заполнением я...


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

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