You are on page 1of 6

#include <iostream>

#include <math.h>

using namespace std;


int ucln(int a, int b)
{
if (b == 0)
return a;
else
return ucln(b, a % b);
}
int tinh_dinhthuc(int m, int **a)
{
if (m == 2)
return a[0][0] * a[1][1] - a[0][1] * a[1][0];
int det = 0;
for (int i = 0; i < m; i++)
{
int **tmp = new int *[m - 1];
for (int j = 0; j < m - 1; j++)
{
tmp[j] = new int[m - 1];
}
for (int j = 0; j < i; j++)
for (int k = 0; k < m - 1; k++)
tmp[k][j] = a[k + 1][j];
for (int j = i; j < m - 1; j++)
for (int k = 0; k < m - 1; k++)
tmp[k][j] = a[k + 1][j + 1];
det += int(pow(-1, i + 1 + 1)) * tinh_dinhthuc(m - 1, tmp);
delete[] tmp;
}
return det;
}
int nhan_matran(int **a, int **b, int m, int i, int j)
{
int sum = 0;
for (int t = 0; t < m; t++)
{
sum += a[i][t] * b[t][j];
}
return sum;
}

/*******BAT DAU HAM NHAN MA TRAN FLOAT VOI MA TRAN INT*********/


int **nhan_2matran(float **a, int **b, int r, int t, int c)
{
int **tmp = new int *[r];
for (int i = 0; i < r; i++)
{
tmp[i] = new int[c];
}

for (int i = 0; i < r; i++)


{
for (int j = 0; j < c; j++)
{
float sum = 0;
for (int k = 0; k < t; k++)
{
sum += a[i][k] * (float)b[k][j];
}
tmp[i][j] = int(sum);
}
}
return tmp;
}
/*******KET THUC HAM NHAN MA TRAN FLOAT VOI MA TRAN INT*********/

void xuat_matran(int m, int n, int **a)


{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
bool chinhphuong_check(int a)
{
int tmp = sqrt(a);
return a == tmp * tmp;
}
int **chuyen_matran_doc(string a, int r, int c)
{
int tmp = 0;
int **ka = new int *[r];
for (int i = 0; i < r; i++)
{
ka[i] = new int[c];
}
for (int i = 0; i < c; i++)
{
for (int j = 0; j < r; j++)
{
if (a[tmp] >= 65 && a[tmp] <= 90)
ka[j][i] = (int)a[tmp] - 64;
else if (a[tmp] >= 97)
ka[j][i] = (int)a[tmp] - 96;
else if (a[tmp] >= 48 && a[tmp] <= 57)
ka[j][i] = (int)a[tmp] - 47;
else if (a[tmp] == '-')
ka[j][i] = 0;
tmp++;
}
}
return ka;
}
int **chuyen_matran_ngang(string a, int r, int c)
{
int tmp = 0;
int **ka = new int *[r];
for (int i = 0; i < r; i++)
{
ka[i] = new int[c];
}
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
if (a[tmp] >= 65 && a[tmp] <= 90)
ka[i][j] = (int)a[tmp] - 64;
else if (a[tmp] >= 97)
ka[i][j] = (int)a[tmp] - 96;
else if (a[tmp] >= 48 && a[tmp] <= 57)
ka[i][j] = (int)a[tmp] - 47;
else if (a[tmp] == '-')
ka[i][j] = 0;
tmp++;
}
}
return ka;
}
void xuat(float **ar, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = n; j < m; j++)
{
printf("%.3f ", ar[i][j]);
}
printf("\n");
}
return;
}

float **nghichdao(int **ka, int order)


