Найти определитель матрицы - C#

Узнай цену своей работы

Формулировка задачи:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication16
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Дана матрица размера n*n.\n1.Сосчитать сумму элементов главной диагонали всех матриц\n2.Найти их определители.\n");
            Console.Write("\n");
            Console.Write("Введите n: ");
            int n = int.Parse(Console.ReadLine());
            Console.Write("\n");
            int[,] a = new int[n, n];
            Random rnd = new Random();
            for (int i = 0; i < n; ++i)
            {
                for (int j = 0; j < n; ++j)
                {
                    a[i, j] = rnd.Next(10, 100);
                    Console.Write("  " + a[i, j] + "");
                }
                Console.WriteLine();
             }
            {
                int tt = 0;
                for (int i = 0; i < n; i++)
                {
                    tt += a[i, i];
                }
                int opredelitel = a[0, 0] * a[1, 1] - a[0, 1] * a[1, 0];             
                Console.Write("\n");
                Console.WriteLine("1.Сумма диагонали = " + tt);
                Console.WriteLine("2.Определитель матрицы = " + opredelitel);
            }
            Console.WriteLine();
            Console.ReadKey();
Нужно найти определитель матрицы, для 2 порядка я нашёл, а как найти для n порядка ?

Решение задачи: «Найти определитель матрицы»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Gauss
{
    class Program
    {
        static void Main()
        {          
            string s;
            string[] str;
            double det = 1;
            //определяем переменную EPS
            const double EPS = 1E-9;
            //размерность матрицы
            int n;
            //вводим n
            Console.WriteLine("Enter the dimension of the matrix");
            n = int.Parse(Console.ReadLine());
            //определяем массив размером nxn
            double[][] a = new double[n][];
            double[][] b = new double[1][];
            b[0] = new double[n];
            //заполняем его
            Console.WriteLine("Enter the n rows of n elements");
            for (int i=0;i<n;i++)
            {
                s = Console.ReadLine();
                str = s.Split(' ');
                a[i] = new double[n];
                for (int j=0;j<n;j++)
                {
                    a[i][j] = double.Parse(str[j]);
                }
            }
            //проходим по строкам
            for (int i=0; i<n; ++i) 
            {
                //присваиваем k номер строки
                int k = i;
                //идем по строке от i+1 до конца
                for (int j=i+1; j<n; ++j)
                //проверяем
                    if (Math.Abs(a[j] [i]) > Math.Abs(a[k][i]))
                    //если равенство выполняется то k присваиваем j
                        k = j;
                //если равенство выполняется то определитель приравниваем 0 и выходим из программы
                if (Math.Abs(a[k] [i]) < EPS) 
                {
                    det = 0;
                    break;
                }
                //меняем местами a[i] и a[k]
                b[0] = a[i];
                a[i] = a[k];
                a[k] = b[0];
                //если i не равно k
                if (i != k)
                //то меняем знак определителя
                    det = -det;
                //умножаем det на элемент a[i][i]
                det *= a[i][i];
                //идем по строке от i+1 до конца
                for (int j=i+1; j<n; ++j)
                //каждый элемент делим на a[i][i]
                    a[i][j] /= a[i][i];
                //идем по столбцам
                for (int j=0; j<n; ++j)
                //проверяем
                    if ((j != i)&&(Math.Abs(a[j][i]) > EPS))
                    //если да, то идем по k от i+1
                        for (k = i+1; k < n; ++k)
                            a[j][k] -= a[i][k] * a[j][i];
            }
            //выводим результат
            Console.WriteLine(det);
            Console.ReadLine();
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы