Объектно-ориентированное программирование на C++. Андрианова А.А - 208 стр.

UptoLike

Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
{
// исключение по i-ой строке
// проверка возможности исключения
// по значению ведущего элемента
if(A[i][i] != 0)
{
// исключение во всех строках, кроме ведущей
for(int k = 0; k < m; k++)
{
if(k == i)
continue;
double d = A[k][i] / A[i][i];
for(int j = i; j < n; j++)
A[k][j] = A[k][j] – d * A[i][j];
B[0][k] = B[0][k] – d * B[0][i];
}
// преобразование ведущей строки
for(int j = i + 1; j < n; j++)
A[i][j] /= A[i][i];
// преобразование i-ого свободного члена
B[0][i] /= A[i][i];
A[i][i] = 1;
}
else
{
// элемент главной диагонали
// в i-ой строке равен нулю
int k;
// поиск ненулевого элемента ниже
// в i-ом столбце
for(k = i + 1; k < m; k++)
if(A[k][i] != 0)
break;
if(k == m)
{
// все элементы столбца нулевые
if(i == n – 1 - count_null_cols)
{
// элементов, которые могут быть
// ведущими, больше нет
count_null_cols++;
break;
}
// меняем местами столбцы - текущий и
// последний из непросмотренных
for(int j = 0; j < m; j++)
{
double t = A[j][i];
A[j][i] =
208
                         Андрианова А.А., Исмагилов Л.Н., Мухтарова Т.М.
      {
          // исключение по i-ой строке
          // проверка возможности исключения
          // по значению ведущего элемента
          if(A[i][i] != 0)
          {
               // исключение во всех строках, кроме ведущей
               for(int k = 0; k < m; k++)
               {
                    if(k == i)
                         continue;
                    double d = A[k][i] / A[i][i];
                    for(int j = i; j < n; j++)
                         A[k][j] = A[k][j] – d * A[i][j];
                    B[0][k] = B[0][k] – d * B[0][i];
               }
               // преобразование ведущей строки
               for(int j = i + 1; j < n; j++)
                    A[i][j] /= A[i][i];
               // преобразование i-ого свободного члена
               B[0][i] /= A[i][i];
               A[i][i] = 1;
          }
          else
          {
               // элемент главной диагонали
               // в i-ой строке равен нулю
               int k;
               // поиск ненулевого элемента ниже
               // в i-ом столбце
               for(k = i + 1; k < m; k++)
                    if(A[k][i] != 0)
                         break;
               if(k == m)
               {
                    // все элементы столбца нулевые
                    if(i == n – 1 - count_null_cols)
                    {
                         // элементов, которые могут быть
                         // ведущими, больше нет
                         count_null_cols++;
                         break;
                    }
                    // меняем местами столбцы - текущий и
               // последний из непросмотренных
                    for(int j = 0; j < m; j++)
                    {
                         double t = A[j][i];
                         A[j][i] =

208