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

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

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

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

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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
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; using namespace std; void...

Умножение прямоугольных матриц
Смотрел на форуме, но у меня все равно не работает( Что не так? void Multiply() { int p, g, n, m, i, j, k, s; float c; ...

22
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
03.12.2013, 17:26
Добавлено через 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  [ТС]
FAQEnD, просто число выводит, одно
1
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 00:02
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  [ТС]
FAQEnD, помоги пожалуйста, а в функции где ошибка, а то он не правильно их произведение считает(
0
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 01:19
Цитата Сообщение от Troo Посмотреть сообщение
FAQEnD, помоги пожалуйста, а в функции где ошибка, а то он не правильно их произведение считает(
Скинь свой текущий код
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 19:35  [ТС]
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
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 19:49
у тебя же только 1 матрица есть. А перемножать нужно матрицу на матрицу
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 19:54  [ТС]
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
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 19:56
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  [ТС]
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
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:05
http://ru.wikipedia.org/wiki/%... 0%B8%D1%86
Почитай внимательно
0
1 / 1 / 1
Регистрация: 09.10.2013
Сообщений: 73
04.12.2013, 20:08  [ТС]
FAQEnD, да я понимаю, проходили, но ведь не спроста такие числа вообще другие выводит
произведение не правильно считает
0
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:11
Цитата Сообщение от 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  [ТС]
FAQEnD, подскажи пожалуйста, как это записать, у меня не получается
0
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:29
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  [ТС]
FAQEnD, а по функциям не получается написать:
C++
1
mas3[i][j] += mas1[i][k] * mas2[k][j];
при объявлении массивов в начале функции, вообще большие числа выводит
C++
1
2
int mas2[n][m];
int mas3[n][m];
0
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
04.12.2013, 20:49
Цитата Сообщение от 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  [ТС]
FAQEnD, даа, буду очень благодарна за помощь)
0
 Аватар для FAQEnD
43 / 43 / 15
Регистрация: 15.12.2012
Сообщений: 88
05.12.2013, 02:06
Вводить размеры вида 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2013, 02:06
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru