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

Создать независимую функцию, которая будет умножать две матрицы - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка операторов: Можно ли вынести "тело" оператора (расчеты) из H в CPP? http://www.cyberforum.ru/cpp-beginners/thread1241165.html
Помогите новичку! Пишу класс и вынес его в отдельные файлы *.CPP и *.H Теперь пытаюсь переопределить операторы. Начал с = По примеру отсюда http://habrahabr.ru/post/132014/ class Integer { private: int value; public: Integer& operator=(const Integer& right) { if (this == &right) { return *this; }
C++ Запуск программы с параметрами с командной строки Добрый день. Хочу решить простую задачу. Пользователь должен запустить программу с параметрами с консоли. Параметров может быть 2 или 3. Либо две символьные строки (массива char), либо две строки и целочисленная переменная. Написал такой код: #include "stdafx.h" #include <iostream> #include "header.h" using namespace std; int _tmain(int argc, char argv) { char path1 = { 0 }, path2 = {... http://www.cyberforum.ru/cpp-beginners/thread1241150.html
Временные файлы папки Temp - как избежать ее удаления C++
Подскажите пожалуйста! Есть программа, после ее обновления папка sql удаляется из временной папки TEMP... Что можно сделать, чтобы эта папка не удалялась вместе с файлами после обновления?
C++ Консоль не запускается из-за отсутствия DLL
Вот что выдал мне компьютер после попытки запустить мою консоль. Как это исправить? Почему консоль не запускается? Может быть, дело в том, что на этом компьютере не установлено Visual Studio, в которой я сделал эту консоль?
C++ Переопределение размера массива указателей http://www.cyberforum.ru/cpp-beginners/thread1241120.html
Доброе время суток. Столкнулся с неожиданно проблемой, не могу решить. Поиск по форуму ничего не дал. Есть элементарный код: #include <iostream> using namespace std; void main() { int i=0; const int n = 3;
C++ Чтение файлов - исправить ошибки в коде Добрый день. Возникла проблема, с которой раньше не сталкивался: файл не открывается. Искал с интернете, в учебниках, в предыдущих программах, которые писал - ничего не работает. #include "stdafx.h" #include <iostream> #include <fstream> using namespace std; int _tmain(int argc, _TCHAR* argv) { подробнее

Показать сообщение отдельно
Тамика
Котовчанин
 Аватар для Тамика
859 / 439 / 129
Регистрация: 16.02.2010
Сообщений: 2,537
Записей в блоге: 27
11.08.2014, 16:40     Создать независимую функцию, которая будет умножать две матрицы
Добрый день всем!
Такой вопрос. Создала свой класс "двухмерной" матрицы. Хочу создать независимую функцию, которая будет умножать две приходящие матрицы. С указателем на указатели проблем не возникло. Но решила для быстроты работы сделать через одномерные массивы(все мы знаем, что двумерный массив - обман компилятора).
Вотъ.
Но возникла проблема... Не получается сообразить какой же алгоритм использовать для умножения одномерных массивов путём правил умножения двухмерных матриц.
Мозги под конец рабочего дня уже не те. В строке 94 какая-то бага.
Вот код(строго не судите, код пока поверхностно проработан)
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
#include <iostream>
 
class Matrix 
{
private: 
    int *mas;
    int mRows;
    int mCols;
 
public:
    ~Matrix()
    {
        delete mas;
    }
 
    Matrix(int rows, int cols)
    {
        mRows = rows;
        mCols  = cols;
        generate();
    }
 
    Matrix(int rows, int cols, int n)
    {
        mRows = rows;
        mCols  = cols;
        generateOne(n);
    }
 
    void generate()
    {
        mas = new int[mRows*mCols];
 
        for (int i = 0; i < mCols*mRows; ++i)
                mas[i] = rand()%10;
    }
 
    void generateOne(int n)
    {
        mas = new int[mRows*mCols];
 
        for (int i = 0; i < mCols*mRows; ++i)
                mas[i] = n;
    }
     
    int getColumns()
    {
        return mCols;
    }
 
    int getRows()
    {
        return mRows;
    }
 
    void show()
    {
        std::cout << std::endl;
        std::cout << "*******************************";
        std::cout << std::endl;
        int count = 0;
        for (int i = 0; i < mCols*mRows; ++i)
        {
            std::cout << mas[i] << " ";
            ++count;
            if (count == mRows) 
            { 
                    std::cout << std::endl;
                    count = 0;
            }
        }
        std::cout << "\n*******************************";
        std::cout << std::endl;
    }
 
    int& operator[] (const int num)
    {
        if (num < mCols*mRows && num > 0)
            return this->mas[num];
    }
};
 
Matrix multilpy(Matrix& matrix1, Matrix& matrix2)
{
    Matrix result(matrix1.getRows(), matrix2.getColumns(), 0);
    if (matrix1.getColumns() != matrix2.getRows())
        std::cout << "\nWrong matrix parametres!!!";
    else
    {
        for (int i = 0; i < matrix1.getColumns()*matrix2.getRows(); ++i)
            {
                int temp = matrix1[i] * matrix2[i + matrix2.getColumns()];
                // Колл стек гласит, что крэш здесь...  
                result[i] += temp;
            }
            return result;
    }
}
 
int main()
{
    Matrix matrix1(6, 5);
    matrix1.show();
    Matrix matrix2(5, 7);
    matrix2.show();
    Matrix result = multilpy(matrix1, matrix2);
    result.show();
    system("pause>>null");
}
Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru