Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- namespace Gauss
- {
- class Program
- {
- static List<List<double>> GetMatrix()
- {
- StreamReader fin = new StreamReader("input.txt");
- int n = int.Parse(fin.ReadLine());
- int m = int.Parse(fin.ReadLine());
- List<List<double>> matrix = new List<List<double>>();
- for (int i = 0; i < n; i++)
- {
- List<double> tmp = new List<double>();
- string[] line = fin.ReadLine().Split(' ');
- for (int j = 0; j < m; j++)
- tmp.Add(double.Parse(line[j]));
- matrix.Add(tmp);
- }
- fin.Close();
- return matrix;
- }
- static void RightProcess(List<List<double>> matrix)
- {
- double diagonalElem = 0;
- int count = matrix.Count + 1;
- double firstElem = 0;
- for (int i = 0; i < matrix.Count; i++)
- {
- diagonalElem = matrix[i][i];
- if (diagonalElem != 0)
- {
- for (int j = i; j < count; j++)
- matrix[i][j] /= diagonalElem;
- for(int j = i + 1; j < matrix.Count; j++)
- {
- firstElem = matrix[j][i];
- for (int k = i; k < count; k++)
- matrix[j][k] -= matrix[i][k] * firstElem;
- }
- }
- else throw new Exception("Matrix have null diagonal element!");
- }
- }
- static void BackProcess(List<List<double>> matrix)
- {
- int current = matrix.Count - 1;
- for (int i = matrix.Count - 2; i >= 0; i--)
- {
- for (int j = matrix.Count; j >= 0; j--)
- {
- for(int k = 0; k <= i; k++)
- matrix[k][j] -= matrix[i + 1][j] * matrix[k][current];
- }
- current--;
- }
- for (int i = matrix.Count - 1; i >= 0; i--)
- Console.Write("{0} ", matrix[i][matrix.Count]);
- Console.WriteLine();
- }
- static void Main(string[] args)
- {
- List<List<double>> matrix = GetMatrix();
- RightProcess(matrix);
- BackProcess(matrix);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement