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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2011, 00:25   #1
FeetSteel
Новичок
Джуниор
 
Регистрация: 02.12.2011
Сообщений: 1
По умолчанию Разделение на потоки c++ builder 6

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

Unit1
Код:
#include "Unit2.h"
#include "Unit2.cpp"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

Runge kut;


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------


void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
kut.Kum=StrToFloat(Edit1->Text);
kut.K0=StrToFloat(Edit2->Text);
kut.Kdos=StrToFloat(Edit3->Text);
kut.Ta=StrToFloat(Edit4->Text);
kut.Tb=StrToFloat(Edit5->Text);
kut.Tc=StrToFloat(Edit6->Text);
kut.y=StrToFloat(Edit7->Text);
kut.y=StrToFloat(Edit8->Text);
kut.y=StrToFloat(Edit9->Text);
kut.y=StrToFloat(Edit10->Text);
kut.A=StrToFloat(Edit11->Text);
kut.B=StrToFloat(Edit12->Text);
kut.h=StrToFloat(Edit13->Text);
kut.c=StrToFloat(Edit14->Text);

Series1->Clear();
kut.S = Series1;
kut.rk();

}


catch(EOverflow&)
{Application->MessageBox("Возможно значения слишком большие","Переполнение",MB_OK);
}

catch(EConvertError&)
{Application->MessageBox("Вводите цифры, а не буквы", "Ошибка ввода данных", MB_OK );
}
}

Класс Unit2
Код:
#include "Unit2.h"
#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

class Runge
{
private:
double k1,k2,k3,k4,f1;
double b0,b1,b2,b3;

public:
TLineSeries *S;
double Ta,Tb,Tc,Kum,K0,Kdos,A,B,h,c,t,Y,y;
void f(double y0, double y1, double y2, double y3);
void vychislenie(double t, double &Y);
void rk(void);
};

void Runge::f(double y0, double y1, double y2, double y3)
{
   f1=y1;
   f1=y2;
   f1=y3;
   f1=((b3*c-b3*y0)-y1-(b2*y2)-(y3*b1))/b0;
};
void Runge::vychislenie(double t, double &Y)
{
      f(y,y,y,y);

      k1=h*f1;
      k1=h*f1;
      k1=h*f1;
      k1=h*f1;

      f(y+k1/2,y+k1/2,y+k1/2,y+k1/2);

      k2=h*f1;
      k2=h*f1;
      k2=h*f1;
      k2=h*f1;

      f(y+k2/2,y+k2/2,y+k2/2,y+k2/2);

      k3=h*f1;
      k3=h*f1;
      k3=h*f1;
      k3=h*f1;

      f(y+k3,y+k3,y+k3,y+k3);

      k4=h*f1;
      k4=h*f1;
      k4=h*f1;
      k4=h*f1;

      y=y+(k1+2*k2+2*k3+k4)/6;
      y=y+(k1+2*k2+2*k3+k4)/6;
      y=y+(k1+2*k2+2*k3+k4)/6;
      y=y+(k1+2*k2+2*k3+k4)/6;

      Y=y;
};
void Runge::rk(void)
{
b0=Ta*Tb*Tc;
b1=(Tb*Tc+(Ta*(Tb+Tc)));
b2=(Ta+Tb+Tc);
b3=Kum*K0*Kdos;

for (t=A; t<=B; t=t+h)
 {
        vychislenie(t,Y);
        S->AddXY(t,Y);
 }
};
Вот такой ужас накорябал =) Теперь не могу понять, как реализовать собственно этот метод (разделение на потоки). Читал про TThread - мало чего понял... Подскажите, помогите
FeetSteel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CodeGear C++ Builder 2007 Lite не может откомпилировать исходники C++ Builder 6 Ecosasha C++ Builder 2 22.11.2013 15:02
Разделение. Maksim_27_10 Общие вопросы C/C++ 8 21.04.2010 20:40
Потоки в Builder C++ NiCola999 C++ Builder 7 01.11.2009 13:37
Builder C++ бинарные потоки,файлы Yakushov C++ Builder 1 21.12.2008 11:55