Console.Write("Въведете брой редове: ");
int rows = int.Parse(Console.ReadLine());
Console.Write("Въведете брой колони: ");
int cols = int.Parse(Console.ReadLine());
double[,] matrix = new double[rows, cols];
Console.WriteLine($"Въведете елементите на матрицата {rows}x{cols}:");
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
Console.Write($"matrix[{i},{j}] = ");
matrix[i, j] = double.Parse(Console.ReadLine());
double[,] transponirana = new double[cols, rows];
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
transponirana[j, i] = matrix[i, j];
double[,] result = new double[rows, rows];
for (int i = 0; i < rows; i++)
for (int j = 0; j < rows; j++)
for (int k = 0; k < cols; k++)
result[i, j] += matrix[i, k] * transponirana[k, j];
for (int i = 0; i < rows; i++)
for (int j = 0; j < rows; j++)
if (i == j && Math.Abs(result[i, j] - 1) > 1e-10)
if (i != j && Math.Abs(result[i, j]) > 1e-10)
Console.WriteLine("\nТранспонирана матрица:");
for (int i = 0; i < cols; i++)
for (int j = 0; j < rows; j++)
Console.Write($"{transponirana[i, j]} ");
Console.WriteLine("\nРезултат от умножението M × Mᵀ:");
for (int i = 0; i < rows; i++)
for (int j = 0; j < rows; j++)
Console.Write($"{result[i, j]} ");
Console.WriteLine("\nМатрицата е ортогонална");
Console.WriteLine("\nМатрицата не е ортогонална");