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

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

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

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

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

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

Здесь считается интеграл от синуса. Вместо f(x) нужно брать значение y из файла с данными.
Т.е. в файле записана функция в виде таблицы, например
x y = f(x)
0 0
1 1
2 2
и т.д.
Помогите исправить, подставляя вместо f1(x) значение столбца y из файла.
Код:
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 integral
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string[] str = System.IO.File.ReadAllLines("text1.txt");
            string[] buf = str[0].Split(' ');
            double[] mass = new double[3];
            for (int y = 0; y < buf.Length; y++)
                mass[y] = Convert.ToDouble(buf[y]);
            int n =Convert.ToInt32( mass[0]);
            double a = mass[1], b = mass[2];
            double h = (b - a) / n, sum = 0, x;
            for (int i = 0; i < n - 1; i++)
            {
                x = a + i * h;
                sum += f1(x);
            }
            label1.Text =Convert.ToString( h * ((f1(a) + f1(b)) / 2 + sum));
        }
        private double f1(double x)
        {
            return Math.Sin(x * x);
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }    
    }
}

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

Код:
string[] str = System.IO.File.ReadAllLines("text1.txt");
            string[] buf = str[0].Split(' ');
            double[] mass = new double[3];
            for (int y = 0; y < buf.Length; y++)
                mass[y] = Convert.ToDouble(buf[y]);
Если честно, не вполне понимаю, чего Вы хотели добиться этим кодом. Первая строка: "x y = f(x)", buf содержит четыре элемента, обращение к mass[3] генерирует исключение (вернее, ещё раньше Convert.ToDouble("x") сгенерирует исключение).
Если первая строка - "0 0", то buf содержит два элемента, mass[2] останется равно нулю. Дальше Вы его используете.
В цикле у Вас должно быть, по идее: разбить на значения очередной элемент str, перевести их в числа, прибавить к вычисляемому интегралу очередное слагаемое, повторить. Или сначала породить массив пар (аргумент, значение), а потом скормить отдельной функции вычисления интеграла (которая в простейшем случае сводится к вульгарному Aggregate()).
Abstraction вне форума Ответить с цитированием
Старый 27.02.2013, 15:35   #3
bestnicer
Пользователь
 
Аватар для bestnicer
 
Регистрация: 29.05.2012
Сообщений: 59
По умолчанию

Это, так сказать, неудачно купленное решение. Что в итоге нужно исправлять.

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

Вот Вам решение. Разберитесь с тем, как оно работает, самостоятельно (MSDN в помощь).
Код:
var values = System.IO.File.ReadAllLines("text1.txt").Select(l => l.Split(' ')).Select(s => new Tuple<double, double>(double.Parse(s[0]), double.Parse(s[1]))).ToArray();
double integral = 0;
for(int i=1; i<values.Length; ++i) integral += (values[i].Item1 - values[i-1].Item1)*(values[i].Item2 + valies[i-1].Item2)*0.5;

Последний раз редактировалось Abstraction; 27.02.2013 в 16:10.
Abstraction вне форума Ответить с цитированием
Старый 27.02.2013, 16:43   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Abstraction , спасибо , линку-строка порадовала.

Автор, а ничего что Вы пачку тем по одной, по сути, проблеме наплодили ? Нарушение правил это. Попросите лучше модераторов их закрыть, а тут добивайте.

В одной из тем я Вам ответил, да и тут тоже ответы есть. Разбирайтесь, а покупать - себе же дороже. Кому сейчас надо возиться с Вашим кодом - просите исполнителя, или доплачивайте другому, если сами отказываетесь учиться.

Последний раз редактировалось phomm; 27.02.2013 в 16:46.
phomm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Вычисление интеграла по табличным данным bestnicer Помощь студентам 1 27.02.2013 16:37
Вычисление интеграла Serjuk Помощь студентам 0 07.12.2011 21:57
Вычисление интеграла; user100 Помощь студентам 2 29.04.2011 15:13
Вычисление интеграла StudeHt Помощь студентам 1 01.05.2009 19:16
Пожалуйста помогите с доступом к табличным данным в HTML McNikodim JavaScript, Ajax 0 26.09.2008 11:37