Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Подсобите немного с кодом C#

Ответить
Настройки темы
C/C++ - Подсобите немного с кодом C#

Аватара для N!kitoZZ

Ветеран


Сообщения: 575
Благодарности: 61


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: N!kitoZZ
Дата: 02-06-2011
Привет помогающим, и всем кто просто читает. Нужно написать на шарпе программу, которая будет вычислять значение интеграла с заданной точностью и рисовать график функции.

Функция такая: (1 / (x+2)^2) -1

Большая часть кода есть. Беда в том, что в точке -2 - разрыв. Т.е. эту точку надо обойти. Все свои извращенские манипуляции на эту тему выложу кодом. Кстати кода два, увидите почему.

Это код части, которая значение интеграла считает


Код: Выделить весь код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WindowsFormsApplication1
{
    public class myCalculatedFunction
    {

        public double top;
        public double bottom;

        public double eps = 0.01;

        public double MyFunc(double x)
        {
            
            double value = 0.0;
            value = 1/(Math.Pow((x+2),2))-1;
            if(x==(-2.0))
                value = 0;
            //if (value >= 30)
                //value = 0;
            return value;
        }


        public myCalculatedFunction()
        {
            top = 0.0;
            bottom = 0.0;
        }

        public double Integral()
        {

            double integr1 = 0;
            //double integr2 = 0;
            
            if(top < bottom)
                return 0.0;




            double x = bottom;

              /*  if (x <= (-2))
                {
                    for (x = bottom; x <= (-2.01); x += eps)
                    {
                        integr1 = integr1 + MyFunc(x) * eps;
                        
                        for (x=(-2.01); x <= top; x += eps)
                        {
                            if (x == (-2.0))

                                x += eps;

                            integr2 = integr2 + MyFunc(x) * eps;

                        }
                    }
                    return integr1 + integr2;
                }

                else if(x > (-2))*/

                for (x = bottom; x <= top; x += eps)
                { 
                    if(x==(-2-eps))
                        x=(-2+eps);

                    integr1 = integr1 + MyFunc(x) * eps;
                }
            
            

                return integr1;
        }


    }
}



А это код формы(окошка), там график и текстбоксы с которых данные на верхний и нижний пределы интегрирования.


А, да, еще баттон "рассчет" Компилилось сие в VS 2010, в прочих баги будут, ибо нет в предыдущих версиях chart'a(ографик).

Код: Выделить весь код
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 textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            myCalculatedFunction fun = new myCalculatedFunction();

            double d1 = Double.Parse(tbTop.Text);
            double d2 = Double.Parse(tbBottom.Text);


            if(d2 >= d1)
                return;
             

            fun.top = d1;
            fun.bottom = d2;

            double integ = fun.Integral();

            chart1.Series.Clear();
            chart1.Series.Add("MyFunction");

            chart1.Titles.Clear();
            chart1.Series[0].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine;
            
            for (double d = d2; d <= d1; d = d + 0.01)
            {
                if (d == (-2.01))
                
                    d = (-1.99);
                                    


                chart1.Series[0].Points.AddXY(d, fun.MyFunc(d));
            }


            chart1.Titles.Add("Graphic of your function");
            label3.Text = "Integral your function in limits:  [" +  d1.ToString() + "; " + d2.ToString() + "] will " + integ.ToString();

        }

        private void pictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}


Просьба на закомментенные части внимания не обращать, ибо долго резать, да и, вдруг че пригодится)

Помогите, коль сможете, уж больно у меня препод вредный, сказал что точку обрыва надо обойти слева и справа на интервал точности, а как это реализовать даже приблизительно не намекнул))
Премного благодарен )

-------
((( Windows Visлa Висит и будет Висеть ))))


Отправлено: 18:10, 01-06-2011

 

Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


не мог бы ты оформить нормально.. с помощью тега code хотябы.. а то абсолютно нечитабельно

Отправлено: 18:39, 01-06-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для N!kitoZZ

Ветеран


Сообщения: 575
Благодарности: 61

Профиль | Отправить PM | Цитировать


Beyound, так я ж PS написал, что в тегах дуб, на форумах со времен царя Гороха не был. Пасиб кстати, щас попробую.
PS: It's work)) Осталось решить основную проблему.

-------
((( Windows Visлa Висит и будет Висеть ))))


Отправлено: 18:51, 01-06-2011 | #3


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


у тя функция (1 / (x-2)^2) -1 или (1 / (x+2)^2) -1 ?
Цитата N!kitoZZ:
if(x==(-2-eps))
x=(-2+eps); »
вот это зачем вообще?


а так вроде все верно

Отправлено: 07:35, 02-06-2011 | #4


Аватара для N!kitoZZ

Ветеран


Сообщения: 575
Благодарности: 61

Профиль | Отправить PM | Цитировать


пардон, конечно х+2, щас поправлю.
Цитата Beyound:

if(x==(-2-eps))
x=(-2+eps); »
вот это зачем вообще? »
Это как раз чтобы точку -2 обойти. Т.е., когда у нас значение почти достигает точки разрыва, мы её, (точку), обходим. Наглядно так:

Нижнее значение: -10 к примеру.

С точностью eps=0.01 прибавляемся в цикле. Т.е. С+=eps. Когда доходим до -2.01 прыгаем на -1.99, чтобы точку -2 забрить и не получить бесконечность. А дальше прибавляемся до верхней границы.

-------
((( Windows Visлa Висит и будет Висеть ))))


Отправлено: 13:30, 02-06-2011 | #5


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


а зачем тогда это в функции?
Цитата N!kitoZZ:
if(x==(-2.0))
value = 0; »
ты определись - где обрабатывать -2 будешь

Отправлено: 14:59, 02-06-2011 | #6


Аватара для N!kitoZZ

Ветеран


Сообщения: 575
Благодарности: 61

Профиль | Отправить PM | Цитировать


Думаешь я не пробовал по отдельности? Я сначала в самой функции пробовал ее обходить, потом в chart тоже, чтобы график не в линию строился, а как положено. В итоге нифига не работает. Вот я и выкинул так, как последний раз делал. Попробуй скомпиль, если время будет. А то что ты показал в цитате вобще кажется закомментено было.
А не, пардон, поковырялся в коде. Блин, может из-за этого косяк?
PS: поковырялся. Не помогло. Но добавил еще одно условие при чтении с текстбоксов. Иначе, если вводишь нижнюю границу -2, получаешь бесконечность.

-------
((( Windows Visлa Висит и будет Висеть ))))


Последний раз редактировалось N!kitoZZ, 02-06-2011 в 16:56.


Отправлено: 16:22, 02-06-2011 | #7


Старожил


Сообщения: 154
Благодарности: 39

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: rar Help.rar
(37.2 Kb, 7 просмотров)

ладно, вот держи, жмякаешь кнопку calc - он считает.

Отправлено: 09:52, 04-06-2011 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Подсобите немного с кодом C#

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Подсобите пожалуйста aleksking Флейм 1 12-11-2010 15:14
Интерфейс - Подсобите в решении двух вопросов(удалить корзину, и убрать отчет при загрузке систем HarrysFerrarievich Microsoft Windows 7 1 05-10-2010 12:21
Подсобите с выбором Мат. платы camorez Материнские платы и память 5 26-02-2009 11:17
Подсобите подобрать более оптимальный вариант, пожалуйста retsam Выбор отдельных компонентов компьютера и конфигурации в целом 18 21-07-2008 20:22
C/C++ - Подсобите с прогой плз ApxoH Программирование и базы данных 5 01-06-2008 21:09




 
Переход