{
int det = tinh_dinhthuc(order, ka);
int det_inv = 0;
int order2 = 2 * order;
if (det <= 0)
det_inv = 27 + det % 27;
else
{
for (int i = 1; i < 27; i++)
{
if ((det * i) % 27 == 1)
{
det_inv = i;
break;
}
}
}
float temp;
float **matrix = new float *[order];
for (int i = 0; i < order; i++)
{
matrix[i] = new float[order];
}
for (int i = 0; i < order; i++)
{
for (int j = 0; j < order; j++)
{
matrix[i][j] = (float)ka[i][j];
}
}
for (int i = 0; i < order; i++)
{
for (int j = 0; j < order2; j++)
{
if (j >= order && j < 2 * order)
matrix[i][j] = 0;

if (j == (i + order))
matrix[i][j] = 1;
}
}

for (int i = 0; i < order; i++)


{
for (int j = 0; j < order; j++)
{
if (j != i)
{
temp = matrix[j][i] / matrix[i][i];
for (int k = 0; k < 2 * order; k++)
{
matrix[j][k] -= matrix[i][k] * temp;
}
}
}
}

for (int i = 0; i < order; i++)


{
temp = matrix[i][i];
for (int j = 0; j < order2; j++)
{
matrix[i][j] = matrix[i][j] * det / temp;
if (matrix[i][j] < 0)
matrix[i][j] = 27 + matrix[i][j];
else if (matrix[i][j] > 27)
matrix[i][j] = 27;
matrix[i][j] = matrix[i][j] * det_inv;
}
}
return matrix;
}

int main()
{
int m;
cout << "\nMOI NHAP KICH THUOC KHOA K: ";
cin >> m;
cout << m % 6;
// int **ka = new int *[m];
// for (int i = 0; i < m; i++)
// {
// ka[i] = new int[m];
// }
// cout << "\nMOI NHAP MA TRAN KHOA K: " << endl;
// for (int i = 0; i < m; i++)
// {
// for (int j = 0; j < m; j++)
// {
// cin >> ka[i][j];
// // if (ka[i][j] < 0)
// // ka[i][j] = 27 + ka[i][j] % 27;
// // else
// // ka[i][j] %= 27;
// }
// }
// cout << "\nMA TRAN KHOA K LA: " << endl;
// xuat_matran(m , m , ka);
// int det = tinh_dinhthuc(m, ka);
// cout << "\nDET = " << det << endl;
return 0;
// cout << "\nMA TRAN KHOA K CUA BAN LA: " << endl;
// xuat_matran(m, m, ka);
// cout << "\nMA TRAN NGHIC DAO CUA K LA: " << endl;
// float **matrix = nghichdao(ka, m);
// // xuat_matran(m,m,matrix);
// xuat(matrix, m, m);
// int num;
// cout << "\nMOI NHAP SO LUONG DAY CAN MA HOA: ";
// cin >> num;
// for (int z = 1; z <= num; z++)
// {
// cout << "\nMOI NHAP DAY THU " << z << " CAN MA HOA: ";
// string day;
// cin >> day;
// while (!(day.size() % m == 0))
// {
// cout << "MOI NHAP LAI DAY THU " << z << " CAN DUOC MA HOA: ";
// cin >> day;
// }
// int n = day.size() / m;
// int **a = chuyen_matran_doc(day, m, n);
// cout << "\nMA TRAN CUA DAY NAY LA: " << endl;
// xuat_matran(m, n, a);
// int **result = new int *[m];
// for (int i = 0; i < m; i++)
// {
// result[i] = new int[n];
// }

// for (int i = 0; i < m; i++)


// {
// for (int j = 0; j < n; j++)
// {
// result[i][j] = nhan_matran(ka, a, m, i, j) % 27;
// }
// }

// cout << "\nMA TRAN CUA DAY " << z << " DA DUOC MA HOA LA: " << endl;
// xuat_matran(m, n, result);
// string fresult = "";
// for (int i = 0; i < n; i++)
// {
// for (int j = 0; j < m; j++)
// {
// if (result[j][i] == 0)
// fresult += '-';
// else
// fresult += result[j][i] + 64;
// }
// }

// cout << "\nDAY THU " << z << " DA DUOC MA HOA LA : ";
// cout << fresult << endl;

// cout << "\nMA TRAN GIAI MA:" << endl;


// int **b = chuyen_matran_doc(fresult, m, n);

// for (int i = 0; i < n; i++)


// {
// delete[] a[i];
// }
// delete[] a;
// for (int i = 0; i < m; i++)
// {
// delete[] result[i];
// }
// delete[] result;
// }

// for (int i = 0; i < m; i++)


// {
// delete[] matrix[i];
// }
// delete[] matrix;
// for (int i = 0; i < m; i++)
// {
// delete[] ka[i];
// }
// delete[] ka;
// return 0;
}

You might also like