public static ZIntDescriptor Diag_array(ZIntDescriptor a) // Заполнение -1 ближайшей не равной 0 величиной { int ind1 = a.ind1; int ind2 = a.ind2; ZIntDescriptor b = new ZIntDescriptor(ind1, ind2); //MessageBox.Show(" ind1 -- " + ind1 + " ind2 -- " + ind2); for (int j = -ind1; j <= ind2; j++) { //a.SetValue(j, -2); //MessageBox.Show(" j= " + j + " a.GetValue(j) = " + a.GetValue(j)); if (a.GetValue(j) < 0) { par par1 = Left(a, j); par par2 = Right(a, j); int bmin = a.GetValue(par1.i); // Индекс левого элемента int bmax = a.GetValue(par2.i); // Индекс правого элемента //MessageBox.Show(" j= " + j + " min_left= " + par1.s + " min_right= " + par2.s + " il= " + bmin + " ir= " + bmax); if (par1.s < par2.s) { b.SetValue(j, bmin); } else { b.SetValue(j, bmax); } } else { b.SetValue(j, a.GetValue(j)); } } return(b); }
public static ZIntDescriptor Diag(ZIntDescriptor a, int N1_sin, int N2_sin, int N_diag) { //int M = M1 * N1; //int N = M2 * N2; int MN = N1_sin * N2_sin; China(N1_sin, N2_sin); int m1 = M1; int n1 = N1; int m2 = M2; int n2 = N2; for (int i = 0; i < N2_sin; i++) // Строка { int b = ((m2 * n2 * i) % MN) / N1_sin; if (b < N_diag) { a.SetValue(i, b); } else { a.SetValue(i, -1); } } int i1 = N1_sin; for (int j = -N1_sin + 1; j < 0; j++) // Столбец { int b = ((m1 * n1 * (-j)) % MN) / N1_sin; if (b < N_diag) { a.SetValue(j, b); } else { a.SetValue(j, -1); } i1--; } return(a); }
// Таблица увеличивается на множитель точности public static ZIntDescriptor Diag_array_Mngtl(ZIntDescriptor a, int Mngtl) { if (Mngtl == 1) { return(a); } int n1 = a.ind1 * Mngtl; int n2 = a.ind2 * Mngtl; ZIntDescriptor b = new ZIntDescriptor(n1, n2); int i1 = a.ind1; for (int i = -n1; i < 0; i += Mngtl) { i1 = i / Mngtl; //if (i1>a.ind2) MessageBox.Show("i " + i + " i1 " + i1); int c = a.GetValue(i1); for (int j = 0; j < Mngtl; j++) { b.SetValue(i + j, c); } } for (int i = 0; i <= n2 - Mngtl; i += Mngtl) { i1 = i / Mngtl; //if (i1>a.ind2) MessageBox.Show("i " + i + " i1 " + i1); int c = a.GetValue(i1); for (int j = 0; j < Mngtl; j++) { b.SetValue(i + j, c); } } return(b); }