LuckyStrike
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здравствуйте, будьте добры помочь с задачкой, вот её условие: Разработать программу для вычисления определенного интеграла от заданной функции на заданном отрезке методом прямоугольников. Программа должна разбивать отрезок на три равные части, запускать по выбору вычисления на каждом отрезке по 10000 значений либо параллельно, либо последовательно, обеспечивать приостановку и прерывание вычислений, установку приоритета каждого потока, по окончании вычислений сложить их результаты и получить ответ(3*x3/sin(x) на отрезке [0, 6]). а вот код, который я написал под неё: [CODE=csh] namespace интеграл { class Integral { public double summa = 0; public double a, b; public Integral(double a, double b) { this.a = a; this.b = b; } } class Program { public static void sum(object pp) { Integral p = pp as Integral; double summa = 0; double a = p.a; double b = p.b; double dx = (b - a) / 10000; for (double i = a; i <= b; i+=dx) summa += dx*Function(i); } static public double Function(double x) { double y; y = (3 * Math.Pow(x, 3)) / Math.Sin(x); return y; } static void Main(string[] args) { int a = 0; int b = 6; int c = (b - a) / 3; Integral p1 = new Integral(a, c); Integral p2 = new Integral(c, b-c); Integral p3 = new Integral(b-c, b); Thread proc1 = new Thread(new ParameterizedThreadStart(sum)); Thread proc2 = new Thread(new ParameterizedThreadStart(sum)); Thread proc3 = new Thread(new ParameterizedThreadStart(sum)); proc1.Start(p1); proc2.Start(p2); proc3.Start(p3); proc1.Join(); proc2.Join(); proc3.Join(); Console.WriteLine(Function(p1.summa+p2.summa+p3.summa)); } } } [/CODE]подскажите что исправить. фишка в этой задачи в том, что я отрезок разбиваю на три части (то есть потока на 10000) и потом их складываю и должен быть ответ. |