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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2009, 21:54   #1
Sergey Panov
Новичок
Джуниор
 
Регистрация: 06.06.2009
Сообщений: 1
По умолчанию Помогите, ожалуйста, с задачей в C++!

Задача связана с алгеброй.
Все эллемнты из поля Z={0,1,2}!!!
Даны две матрицы:
0__1__0
b1_b2_b3 = B;
b4_b5_b6

0__0__1
c1_c2_c3 = C;
c4_c5_c6

Надо найти все матрицы В и С такие, что В*С!=С*B. Такая программа уже есть:

#include <iostream.h>

struct matrix3x3 {
int a[3][3];
void print();
};

void matrix3x3:rint() {
int i, j;
for (i=0; i<3; ++i) {
for (j=0; j<3; ++j)
cout << a[i][j] << " ";
cout << "\n";
}
}

matrix3x3 matrix(int a11, int a12, int a13, int a21, int a22, int a23, int a31, int a32, int a33) {
matrix3x3 tmp;
tmp.a[0][0] = a11; tmp.a[0][1] = a12; tmp.a[0][2] = a13;
tmp.a[1][0] = a21; tmp.a[1][1] = a22; tmp.a[1][2] = a23;
tmp.a[2][0] = a31; tmp.a[2][1] = a32; tmp.a[2][2] = a33;
return tmp;
}

int determinant(matrix3x3 A) {
return A.a[0][0]*A.a[1][1]*A.a[2][2] + A.a[0][1]*A.a[1][2]*A.a[2][0] + A.a[0][2]*A.a[1][0]*A.a[2][1] -
A.a[0][2]*A.a[1][1]*A.a[2][0] - A.a[2][2]*A.a[1][0]*A.a[0][1] - A.a[0][0]*A.a[2][1]*A.a[1][2];
}

matrix3x3 multMatrix(matrix3x3 A, matrix3x3 B) {
int i, j;
matrix3x3 C;
for (i=0; i<3; ++i)
for (j=0; j<3; ++j)
C.a[i][j] = A.a[i][0]*B.a[0][j] + A.a[i][1]*B.a[1][j] + A.a[i][2]*B.a[2][j];
return C;
}

bool equalMatrix(matrix3x3 A, matrix3x3 B) {
int i, j;
for (i=0; i<3; ++i)
for (j=0; j<3; ++j)
if (A.a[i][j] != B.a[i][j]) return false;
return true;
}

matrix3x3 toZ3(matrix3x3 A) {
int i, j;
matrix3x3 tmp;
for (i=0; i<3; ++i)
for (j=0; j<3; ++j)
tmp.a[i][j] = A.a[i][j] % 3;
return tmp;
}

int main() {
matrix3x3 B, C;
int i, j;
for (i=0; i<531441; ++i) {
int el[12], t = i;
for (j=0; j<12; ++j) {
el[j] = t%3;
t /= 3;
}
B = matrix(0, 1, 0, el[0], el[1], el[2], el[3], el[4], el[5]);
C = matrix(0, 0, 1, el[6], el[7], el[8], el[9], el[10], el[11]);
if ((determinant(B)%3) == 0) continue;
if ((determinant(C)%3) == 0) continue;
if (equalMatrix(toZ3(multMatrix(B, C)), toZ3(multMatrix(C, B)))) {
cout << "-----------------\n";
B.print();
cout << "\n";
C.print();
cout << "-----------------\n";
}
}
return 0;
}


Теперь надо найти поле R = {x*E+e*B+z*C}, где Е - единичная матрица, а В и С даны выше, x, y, z, b[i] и c[i] из поля Z={0,1,2}. |x*E+e*B+z*C| !=0

Как проверить,что R - это поле:
Для любых x,y,z,u,v,w из Для любых x,y,z,u,v,w из Z={0,1,2}.
1)(xE+yB+zC)(uE+vB+wC) должно пренадлежать R.
Пусть первый множитель из свойства 1 = Q(x,y,z)
А второй = Q(u,v,w)
2)коммутативность.
Q(x,y,z)*Q(u,v,w)=Q(u,v,w)*Q(x,y,z) .(это равенство умножений матриц ВС=СВ)
3) для любых x,y,z != (0,0,0)
существует u,v,w,такие,что (xE+yB+zC)(uE+vB+wC)=E.

На экран надо вывести варианты матриц В, С, x, y, z, когда выполняются все вышеперечмсленные условия.
Sergey Panov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с задачей kiko Паскаль, Turbo Pascal, PascalABC.NET 10 25.11.2008 14:31
Помогите с задачей Noxil Паскаль, Turbo Pascal, PascalABC.NET 2 30.10.2008 19:20
помогите с задачей StakanpORTvejna Паскаль, Turbo Pascal, PascalABC.NET 1 11.10.2008 19:19
Помогите с задачей. terminadoor Помощь студентам 4 22.07.2008 18:38