Найти определитель матрицы - 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();
Решение задачи: «Найти определитель матрицы»
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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д