Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2013, 14:52   #1
bestnicer
Пользователь
 
Аватар для bestnicer
 
Регистрация: 29.05.2012
Сообщений: 59
Восклицание С# Решения СЛАУ

При чтении данных из файла вида
2 1 5
1 2 7
для решения СЛАУ появляется ошибка выхода за границы массива.
Как выбрать произвольный файл?
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            const int maxn = 5;
            bool gauss = true;
            int l = 0;
            double m = 0;
            int k = 0;
            int i = 0;
            double[,] matrix = new double[maxn, maxn];
            int[] vector = new int[maxn];
            double[] x = new double[maxn];
            double[] vector1 = new double[maxn];
            string[] mass = System.IO.File.ReadAllLines("text.txt");
            string[] buf;
            int[] mass1 = new int[2 * maxn - 1];
            for (i = 0; i < maxn; i++)
            {
                buf = mass[i].Split(' ');
                for (int y = 0; y < buf.Length; y++)
                    matrix[i, y] = Convert.ToInt32(buf[y]);
            }
            vector = mass[maxn].Select(s => Convert.ToInt32(s)).ToArray();
 
            for (i = 0; i < 2 * maxn - 1; i++)
            {
                if (vector[i] == 32)
                    continue;
                vector1[i / 2] = vector[i] - 48;
            }
            for (k = 0; k < maxn - 2; k++)
            {
                l = -1;
                m = 0;
                for (i = k; i < maxn; i++)
                {
                    if (Math.Abs(matrix[i, k]) > m)
                    {
                        m = Math.Abs(matrix[i, k]);
                        l = i;
                    }
                }
            }
            if (l == -1)
                gauss = false;
            else
            {
                if (l != k)
                {
                    for (int j1 = 0; j1 < maxn; j1++)
                    {
                        double t1 = matrix[k, j1];
                        matrix[k, j1] = matrix[l, j1];
                        matrix[l, j1] = t1;
                    }
                    double t2 = vector1[k];
                    vector1[k] = vector1[l];
                    vector1[l] = t2;
                }
                for (int i1 = k + 1; i1 < maxn; i1++)
                {
                    double q = 0;
                    q = matrix[i1, k] / matrix[k, k];
                    for (int j2 = 0; j2 < maxn; j2++)
                        if (j2 == k)
                            matrix[i1, j2] = 0;
                        else
                            matrix[i1, j2] = matrix[i1, j2] - q * matrix[k, j2];
                    vector1[i1] = Convert.ToDouble(vector[i1]) - q * Convert.ToDouble(vector[k]);
                }
                x[maxn - 1] = vector1[maxn - 1] / matrix[maxn - 1, maxn - 1];
                for (int i2 = maxn - 2; i2 > 0; i2--)
                {
                    double t3 = 0;
                    for (int j3 = 0; j3 < maxn - i2 - 1; j3++)
                        t3 += matrix[i2, i2 + j3] * x[i2 + j3];
                    x[i2] = (1 / matrix[i2, i2]) * (vector1[i2] - t3);
                }
            }
            if (gauss)
            {
                System.IO.File.WriteAllLines("text1.txt", x.Select(s => Convert.ToString(s)).ToArray());
                MessageBox.Show("Информация записана в файл.");
                //вывод на форму
                foreach (double d in x)
                {
                    richTextBox1.Text += string.Format("\n{0}", d.ToString());
                }
 
            }
 
            else
            {
                string[] ss = new string[1];
                ss[0] = "NET";
                System.IO.File.WriteAllLines("text1.txt", ss);
                MessageBox.Show("Информация записана в файл.");
                richTextBox1.Text = string.Format("\n{0}", ss[0].ToString());
 
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

Последний раз редактировалось bestnicer; 27.02.2013 в 14:56.
bestnicer вне форума Ответить с цитированием
Старый 27.02.2013, 15:12   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Что сказал отладчик? Если не умеете им пользоваться - научитесь.

1)
Код:
string[] mass = System.IO.File.ReadAllLines("text.txt");
for (i = 0; i < maxn; i++)
            {
                buf = mass[i].Split(' ');
Три вопроса. Каково значение mass.Length? (Ответ: оно равно числу строк в файле text.txt) Каков максимальный индекс i, по которому проводится обращение к элементам mass? (Ответ: maxn-1) И что будет, если второе будет больше либо равно первого? (Ответ: IndexOutOfRangeException будет)
Abstraction вне форума Ответить с цитированием
Старый 27.02.2013, 16:48   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Выбрать произвольный файл - положить на форму fileopendialog (и воспользоваться его свойствами и методами, гуглим) или вводить полное имя файла из текстбокса. Полученную строку файлового имени подставлять вместо Вашего файла.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LU - разложение, для решения СЛАУ(проверьте) ISunRiseI Общие вопросы C/C++ 1 19.03.2021 00:07
Матричный метод решения СЛАУ EddieG Общие вопросы C/C++ 0 15.12.2011 02:26
Метод Ричардсона для решения СЛАУ антон9319 Помощь студентам 0 09.12.2011 20:31
Решения СЛАУ методом Гаусса и Зейделя [ICQ] Помощь студентам 0 04.05.2010 20:51
Продажа программы решения СЛАУ psyco Софт 1 28.02.2010 18:48