powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Область действия имен?
7 сообщений из 7, страница 1 из 1
Область действия имен?
    #38249529
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такой кусок текста:
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;
}
Проблема в том, что исходная матрица меняется, хотя при входе в прогу она сохраняется и больше к ней обращений нет.

Может я что-то не погимаю?
...
Рейтинг: 0 / 0
Область действия имен?
    #38249537
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisесть такой кусок текста:
static int Opredelitel(int[,] Matr, int Razm )
Однако, это не похоже на С++...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Область действия имен?
    #38249540
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
на самом деле c#. жаль здесь нет такого форума.
...
Рейтинг: 0 / 0
Область действия имен?
    #38249546
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisжаль здесь нет такого форума.
Значит тебе дорога на другой форум.
Posted via ActualForum NNTP Server 1.5

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Область действия имен?
    #38249564
Winnipuh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisDimitry Sibiryakov,
на самом деле c#. жаль здесь нет такого форума.

поддерживаю, пора сделать бы такой форум
...
Рейтинг: 0 / 0
Область действия имен?
    #38249635
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisПроблема в том, что исходная матрица меняется, хотя при входе в прогу она сохраняется и больше к ней обращений нет.
....
int[,] Polo= new int [Razm,Razm];
Polo = Matr;
Массив является ссылочным типом. Ты сначала выделяешь память под новый массив, сразу её отбрасываешь и переменные Polo и Matr указывают на одну и ту же область памяти. Поэтому когда ниже в цикле ты меняешь содержимое Polo ты одновременно меняешь Matr. Если нужно сохранить оригинал, то скопируй его с помощью Array.Copy() .

Winnipuhglamisна самом деле c#. жаль здесь нет такого форума.

поддерживаю, пора сделать бы такой форум
В этом нет необходимости. Такой форум у нас уже есть. Единственное что имеет смысл сделать это переименовать форум "WinForms, .Net Framework" в ".Net Framework (C#/VB.NET), WinForms" чтобы было меньше путаницы.
...
Рейтинг: 0 / 0
Область действия имен?
    #38254126
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Использовал Array.Clone
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Область действия имен?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]