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

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

Войти
Регистрация
Восстановить пароль
 
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
#1

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

11.08.2014, 16:40. Просмотров 411. Ответов 4
Метки нет (Все метки)

Добрый день всем!
Такой вопрос. Создала свой класс "двухмерной" матрицы. Хочу создать независимую функцию, которая будет умножать две приходящие матрицы. С указателем на указатели проблем не возникло. Но решила для быстроты работы сделать через одномерные массивы(все мы знаем, что двумерный массив - обман компилятора).
Вотъ.
Но возникла проблема... Не получается сообразить какой же алгоритм использовать для умножения одномерных массивов путём правил умножения двухмерных матриц.
Мозги под конец рабочего дня уже не те. В строке 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");
}
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2014, 16:40     Создать независимую функцию, которая будет умножать две матрицы
Посмотрите здесь:

Написать функцию которая будет умножать любую строку на уже заданную матрицу - C++
Написать функцию которая будет умножать любую строку на уже заданную матрицу

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

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

Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы - C++
Создать функцию, которая меняет местами первую и последнюю строки квадратной матрицы и находит произведение элементов главной диагонали.

какими средствами пользоваться для того, чтобы умножать матрицы, складывать матрицы? - C++
Кто знает скажите плз какими средствами пользоваться для того, чтобы умножать матрицы, складывать матрицы. Самому как-то лень писать эту...

Напишите функцию, которая будет принимать один параметр - C++
Напишите функцию, которая будет принимать один параметр. Функция должна вызывать себя столько раз, сколько задано этим параметром. Если...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,013
11.08.2014, 16:43     Создать независимую функцию, которая будет умножать две матрицы #2
В код не вчитывался, поэтому вопрос такой: для двумерного массива работало?
Алгоритм не меняется, всего лишь обращение к элементу i,j выносится в отдельную функцию, которая знает какой элемент одномерного массива взять.
zss
Модератор
Эксперт С++
6322 / 5906 / 1913
Регистрация: 18.12.2011
Сообщений: 15,189
Завершенные тесты: 1
11.08.2014, 16:55     Создать независимую функцию, которая будет умножать две матрицы #3
Как альтернатива - перегрузите
C++
1
2
3
4
int& Matrix::operator()(int i,int j)
{
   return mas[i*mCols+j];
}
Тогда к элементу массива обращайтесь как
matrix1(i,j), result(i,j) и т.д.

Кстати, а какого .... массив у Вас int а не double?
Тамика
Котовчанин
870 / 450 / 143
Регистрация: 16.02.2010
Сообщений: 2,954
Записей в блоге: 27
11.08.2014, 16:57  [ТС]     Создать независимую функцию, которая будет умножать две матрицы #4
Цитата Сообщение от 0x10 Посмотреть сообщение
которая знает какой элемент одномерного массива взять.
Вот с этим я и не могу разобраться.

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
Кстати, а какого .... массив у Вас int а не double?
Пока что int. А что?
Тренируюсь на инте. Потом шаблон сделаю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.08.2014, 17:13     Создать независимую функцию, которая будет умножать две матрицы
Еще ссылки по теме:

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

Напишите функцию, которая получает две переменные целого типа: A и B - C++
Напишите функцию, которая получает две переменные целого типа: A и B. Если их значения не равны, то функция присваивает каждой переменной...

Напишите функцию, которая получает две переменные целого типа - C++
9. Напишите функцию, которая получает две переменные целого типа: A и B. Если их значения не равны, то функция присваивает каждой...

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

Динамические структуры данных ( функцию, которая будет удалять i-ый элемент) - C++
Помогите написать функцию, которая будет удалять i-ый элемент из структуры.Я очень плохо понимаю как это сделать.Кое-что наваял, но ...

Как передать две целочисленные переменные в функцию, которая заполняет массив? - C++
Всем привет, не могу разобраться как написать функцию для заполнения массива, а именно: Изначально размерность(число строк и столбцов)...


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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
11.08.2014, 17:13     Создать независимую функцию, которая будет умножать две матрицы #5
Тамика, ну вы конечно намудрили. Если имеется желание моделировать двумерный массив одномерным то все же не стоит отказываться от алгоритма умножения для двумерного массива. Это будет выглядеть примерно так:
C++
1
2
3
4
for(int i = 0; i < rows; ++i)
    for(int j = 0; j < colm; ++j)
        for(int s = 0; s < colm; ++s)
            result[i + j * colm] += m[s + i * colm] * m[s * row + j];
На самом деле код не проверял, но тут главное идея.
Yandex
Объявления
11.08.2014, 17:13     Создать независимую функцию, которая будет умножать две матрицы
Ответ Создать тему
Опции темы

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