Портится содержимое матрицы - C#
Формулировка задачи:
есть такой кусок текста:
static int Opredelitel(int[,] Matr, int Razm )
{
int Opr=0; //определитель
int t = 0;
int[,] Polo= new int [Razm,Razm];
Polo = Matr;
if (Razm == 1) Opr = Polo[0, 0]; // если матрица из 1ого элемента, то он и есть определитель
else //вычисление определителя методом разложения по строке
{
int [,] M = new int [ Razm-1,Razm-1];
for (int i = 0; i < Razm; i++)//текущий столбец
{
for (int j = 1; j < Razm; j++)//меняем текущий столбец с первым
{
int p = Polo[j, 0];
Polo[j, 0] = Polo[j, i];
Polo[j, i] = p;
}
for (int h = 0; h < Razm - 1; h++)
{
for (int k = 0; k < Razm - 1; k++)
{
M[h, k] = Polo[h + 1, k + 1];
}
}
if ((i + 2) % 2 == 0)
{
t = 1;
}
else t = (-1);
Opr = Opredelitel(M, Razm - 1) * Polo[0, i] * t + Opr;//непосредственно вычисление определителя
if (Razm == 4)
{
Print(Matr,Razm, "****");//пользов процедура - распеч. матрицу
int y = 1;
}
}
}
return Opr;
}
Проблема в том, что Исходня матрица static int Opredelitel(int[,] Matr, int Razm )
{
int Opr=0; //определитель
int t = 0;
int[,] Polo= new int [Razm,Razm];
// Print(Matr, Razm, "Вход в Opredelitel");
Polo = Matr;
if (Razm == 1) Opr = Polo[0, 0]; // если матрица из 1ого элемента, то он и есть определитель
else //вычисление определителя методом разложения по строке
{
int [,] M = new int [ Razm-1,Razm-1];
for (int i = 0; i < Razm; i++)//текущий столбец
{
for (int j = 1; j < Razm; j++)//меняем текущий столбец с первым
{
int p = Polo[j, 0];
Polo[j, 0] = Polo[j, i];
Polo[j, i] = p;
}
for (int h = 0; h < Razm - 1; h++)
{
for (int k = 0; k < Razm - 1; k++)
{
M[h, k] = Polo[h + 1, k + 1];
}
}
if ((i + 2) % 2 == 0)
{
t = 1;
}
else t = (-1);
Opr = Opredelitel(M, Razm - 1) * Polo[0, i] * t + Opr;//непосредственно вычисление определителя
if (Razm == 4)
{
Print(Matr,Razm, "****");
int y = 1;
}
}
}
return Opr;
}
Проблема в том, что исходная матрица меняется, хотя при входе в прогу она сохраняется и больше к ней обращений нет.
Может я что-то не погимаю?
Решение задачи: «Портится содержимое матрицы»
textual
Листинг программы
Polo = (int[]) Matr.Clone();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д