Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2011, 23:59   #1
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию Умножение матриц

Нужна функция умножения динамически созданных матриц:
Код:
void
multiplymatrix(int **c,int **a,int **b,int k)
{
    int i,j,z;
    for (i=0; i<k; i++)
        for (j=0; j<k; j++)
        {
            c[i][j]=0;
            for (z=0; z<k; z++)
                c[i][j]+=a[i][z]*b[z][j];
        }
}
k - размер квадратных матриц a и b, c - выходная матрица
Вроде простой код, но на выходе - чушь)
Матрицы создавал так:
Код:
a=(int **)calloc(k,sizeof(int *));
    for (i=0; i<k; i++)
        a[i]=(int *)calloc(k,sizeof(int));
(Пишу в Code::Blocks)
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 20.11.2011, 00:49   #2
БалаШагаЛ
Форумчанин
 
Регистрация: 11.02.2011
Сообщений: 131
По умолчанию

Код:
#include <iostream>

int k=2;

int main()
{
    int** a,**b,**c;
    a=new int*[k];
    for (int i=0;i<k;i++)
      a[i]=new int[k];
    b=new int*[k];
    for (int i=0;i<k;i++)
      b[i]=new int[k];
    c=new int*[k];
    for (int i=0;i<k;i++)
      c[i]=new int[k];
    a[0][0]=3;
    a[0][1]=2;
    a[1][0]=5;
    a[1][1]=4;
    b[0][0]=5;
    b[0][1]=7;
    b[1][0]=8;
    b[1][1]=3;
    for (int i=0; i<k; i++)
    {
        for (int j=0; j<k; j++)
        {
            c[i][j]=0;
            for (int z=0; z<k; z++)
                c[i][j]+=a[i][z]*b[z][j];
        }
    }
    for (int i=0;i<k;i++)
    {
        for (int j=0;j<k;j++)
        {
            std::cout << a[i][j] << " ";
        }
        std::cout << "\n";
    }
    std::cout << "\n\n\n";
    for (int i=0;i<k;i++)
    {
        for (int j=0;j<k;j++)
        {
            std::cout << b[i][j] << " ";
        }
        std::cout << "\n";
    }
    std::cout << "\n\n\n";
    for (int i=0;i<k;i++)
    {
        for (int j=0;j<k;j++)
        {
            std::cout << c[i][j] << " ";
        }
        std::cout << "\n";
    }
    for (int i=0;i<k;i++)
      delete [] a[i];
    delete [] a;
    for (int i=0;i<k;i++)
      delete [] b[i];
    delete [] b;
    for (int i=0;i<k;i++)
      delete [] c[i];
    delete [] c;
}
В Code::Blocks работает.
БалаШагаЛ вне форума Ответить с цитированием
Старый 20.11.2011, 01:06   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Спасибо, буду разбираться.
Но ваш код на си++, а мне обязательно нужно использовать си (моя ошибка - не указание языка).

Все, нашел ошибку)
Я с помощью memcpy "убивал" какие-то ссылки.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 20.11.2011 в 01:22.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
умножение матриц затерявшисьвдебрях Помощь студентам 0 25.01.2011 22:13
Умножение матриц Си Slame Помощь студентам 4 16.12.2010 14:34
Умножение матриц) Guzal Общие вопросы C/C++ 1 26.10.2010 21:56
Умножение матриц Alyonka_v Помощь студентам 2 18.08.2009 21:51