Загрузка данных


using System;

namespace SimpleIterationMethodApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Ввод размерности системы
            Console.Write("Введите количество уравнений (n): ");
            int n = int.Parse(Console.ReadLine());

            // Инициализация массивов
            double[,] A = new double[n, n];
            double[] B = new double[n];
            double[] X0 = new double[n];
            double[] X = new double[n];

            // Ввод матрицы коэффициентов A
            Console.WriteLine("\nВведите коэффициенты исходной матрицы A (построчно):");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    // Для удобства пользователя выводим индексы начиная с 1
                    Console.Write($"A[{i + 1},{j + 1}] = ");
                    A[i, j] = double.Parse(Console.ReadLine());
                }
            }

            // Ввод вектора свободных членов B
            Console.WriteLine("\nВведите свободные члены (вектор B):");
            for (int i = 0; i < n; i++)
            {
                Console.Write($"B[{i + 1}] = ");
                B[i] = double.Parse(Console.ReadLine());
            }

            // Ввод точности
            Console.Write("\nВведите требуемую точность (e, например 0,01): ");
            double e = double.Parse(Console.ReadLine());

            // Ввод начального приближения X0
            Console.WriteLine("\nВведите начальное приближение (вектор X0):");
            for (int i = 0; i < n; i++)
            {
                Console.Write($"X0[{i + 1}] = ");
                X0[i] = double.Parse(Console.ReadLine());
            }

            Console.WriteLine("\nВыполняется расчет...\n");

            // --- НАЧАЛО АЛГОРИТМА СТРОГО ПО БЛОК-СХЕМЕ ---
            double w, s, p;

            do
            {
                w = 0;

                for (int i = 0; i < n; i++)
                {
                    s = 0;

                    // Блок i <> 1 (в программировании i != 0)
                    if (i != 0) 
                    {
                        for (int j = 0; j < i; j++)
                        {
                            s += A[i, j] * X0[j];
                        }
                    }

                    // Блок i <> n (в программировании i != n - 1)
                    if (i != n - 1) 
                    {
                        for (int j = i + 1; j < n; j++)
                        {
                            s += A[i, j] * X0[j];
                        }
                    }

                    // Вычисление по формуле
                    X[i] = (B[i] - s) / A[i, i];

                    // Расчет погрешности текущего шага
                    p = Math.Abs(X[i] - X0[i]);

                    // Поиск максимальной погрешности
                    if (p > w)
                    {
                        w = p;
                    }
                }

                // Перенос значений, если требуемая точность еще не достигнута
                if (w > e)
                {
                    for (int i = 0; i < n; i++)
                    {
                        X0[i] = X[i];
                    }
                }

            } while (w > e);
            // --- КОНЕЦ АЛГОРИТМА ---

            // Вывод ответа
            Console.WriteLine("Ответ:");
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine($"x{i + 1} = {X[i]:F3}");
            }

            Console.ReadLine();
        }
    }
}