Advertisement
StreetKatya

Гаусс

Dec 17th, 2022
905
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.72 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Гаусс
  9. {
  10.     internal class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             using (var sr = new StreamReader("input.txt"))
  15.             {
  16.                 double[,] matrix;
  17.                 int n = int.Parse(sr.ReadLine());
  18.                 matrix = new double[n, n];
  19.                 for (int i = 0; i < n; i++)
  20.                 {
  21.                     string[] str = sr.ReadLine().Split(' ');
  22.                     for (int j = 0; j < n; j++)
  23.                     {
  24.                         matrix[i, j] = double.Parse(str[j]);
  25.                     }
  26.                 }
  27.                 PrintMatrix(matrix);
  28.                 Console.WriteLine();
  29.                 matrix = TriangleType(matrix);//Приведение к треугольному виду
  30.                 PrintMatrix(matrix);
  31.                 double det = GetDeterminant(matrix);
  32.                 Console.WriteLine("Определитель = "+det);
  33.                 Console.ReadKey();
  34.             }
  35.  
  36.         }
  37.         public static double[,] TriangleType(double[,] matrix)
  38.         {
  39.             int n = (int)Math.Sqrt(matrix.Length);
  40.             for (int i = 0; i < n; i++)//строка
  41.             {
  42.                 for (int j = i + 1; j < n; j++)//столбец
  43.                 {
  44.                     if(matrix[i,i] == 0)//Если на главной диагонали рассматриваемой строки 0
  45.                     {
  46.                         int indexElNotZero = -1;
  47.                         for (int t = i; t < n; t++)
  48.                         {
  49.                             if(matrix[t,i] !=0)//Ищем под этим нулём не нулевуб строку
  50.                             {
  51.                                 indexElNotZero = t;
  52.                             }
  53.                         }
  54.                         if(indexElNotZero == -1)//Если таких строк нет, то выводим пустую матрицу --> det=0
  55.                         {
  56.                             matrix = new double[n, n];
  57.                             return matrix;
  58.                         }
  59.                         for (int k = 0; k < n; k++)//Если такая строка нашлась, то прибавляем её к той, где нуль
  60.                         {
  61.                             matrix[i, k] += matrix[indexElNotZero, k];
  62.                         }
  63.                     }
  64.  
  65.                     double temp = matrix[j, i] / matrix[i, i];//Находим коэффициент
  66.                     for (int l = 0; l < n; l++)
  67.                     {
  68.                         matrix[j, l] = matrix[j, l] - temp * matrix[i, l];//Вычитаем из нижней строчки верхнюю, домноженную на коэфициент
  69.                     }
  70.                 }
  71.             }
  72.             return matrix;
  73.         }
  74.         public static void PrintMatrix(double[,] matrix)
  75.         {
  76.             int n = (int)Math.Sqrt(matrix.Length);
  77.             for (int i = 0; i < n; i++)
  78.             {
  79.                 for (int j = 0; j < n; j++)
  80.                 {
  81.                     Console.Write(matrix[i, j] + " ");
  82.                 }
  83.                 Console.WriteLine();
  84.             }
  85.         }
  86.         public static double GetDeterminant(double[,] matrix)
  87.         {
  88.             int n = (int)Math.Sqrt(matrix.Length);
  89.             double determinant = 1;
  90.             for (int i = 0, j = 0; i < n; i++, j++)
  91.             {
  92.                 determinant *= matrix[i, j];
  93.             }
  94.             return determinant;
  95.         }
  96.     }
  97. }
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement