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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2010, 19:57   #1
OpenId
 
Регистрация: 18.03.2010
Сообщений: 8
По умолчанию Умножение матриц (проблема с кодом)

Код, по которому создаются динамические матрицы A[n][m] и B[m][n]

Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include <iostream.h>




//Создает матрицу
int **Create(int **x, int i, int j, int n, int m)
{
x=new int*[n];
for(i=0;i<n;i++)
        {x[i]=new int[m];
        for(j=0;j<m;j++)
		{x[i][j]=random(10);
                }
	}
return x;
}




//Выводит матрицу
void Print( int **x, int i, int j, int n, int m){
printf("\n\n",n,m);
for(i=0;i<n;i++)
        {
        for(j=0;j<m;j++)
		{
		printf("%4d",x[i][j]);
		}
	printf("\n");
	}

}
 
void main()
{
clrscr();
int n,m,i,j,k;
int **matr, **matr1,**matr2;
randomize();
printf("Введите n");
scanf("%d",&n);
printf("ВВедите m");
scanf("%d",&m);

matr=Create(matr,i,j,n,m);
cout<<endl<<endl<<endl;
cout<<a[][]"<<endl;
Print(matr,i,j,n,m);


matr1=Create(matr1,j,i,m,n);
cout<<endl<<endl<<endl;
cout<<"B[][]"<<endl;
Print(matr1,j,i,m,n);


cout<<endl<<endl<<"C[][] = A[][] x B[][]"<<endl;

{Здесь мог бы быть код умножения матриц}

getch();

}

И вместо {Здесь мог бы быть код умножения матриц} должен быть код
Код:
    for(i = 0; i < m; i++)
        for(j = 0; j < m; j++)
        {
            matr2[i][j] = 0;
            for(int k = 0; k < N; k++)
                matr2[i][j] += (matr[i][k] * matr1[k][j]);
       
}

Print(matr2,i,j,m,m)
но он как то "не ровно" умножает матрицы, т.е. иногад нормально, иногда результат со значениями, которых в принципе не должно быть. Прошу помощи! Что не так? (кроме криворукости )
OpenId вне форума Ответить с цитированием
Старый 30.11.2010, 20:16   #2
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

ошибка в умножении в переборе исходных матриц,
перебераеш i от 0 до m, j от 0 до m, а исходные матрицы у тебя размерности n*m и m*n, вот здесь и ошибка...
Ledom вне форума Ответить с цитированием
Старый 30.11.2010, 20:30   #3
OpenId
 
Регистрация: 18.03.2010
Сообщений: 8
По умолчанию

Умножение делалось по аналогии с функцией mulmatr() , которую нашел в просторах интернетов (как я понял самая такая основная), и заменил значения на свои
OpenId вне форума Ответить с цитированием
Старый 30.11.2010, 20:38   #4
Ledom
Пользователь
 
Регистрация: 20.11.2010
Сообщений: 66
По умолчанию

Цитата:
Сообщение от OpenId Посмотреть сообщение
Умножение делалось по аналогии с функцией mulmatr() , которую нашел в просторах интернетов (как я понял самая такая основная), и заменил значения на свои
и???
это для умножения квадратных матриц одинаковой размерности...
если тебе разницы нет, то пиши для квадратных...
Ledom вне форума Ответить с цитированием
Старый 01.12.2010, 10:10   #5
OpenId
 
Регистрация: 18.03.2010
Сообщений: 8
По умолчанию

Код:
for(i = 0; i <n; i++)
	for(j = 0; j < n; j++)
        {
	    matr2[i][j] = 0;
	    for(int k = 0; k < m; k++)
		matr2[i][j] += (matr[i][k] * matr1[k][j]);
		cout<<matr2[i][j]<<" ";
	}

Вот в общем работает, но 2ой элемент рандомный получается
OpenId вне форума Ответить с цитированием
Старый 01.12.2010, 14:05   #6
xPAL
Пользователь
 
Регистрация: 13.01.2008
Сообщений: 34
По умолчанию

Код:
	int temp;

	matrix C(A.n, B.m);
	for (int i = 0; i < A.n; i++)
	{
		for (int k = 0; k < B.m; k++)
		{
			temp = 0;
			for (int j = 0; j < A.m; j++)
			{
				temp += (A.a[i][j])* (B.a[j][k]);
			}
			C.a[i][k]= temp;
		}

	}
Выдрал из своей старенькой программы...Нужно немного преобразовать под ваши нужды и всё.
Число столбцов в первой матрице должно быть равно числу строк во второй.

Последний раз редактировалось xPAL; 01.12.2010 в 14:08.
xPAL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение матриц) Guzal Общие вопросы C/C++ 1 26.10.2010 21:56
Stl Умножение матриц Mushu Общие вопросы C/C++ 2 18.06.2010 13:11
Умножение матриц Alyonka_v Помощь студентам 2 18.08.2009 21:51