
09.03.2010, 15:19
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
Сообщение от Welemir
Приветствую ).нужна помощь в следующем:
Написать функцию типа void ,которая перемножает две целочисленные матрицы (z = x*y),используя только адресную арифметику.Объявляется три двумерных массива (int x[m][n], int y[m][n],int z[m][n]).Зачем-то задаются ещё две целочисленные константы(не пойму,для чего).Кто-нибудь может это осилить ?  Не догоняю я эти матрицы...линейной алгебры у нас нет.
P.S.: НЕЛЬЗЯ ИСПОЛЬЗОВАТЬ СИМВОЛЫ [].РАЗРЕШЕНА ТОЛЬКО АДРЕСНАЯ АРИФМЕТИКА И УКАЗАТЕЛИ !
http://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D0%B5%D0%BC%D0%BD%D0%BE%D0%B6%D 0%B5%D0%BD%D0%B8%D0%B5_%D0%BC%D0%B0%D1%82%D1%80%D0 %B8%D1%86#.D0.9E.D0.BF.D0.B5.D1.80.D0.B0.D1.86.D0. B8.D0.B8_.D0.BD.D0.B0.D0.B4_.D0.BC.D0.B0.D1.82.D1. 80.D0.B8.D1.86.D0.B0.D0.BC.D0.B8
Вот ссылка на вики, где написан алгоритм.
Ты не можешь перемножать int x[m][n], int y[m][n]
разве что int x[m][n], int[n][m]. Так как результирующая размерность должна быть [m][m].
Вот код, как примерно обращаться к чему.
PHP код:
#include <QtCore/QCoreApplication>
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const int size = 5;
int **x = new int*[size];
for (int i = 0; i < size;++i)
x[i] = new int[size];
for (int i = 0;i < size;++i)
for (int j = 0;j < size;++j)
x[i][j] = i*j;
for (int i = 0;i < size;++i)
{
for (int j = 0;j < size;++j)
cout << x[i][j] << " ";
cout << endl;
}
cout << *(*(x+1)+1) << endl; // x[1][1]
cout << *(*(x+4)+4) << endl; // x[4][4]
for (int i = 0;i < size;++i)
delete[] x[i];
delete []x;
x = NULL;
system("pause");
return 0;
}
|
|
|