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

Умножение двух матриц, ответ записывается в третью матрицу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не хватает одного конструктора копий http://www.cyberforum.ru/cpp-beginners/thread766687.html
Вообщем поставил в коде вывод сообщений через cout, чтобы проследить кто и в какой момент запускается, и подсчитал следующий вывод : В конструкторе копий В функцие operator=() В конструкторе копий В конструкторе копий В функцие operator=() В конструкторе копий Но похоже, что четвертого пункта нету. То есть конструктор копий запускается три раза, а должен 4.
C++ Преимущества указателя? Какая разница между? MyObject * object = new MyObject; // и MyObject object; Какие преимущества дает использование указателя на объект с последующим выделением памяти под него по сравнению с просто объектом. (помимо того что использование указателя может давать утечки памяти:D) http://www.cyberforum.ru/cpp-beginners/thread766685.html
C++ оздать класс "измерения" с открытыми данными высота и ширина
Создать класс "измерения" с открытыми данными высота и ширина. С помощью наследования создать четыре класса: 1. прямоугольник - для расчёта площади прямоугольника 2. прямоугольный треугольник - для расчёта площади прямоугольного треугольника. 3. цилиндр - для расчёта полной поверхности цилиндра 4. параболоид - для расчёта объёма параболоида. В главной функции программы инициализировать...
Определить класс "Модель" C++
Детали изделия в качестве объектов Определить класс Модель Данные: номер изделия, номер детали, стоимость детали Методы: 1. конструктор 2. деструктор 3. Установка данных Если номер модели больше нуля, инициализируем данные, иначе выводим сообщение об ошибке: "Номер модели должен быть больше нуля!". Если номер детали в диапазоне от нуля до 1000, инициализируем данные, иначе выводим...
C++ создать программу с использованием класса http://www.cyberforum.ru/cpp-beginners/thread766648.html
Написать программу, в которой используется класс myclass для задания значений "а" для объектов "ob1" и "ob2" и вывода на экран этих значений для каждого объекта.
C++ С использованием структуры написать программу С использованием структуры написать программу, которая: 1. запрашивает у пользователя кол-во видов техники 2. просит ввести название каждого выбранного вида техники 3. просит ввести кол-во покупаемых единиц каждого вида техники 4. просит ввести цену на единицу данного вида техники 5. выводит на экран итоговую информацию в виде: Вы выбрали следующие виды техники: .... (список выбранных... подробнее

Показать сообщение отдельно
truestyle
0 / 0 / 0
Регистрация: 14.03.2013
Сообщений: 11
14.03.2013, 12:42     Умножение двух матриц, ответ записывается в третью матрицу
Здравствуйте, товарищи! Я столкнулся с той же задачей. Собственно, сам алгоритм реализован, и вроде бы всё работает, но программа вылетает на вводе следующих размеров матриц (6,5; 5,2), (5,6; 6,2), (5,2; 2,3). Возможно ещё есть какие-то значения. Причем в режиме дебага всё хорошо работает. Среда разработки - Codeblocks 12.11. Компилятор MinGW. Помогите, пожалуйста, разобраться в чём дело. Вот код...

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include <iostream>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int output(int *a, int ai, int aj); //Вывод массива
 
int gen(int *a, int ai, int aj);    //Генерация массива
 
int prod(int *a, int ai, int aj, int *b, int bi, int bj, int *c);  //Перемножение матриц a и b
 
int main()
{
    int **t, **r, **c;      /*Массивы*/
    int xt, yt, xr, yr;     /*Их размеры*/
 
    cout <<"Input sizes for first matrix" <<endl;
    cin >> xt >> yt;
 
     if ( (xt <= 0) || (yt <= 0) )
     {
         cout <<"Incorrect size of matrix" << endl;
         exit(-1);
     }
 
    cout <<"Input sizes for second matrix" <<endl;
    cin >> xr >> yr;
 
    if ( (xr <= 0) || (yr <= 0) )
    {
         cout <<"Incorrect size of matrix" << endl;
         exit(-1);
    }
 
 
    t = new int*[xt];
 
    for (int j=0; j<xt; j++)
     t[j] = new int[yt];
 
    r = new int*[xr];
 
    for (int j=0; j<xr; j++)
     r[j] = new int[yr];
 
    c = new int*[xt];
 
    for (int j=0; j<xt; j++)
    c[j] = new int[yr];
 
     srand(time(NULL));
 
    gen(&t[0][0], xt, yt);
    gen(&r[0][0], xr, yr);
 
    cout << "First matrix" <<endl;
    output(&t[0][0], xt, yt);
    cout<<endl;
 
    cout << "Second matrix" <<endl;
    output(&r[0][0], xr, yr);
    cout<<endl<<endl;
 
    if (prod(&t[0][0], xt, yt, &r[0][0], xr, yr, &c[0][0]) == -1)
    {
        cout << "Incorrect size of matrix for product" <<endl;
        exit(-1);
    }
 
    output(&c[0][0], xt, yr);
 
    return 0;
}
 
int output(int *a, int ai, int aj)
{
        int i,j;
 
        for(i=0; i<ai; i++)
        {
            for (j=0; j<aj; j++)
            {
                cout<< *(a + aj*i + j) << "\t";
            }
 
            cout<<endl;
        }
        return 1;
}
 
int gen(int *a, int ai, int aj)
{
 
    if ( (ai <= 0) || (aj <= 0) )
    {
        cout<<"Incorrect size of matrix"<<endl;
        exit(0);
    }
 
    else
    {
        int i,j;
 
        for(i=0; i<ai; i++)
        {
            for (j=0; j<aj; j++)
            {
                *(a + aj*i + j) = rand()%10;
            }
        }
 
        return 1;
    }
}
 
int prod(int *a, int ai, int aj, int *b, int bi, int bj, int* c)
{
    if (aj != bi) return -1;
 
    else
    {
        cout <<"Product of 2 matrix" <<endl;
 
        int s=0;
 
        for (int i=0; i<ai; i++)
        {
            for (int j=0; j<bj; j++)
            {
                s=0;
 
                for (int k=0; k<aj; k++)
                {
                    s = s + (*(a + i*aj + k)) * (*(b + bj*k + j));
                }
 
                *(c + bj*i + j) = s;
            }
        }
 
        return 1;
    }
}
 
Текущее время: 18:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru