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

Умножение матриц - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму первых N элементов ряда http://www.cyberforum.ru/cpp-beginners/thread53077.html
Помогите пожалуйста решить такую задачу: Вычислить сумму первых N элементов ряда:X-X^2/2+X^3/3-X^4/4+X^5/5..... . Вычисление проводить до тех пор пока модуль очередного элемента больше E(эпсиолон).
C++ Объявление функции Всем доброго времени суток! Подскажите пожалуйста, как правильно объявить функцию, которая возвращает указатель на двумерный массив. И какое именно значение будет возвращать эта функция? http://www.cyberforum.ru/cpp-beginners/thread53071.html
C++ Поменять местами первую и последнюю цифры числа
Поменять местами первую и последнюю цифры числа. Помогите пожалуйста, а то с C++ вообще никогда не приходилось работать :(
C++ Небольшая помощь
Ктото может написать небольшой модуль которий будет считивать какуюта інформацию с файла *тхт каждих 2 сек ?? спс
C++ E2089) http://www.cyberforum.ru/cpp-beginners/thread53057.html
Доброго времени суток! При компиляции выпала ошибка - Calc.cpp(237): E2089 Identifier 'use_func' cannot have a type qualifier Возникла она при попытке переделать обычный код в код, использующий namespace для разделения данных по модулям... namespace Parser{ double use_func(string f_name); }
C++ строки матрици Упорядочить строки матрицы размером М*N за увеличением минимального елемента строки. подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
01.03.2010, 06:38     Умножение матриц
Я начал такую затею, но есть проблема доступа к элементам в виде [i][j].
Можно ли ее решить???

Добавлено через 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
std::ostream &operator << (std::ostream &out, BaseMatrix<int> &m)
{
    for(UINT i = 0; i < m.nRow; i++)
    {
        for(UINT j = 0; j < m.nCol; j++)
        {
            out.width(3);
            out.flags(std::ios::left);
            out << m.mPtr[m.nCol * i + j] << ' ';
        }
        out << std::endl;
    }
    return out;
}
 
std::istream &operator >> (std::istream &in, BaseMatrix<int> &m)
{
    std::cout << "Enter Matrix " << m.nRow << "x" << m.nCol << std::endl;
    for(UINT i = 0; i < m.nRow; i++)
    {
        for(UINT l = 0; l < m.nCol; l++)
            std::cout << "- ";
        std::cout << std::endl;
        for(UINT j = 0; j < m.nCol; j++)
        {
            std::cout << '[' << i << ',' << j << "]: ";
            in >> m.mPtr[m.nCol * i + j];
        }
    }
    return in;
}

Некоторые операторы
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
template <class T> BaseMatrix<T> &BaseMatrix<T>::operator += (const BaseMatrix<T> &m)
{
    for(UINT i = 0; i < nRow && i < m.nRow; i++)
        for(UINT j = 0; j < nCol && j < m.nCol; j++)
            mPtr[nCol * i + j] += m.mPtr[m.nCol * i + j];
    return *this;
}
 
template <class T> BaseMatrix<T> &BaseMatrix<T>::operator -= (const BaseMatrix<T> &m)
{
    for(UINT i = 0; i < nRow && i < m.nRow; i++)
        for(UINT j = 0; j < nCol && j < m.nCol; j++)
            mPtr[nCol * i + j] -= m.mPtr[m.nCol * i + j];
    return *this;
}
 
template <class T> BaseMatrix<T> &BaseMatrix<T>::operator *= (const BaseMatrix<T> &m)
{
    if(nCol == m.nRow)
    {
        T *t = new T[m.nCol * nRow];
        memset(t, 0, m.nCol * nRow * sizeof(T));
        
        for(UINT i = 0; i < nRow; i++)
            for(UINT j = 0; j < m.nCol; j++)
                for(UINT k = 0; k < nCol; k++)
                    t[m.nCol * i + j] += mPtr[nCol * i + k] * m.mPtr[m.nCol * k + j];
 
        nCol = m.nCol;
        nSize= nCol * nRow;
        
        delete[] mPtr;
        mPtr = new T[nSize];
        memcpy(mPtr, t, nSize * sizeof(T));
        
        delete[] t;     
    }
    return *this;
}
 
template <class T> BaseMatrix<T> &BaseMatrix<T>::operator *= (const T t)
{
    for(UINT i = 0; i < nRow; i++)
        for(UINT j = 0; j < nCol; j++)
            mPtr[nCol * i + j] *= t;
    return *this;
}
 
template <class T> const BaseMatrix<T> &BaseMatrix<T>::operator = (const BaseMatrix<T> &m)
{
    if(&m != this)
    {
        delete[] mPtr;
        nRow = m.nRow;
        nCol = m.nCol;
        nSize = m.nSize;
 
        mPtr = new T[nSize];
        memcpy(mPtr, m.mPtr, nSize*sizeof(T));
    }
    return *this;
}
 
template <class T> bool BaseMatrix<T>::operator == (const BaseMatrix<T> &m) const
{
    if(nSize != nSize)
        return false;
    else
        return (memcmp(mPtr, m.mPtr, nSize*sizeof(T)) == 0);
}
 
template <class T> bool BaseMatrix<T>::operator != (const BaseMatrix<T> &m) const
{
    if(nSize != nSize)
        return true;
    else
        return (memcmp(mPtr, m.mPtr, nSize*sizeof(T)) != 0);
}
 
Текущее время: 00:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru